.copy = &r100_copy_blit,
                .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
        },
-       .get_engine_clock = &radeon_legacy_get_engine_clock,
-       .set_engine_clock = &radeon_legacy_set_engine_clock,
-       .get_memory_clock = &radeon_legacy_get_memory_clock,
-       .set_memory_clock = NULL,
-       .get_pcie_lanes = NULL,
-       .set_pcie_lanes = NULL,
-       .set_clock_gating = &radeon_legacy_set_clock_gating,
        .set_surface_reg = r100_set_surface_reg,
        .clear_surface_reg = r100_clear_surface_reg,
        .hpd = {
                .finish = &r100_pm_finish,
                .init_profile = &r100_pm_init_profile,
                .get_dynpm_state = &r100_pm_get_dynpm_state,
+               .get_engine_clock = &radeon_legacy_get_engine_clock,
+               .set_engine_clock = &radeon_legacy_set_engine_clock,
+               .get_memory_clock = &radeon_legacy_get_memory_clock,
+               .set_memory_clock = NULL,
+               .get_pcie_lanes = NULL,
+               .set_pcie_lanes = NULL,
+               .set_clock_gating = &radeon_legacy_set_clock_gating,
        },
        .pflip = {
                .pre_page_flip = &r100_pre_page_flip,
                .copy = &r100_copy_blit,
                .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
        },
-       .get_engine_clock = &radeon_legacy_get_engine_clock,
-       .set_engine_clock = &radeon_legacy_set_engine_clock,
-       .get_memory_clock = &radeon_legacy_get_memory_clock,
-       .set_memory_clock = NULL,
-       .set_pcie_lanes = NULL,
-       .set_clock_gating = &radeon_legacy_set_clock_gating,
        .set_surface_reg = r100_set_surface_reg,
        .clear_surface_reg = r100_clear_surface_reg,
        .hpd = {
                .finish = &r100_pm_finish,
                .init_profile = &r100_pm_init_profile,
                .get_dynpm_state = &r100_pm_get_dynpm_state,
+               .get_engine_clock = &radeon_legacy_get_engine_clock,
+               .set_engine_clock = &radeon_legacy_set_engine_clock,
+               .get_memory_clock = &radeon_legacy_get_memory_clock,
+               .set_memory_clock = NULL,
+               .get_pcie_lanes = NULL,
+               .set_pcie_lanes = NULL,
+               .set_clock_gating = &radeon_legacy_set_clock_gating,
        },
        .pflip = {
                .pre_page_flip = &r100_pre_page_flip,
                .copy = &r100_copy_blit,
                .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
        },
-       .get_engine_clock = &radeon_legacy_get_engine_clock,
-       .set_engine_clock = &radeon_legacy_set_engine_clock,
-       .get_memory_clock = &radeon_legacy_get_memory_clock,
-       .set_memory_clock = NULL,
-       .get_pcie_lanes = &rv370_get_pcie_lanes,
-       .set_pcie_lanes = &rv370_set_pcie_lanes,
-       .set_clock_gating = &radeon_legacy_set_clock_gating,
        .set_surface_reg = r100_set_surface_reg,
        .clear_surface_reg = r100_clear_surface_reg,
        .hpd = {
                .finish = &r100_pm_finish,
                .init_profile = &r100_pm_init_profile,
                .get_dynpm_state = &r100_pm_get_dynpm_state,
+               .get_engine_clock = &radeon_legacy_get_engine_clock,
+               .set_engine_clock = &radeon_legacy_set_engine_clock,
+               .get_memory_clock = &radeon_legacy_get_memory_clock,
+               .set_memory_clock = NULL,
+               .get_pcie_lanes = &rv370_get_pcie_lanes,
+               .set_pcie_lanes = &rv370_set_pcie_lanes,
+               .set_clock_gating = &radeon_legacy_set_clock_gating,
        },
        .pflip = {
                .pre_page_flip = &r100_pre_page_flip,
                .copy = &r100_copy_blit,
                .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
        },
-       .get_engine_clock = &radeon_legacy_get_engine_clock,
-       .set_engine_clock = &radeon_legacy_set_engine_clock,
-       .get_memory_clock = &radeon_legacy_get_memory_clock,
-       .set_memory_clock = NULL,
-       .set_pcie_lanes = &rv370_set_pcie_lanes,
-       .set_clock_gating = &radeon_legacy_set_clock_gating,
        .set_surface_reg = r100_set_surface_reg,
        .clear_surface_reg = r100_clear_surface_reg,
        .hpd = {
                .finish = &r100_pm_finish,
                .init_profile = &r100_pm_init_profile,
                .get_dynpm_state = &r100_pm_get_dynpm_state,
+               .get_engine_clock = &radeon_legacy_get_engine_clock,
+               .set_engine_clock = &radeon_legacy_set_engine_clock,
+               .get_memory_clock = &radeon_legacy_get_memory_clock,
+               .set_memory_clock = NULL,
+               .get_pcie_lanes = &rv370_get_pcie_lanes,
+               .set_pcie_lanes = &rv370_set_pcie_lanes,
+               .set_clock_gating = &radeon_legacy_set_clock_gating,
        },
        .pflip = {
                .pre_page_flip = &r100_pre_page_flip,
                .copy = &r100_copy_blit,
                .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
        },
-       .get_engine_clock = &radeon_atom_get_engine_clock,
-       .set_engine_clock = &radeon_atom_set_engine_clock,
-       .get_memory_clock = &radeon_atom_get_memory_clock,
-       .set_memory_clock = &radeon_atom_set_memory_clock,
-       .get_pcie_lanes = &rv370_get_pcie_lanes,
-       .set_pcie_lanes = &rv370_set_pcie_lanes,
-       .set_clock_gating = &radeon_atom_set_clock_gating,
        .set_surface_reg = r100_set_surface_reg,
        .clear_surface_reg = r100_clear_surface_reg,
 
                .finish = &r100_pm_finish,
                .init_profile = &r420_pm_init_profile,
                .get_dynpm_state = &r100_pm_get_dynpm_state,
+               .get_engine_clock = &radeon_atom_get_engine_clock,
+               .set_engine_clock = &radeon_atom_set_engine_clock,
+               .get_memory_clock = &radeon_atom_get_memory_clock,
+               .set_memory_clock = &radeon_atom_set_memory_clock,
+               .get_pcie_lanes = &rv370_get_pcie_lanes,
+               .set_pcie_lanes = &rv370_set_pcie_lanes,
+               .set_clock_gating = &radeon_atom_set_clock_gating,
        },
        .pflip = {
                .pre_page_flip = &r100_pre_page_flip,
                .copy = &r100_copy_blit,
                .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
        },
-       .get_engine_clock = &radeon_legacy_get_engine_clock,
-       .set_engine_clock = &radeon_legacy_set_engine_clock,
-       .get_memory_clock = &radeon_legacy_get_memory_clock,
-       .set_memory_clock = NULL,
-       .get_pcie_lanes = NULL,
-       .set_pcie_lanes = NULL,
-       .set_clock_gating = &radeon_legacy_set_clock_gating,
        .set_surface_reg = r100_set_surface_reg,
        .clear_surface_reg = r100_clear_surface_reg,
        .hpd = {
                .finish = &r100_pm_finish,
                .init_profile = &r100_pm_init_profile,
                .get_dynpm_state = &r100_pm_get_dynpm_state,
+               .get_engine_clock = &radeon_legacy_get_engine_clock,
+               .set_engine_clock = &radeon_legacy_set_engine_clock,
+               .get_memory_clock = &radeon_legacy_get_memory_clock,
+               .set_memory_clock = NULL,
+               .get_pcie_lanes = NULL,
+               .set_pcie_lanes = NULL,
+               .set_clock_gating = &radeon_legacy_set_clock_gating,
        },
        .pflip = {
                .pre_page_flip = &r100_pre_page_flip,
                .copy = &r100_copy_blit,
                .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
        },
-       .get_engine_clock = &radeon_atom_get_engine_clock,
-       .set_engine_clock = &radeon_atom_set_engine_clock,
-       .get_memory_clock = &radeon_atom_get_memory_clock,
-       .set_memory_clock = &radeon_atom_set_memory_clock,
-       .get_pcie_lanes = NULL,
-       .set_pcie_lanes = NULL,
-       .set_clock_gating = &radeon_atom_set_clock_gating,
        .set_surface_reg = r100_set_surface_reg,
        .clear_surface_reg = r100_clear_surface_reg,
        .hpd = {
                .finish = &rs600_pm_finish,
                .init_profile = &r420_pm_init_profile,
                .get_dynpm_state = &r100_pm_get_dynpm_state,
+               .get_engine_clock = &radeon_atom_get_engine_clock,
+               .set_engine_clock = &radeon_atom_set_engine_clock,
+               .get_memory_clock = &radeon_atom_get_memory_clock,
+               .set_memory_clock = &radeon_atom_set_memory_clock,
+               .get_pcie_lanes = NULL,
+               .set_pcie_lanes = NULL,
+               .set_clock_gating = &radeon_atom_set_clock_gating,
        },
        .pflip = {
                .pre_page_flip = &rs600_pre_page_flip,
                .copy = &r200_copy_dma,
                .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
        },
-       .get_engine_clock = &radeon_atom_get_engine_clock,
-       .set_engine_clock = &radeon_atom_set_engine_clock,
-       .get_memory_clock = &radeon_atom_get_memory_clock,
-       .set_memory_clock = &radeon_atom_set_memory_clock,
-       .get_pcie_lanes = NULL,
-       .set_pcie_lanes = NULL,
-       .set_clock_gating = &radeon_atom_set_clock_gating,
        .set_surface_reg = r100_set_surface_reg,
        .clear_surface_reg = r100_clear_surface_reg,
        .hpd = {
                .finish = &rs600_pm_finish,
                .init_profile = &r420_pm_init_profile,
                .get_dynpm_state = &r100_pm_get_dynpm_state,
+               .get_engine_clock = &radeon_atom_get_engine_clock,
+               .set_engine_clock = &radeon_atom_set_engine_clock,
+               .get_memory_clock = &radeon_atom_get_memory_clock,
+               .set_memory_clock = &radeon_atom_set_memory_clock,
+               .get_pcie_lanes = NULL,
+               .set_pcie_lanes = NULL,
+               .set_clock_gating = &radeon_atom_set_clock_gating,
        },
        .pflip = {
                .pre_page_flip = &rs600_pre_page_flip,
                .copy = &r100_copy_blit,
                .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
        },
-       .get_engine_clock = &radeon_atom_get_engine_clock,
-       .set_engine_clock = &radeon_atom_set_engine_clock,
-       .get_memory_clock = &radeon_atom_get_memory_clock,
-       .set_memory_clock = &radeon_atom_set_memory_clock,
-       .get_pcie_lanes = &rv370_get_pcie_lanes,
-       .set_pcie_lanes = &rv370_set_pcie_lanes,
-       .set_clock_gating = &radeon_atom_set_clock_gating,
        .set_surface_reg = r100_set_surface_reg,
        .clear_surface_reg = r100_clear_surface_reg,
        .hpd = {
                .finish = &rs600_pm_finish,
                .init_profile = &r420_pm_init_profile,
                .get_dynpm_state = &r100_pm_get_dynpm_state,
+               .get_engine_clock = &radeon_atom_get_engine_clock,
+               .set_engine_clock = &radeon_atom_set_engine_clock,
+               .get_memory_clock = &radeon_atom_get_memory_clock,
+               .set_memory_clock = &radeon_atom_set_memory_clock,
+               .get_pcie_lanes = &rv370_get_pcie_lanes,
+               .set_pcie_lanes = &rv370_set_pcie_lanes,
+               .set_clock_gating = &radeon_atom_set_clock_gating,
        },
        .pflip = {
                .pre_page_flip = &rs600_pre_page_flip,
                .copy = &r100_copy_blit,
                .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
        },
-       .get_engine_clock = &radeon_atom_get_engine_clock,
-       .set_engine_clock = &radeon_atom_set_engine_clock,
-       .get_memory_clock = &radeon_atom_get_memory_clock,
-       .set_memory_clock = &radeon_atom_set_memory_clock,
-       .get_pcie_lanes = &rv370_get_pcie_lanes,
-       .set_pcie_lanes = &rv370_set_pcie_lanes,
-       .set_clock_gating = &radeon_atom_set_clock_gating,
        .set_surface_reg = r100_set_surface_reg,
        .clear_surface_reg = r100_clear_surface_reg,
        .hpd = {
                .finish = &rs600_pm_finish,
                .init_profile = &r420_pm_init_profile,
                .get_dynpm_state = &r100_pm_get_dynpm_state,
+               .get_engine_clock = &radeon_atom_get_engine_clock,
+               .set_engine_clock = &radeon_atom_set_engine_clock,
+               .get_memory_clock = &radeon_atom_get_memory_clock,
+               .set_memory_clock = &radeon_atom_set_memory_clock,
+               .get_pcie_lanes = &rv370_get_pcie_lanes,
+               .set_pcie_lanes = &rv370_set_pcie_lanes,
+               .set_clock_gating = &radeon_atom_set_clock_gating,
        },
        .pflip = {
                .pre_page_flip = &rs600_pre_page_flip,
                .copy = &r600_copy_blit,
                .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
        },
-       .get_engine_clock = &radeon_atom_get_engine_clock,
-       .set_engine_clock = &radeon_atom_set_engine_clock,
-       .get_memory_clock = &radeon_atom_get_memory_clock,
-       .set_memory_clock = &radeon_atom_set_memory_clock,
-       .get_pcie_lanes = &r600_get_pcie_lanes,
-       .set_pcie_lanes = &r600_set_pcie_lanes,
-       .set_clock_gating = NULL,
        .set_surface_reg = r600_set_surface_reg,
        .clear_surface_reg = r600_clear_surface_reg,
        .hpd = {
                .finish = &rs600_pm_finish,
                .init_profile = &r600_pm_init_profile,
                .get_dynpm_state = &r600_pm_get_dynpm_state,
+               .get_engine_clock = &radeon_atom_get_engine_clock,
+               .set_engine_clock = &radeon_atom_set_engine_clock,
+               .get_memory_clock = &radeon_atom_get_memory_clock,
+               .set_memory_clock = &radeon_atom_set_memory_clock,
+               .get_pcie_lanes = &r600_get_pcie_lanes,
+               .set_pcie_lanes = &r600_set_pcie_lanes,
+               .set_clock_gating = NULL,
        },
        .pflip = {
                .pre_page_flip = &rs600_pre_page_flip,
                .copy = &r600_copy_blit,
                .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
        },
-       .get_engine_clock = &radeon_atom_get_engine_clock,
-       .set_engine_clock = &radeon_atom_set_engine_clock,
-       .get_memory_clock = NULL,
-       .set_memory_clock = NULL,
-       .get_pcie_lanes = NULL,
-       .set_pcie_lanes = NULL,
-       .set_clock_gating = NULL,
        .set_surface_reg = r600_set_surface_reg,
        .clear_surface_reg = r600_clear_surface_reg,
        .hpd = {
                .finish = &rs600_pm_finish,
                .init_profile = &rs780_pm_init_profile,
                .get_dynpm_state = &r600_pm_get_dynpm_state,
+               .get_engine_clock = &radeon_atom_get_engine_clock,
+               .set_engine_clock = &radeon_atom_set_engine_clock,
+               .get_memory_clock = NULL,
+               .set_memory_clock = NULL,
+               .get_pcie_lanes = NULL,
+               .set_pcie_lanes = NULL,
+               .set_clock_gating = NULL,
        },
        .pflip = {
                .pre_page_flip = &rs600_pre_page_flip,
                .copy = &r600_copy_blit,
                .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
        },
-       .get_engine_clock = &radeon_atom_get_engine_clock,
-       .set_engine_clock = &radeon_atom_set_engine_clock,
-       .get_memory_clock = &radeon_atom_get_memory_clock,
-       .set_memory_clock = &radeon_atom_set_memory_clock,
-       .get_pcie_lanes = &r600_get_pcie_lanes,
-       .set_pcie_lanes = &r600_set_pcie_lanes,
-       .set_clock_gating = &radeon_atom_set_clock_gating,
        .set_surface_reg = r600_set_surface_reg,
        .clear_surface_reg = r600_clear_surface_reg,
        .hpd = {
                .finish = &rs600_pm_finish,
                .init_profile = &r600_pm_init_profile,
                .get_dynpm_state = &r600_pm_get_dynpm_state,
+               .get_engine_clock = &radeon_atom_get_engine_clock,
+               .set_engine_clock = &radeon_atom_set_engine_clock,
+               .get_memory_clock = &radeon_atom_get_memory_clock,
+               .set_memory_clock = &radeon_atom_set_memory_clock,
+               .get_pcie_lanes = &r600_get_pcie_lanes,
+               .set_pcie_lanes = &r600_set_pcie_lanes,
+               .set_clock_gating = &radeon_atom_set_clock_gating,
        },
        .pflip = {
                .pre_page_flip = &rs600_pre_page_flip,
                .copy = &r600_copy_blit,
                .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
        },
-       .get_engine_clock = &radeon_atom_get_engine_clock,
-       .set_engine_clock = &radeon_atom_set_engine_clock,
-       .get_memory_clock = &radeon_atom_get_memory_clock,
-       .set_memory_clock = &radeon_atom_set_memory_clock,
-       .get_pcie_lanes = &r600_get_pcie_lanes,
-       .set_pcie_lanes = &r600_set_pcie_lanes,
-       .set_clock_gating = NULL,
        .set_surface_reg = r600_set_surface_reg,
        .clear_surface_reg = r600_clear_surface_reg,
        .hpd = {
                .finish = &evergreen_pm_finish,
                .init_profile = &r600_pm_init_profile,
                .get_dynpm_state = &r600_pm_get_dynpm_state,
+               .get_engine_clock = &radeon_atom_get_engine_clock,
+               .set_engine_clock = &radeon_atom_set_engine_clock,
+               .get_memory_clock = &radeon_atom_get_memory_clock,
+               .set_memory_clock = &radeon_atom_set_memory_clock,
+               .get_pcie_lanes = &r600_get_pcie_lanes,
+               .set_pcie_lanes = &r600_set_pcie_lanes,
+               .set_clock_gating = NULL,
        },
        .pflip = {
                .pre_page_flip = &evergreen_pre_page_flip,
                .copy = &r600_copy_blit,
                .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
        },
-       .get_engine_clock = &radeon_atom_get_engine_clock,
-       .set_engine_clock = &radeon_atom_set_engine_clock,
-       .get_memory_clock = NULL,
-       .set_memory_clock = NULL,
-       .get_pcie_lanes = NULL,
-       .set_pcie_lanes = NULL,
-       .set_clock_gating = NULL,
        .set_surface_reg = r600_set_surface_reg,
        .clear_surface_reg = r600_clear_surface_reg,
        .hpd = {
                .finish = &evergreen_pm_finish,
                .init_profile = &sumo_pm_init_profile,
                .get_dynpm_state = &r600_pm_get_dynpm_state,
+               .get_engine_clock = &radeon_atom_get_engine_clock,
+               .set_engine_clock = &radeon_atom_set_engine_clock,
+               .get_memory_clock = NULL,
+               .set_memory_clock = NULL,
+               .get_pcie_lanes = NULL,
+               .set_pcie_lanes = NULL,
+               .set_clock_gating = NULL,
        },
        .pflip = {
                .pre_page_flip = &evergreen_pre_page_flip,
                .copy = &r600_copy_blit,
                .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
        },
-       .get_engine_clock = &radeon_atom_get_engine_clock,
-       .set_engine_clock = &radeon_atom_set_engine_clock,
-       .get_memory_clock = &radeon_atom_get_memory_clock,
-       .set_memory_clock = &radeon_atom_set_memory_clock,
-       .get_pcie_lanes = NULL,
-       .set_pcie_lanes = NULL,
-       .set_clock_gating = NULL,
        .set_surface_reg = r600_set_surface_reg,
        .clear_surface_reg = r600_clear_surface_reg,
        .hpd = {
                .finish = &evergreen_pm_finish,
                .init_profile = &r600_pm_init_profile,
                .get_dynpm_state = &r600_pm_get_dynpm_state,
+               .get_engine_clock = &radeon_atom_get_engine_clock,
+               .set_engine_clock = &radeon_atom_set_engine_clock,
+               .get_memory_clock = &radeon_atom_get_memory_clock,
+               .set_memory_clock = &radeon_atom_set_memory_clock,
+               .get_pcie_lanes = NULL,
+               .set_pcie_lanes = NULL,
+               .set_clock_gating = NULL,
        },
        .pflip = {
                .pre_page_flip = &evergreen_pre_page_flip,
                .copy = &r600_copy_blit,
                .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX,
        },
-       .get_engine_clock = &radeon_atom_get_engine_clock,
-       .set_engine_clock = &radeon_atom_set_engine_clock,
-       .get_memory_clock = &radeon_atom_get_memory_clock,
-       .set_memory_clock = &radeon_atom_set_memory_clock,
-       .get_pcie_lanes = NULL,
-       .set_pcie_lanes = NULL,
-       .set_clock_gating = NULL,
        .set_surface_reg = r600_set_surface_reg,
        .clear_surface_reg = r600_clear_surface_reg,
        .hpd = {
                .finish = &evergreen_pm_finish,
                .init_profile = &r600_pm_init_profile,
                .get_dynpm_state = &r600_pm_get_dynpm_state,
+               .get_engine_clock = &radeon_atom_get_engine_clock,
+               .set_engine_clock = &radeon_atom_set_engine_clock,
+               .get_memory_clock = &radeon_atom_get_memory_clock,
+               .set_memory_clock = &radeon_atom_set_memory_clock,
+               .get_pcie_lanes = NULL,
+               .set_pcie_lanes = NULL,
+               .set_clock_gating = NULL,
        },
        .pflip = {
                .pre_page_flip = &evergreen_pre_page_flip,
                rdev->asic = &r420_asic;
                /* handle macs */
                if (rdev->bios == NULL) {
-                       rdev->asic->get_engine_clock = &radeon_legacy_get_engine_clock;
-                       rdev->asic->set_engine_clock = &radeon_legacy_set_engine_clock;
-                       rdev->asic->get_memory_clock = &radeon_legacy_get_memory_clock;
-                       rdev->asic->set_memory_clock = NULL;
+                       rdev->asic->pm.get_engine_clock = &radeon_legacy_get_engine_clock;
+                       rdev->asic->pm.set_engine_clock = &radeon_legacy_set_engine_clock;
+                       rdev->asic->pm.get_memory_clock = &radeon_legacy_get_memory_clock;
+                       rdev->asic->pm.set_memory_clock = NULL;
                }
                break;
        case CHIP_RS400:
        }
 
        if (rdev->flags & RADEON_IS_IGP) {
-               rdev->asic->get_memory_clock = NULL;
-               rdev->asic->set_memory_clock = NULL;
+               rdev->asic->pm.get_memory_clock = NULL;
+               rdev->asic->pm.set_memory_clock = NULL;
        }
 
        return 0;