1926deccbSFrançois Tigeot /* 2926deccbSFrançois Tigeot * Copyright 2008 Advanced Micro Devices, Inc. 3926deccbSFrançois Tigeot * Copyright 2008 Red Hat Inc. 4926deccbSFrançois Tigeot * Copyright 2009 Jerome Glisse. 5926deccbSFrançois Tigeot * 6926deccbSFrançois Tigeot * Permission is hereby granted, free of charge, to any person obtaining a 7926deccbSFrançois Tigeot * copy of this software and associated documentation files (the "Software"), 8926deccbSFrançois Tigeot * to deal in the Software without restriction, including without limitation 9926deccbSFrançois Tigeot * the rights to use, copy, modify, merge, publish, distribute, sublicense, 10926deccbSFrançois Tigeot * and/or sell copies of the Software, and to permit persons to whom the 11926deccbSFrançois Tigeot * Software is furnished to do so, subject to the following conditions: 12926deccbSFrançois Tigeot * 13926deccbSFrançois Tigeot * The above copyright notice and this permission notice shall be included in 14926deccbSFrançois Tigeot * all copies or substantial portions of the Software. 15926deccbSFrançois Tigeot * 16926deccbSFrançois Tigeot * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17926deccbSFrançois Tigeot * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18926deccbSFrançois Tigeot * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19926deccbSFrançois Tigeot * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 20926deccbSFrançois Tigeot * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21926deccbSFrançois Tigeot * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22926deccbSFrançois Tigeot * OTHER DEALINGS IN THE SOFTWARE. 23926deccbSFrançois Tigeot * 24926deccbSFrançois Tigeot * Authors: Dave Airlie 25926deccbSFrançois Tigeot * Alex Deucher 26926deccbSFrançois Tigeot * Jerome Glisse 27926deccbSFrançois Tigeot */ 28926deccbSFrançois Tigeot 297dcf36dcSFrançois Tigeot #include <linux/console.h> 30926deccbSFrançois Tigeot #include <drm/drmP.h> 31926deccbSFrançois Tigeot #include <drm/drm_crtc_helper.h> 3283b4b9b9SFrançois Tigeot #include <drm/radeon_drm.h> 337dcf36dcSFrançois Tigeot #include <linux/vgaarb.h> 34926deccbSFrançois Tigeot #include "radeon_reg.h" 35926deccbSFrançois Tigeot #include "radeon.h" 36926deccbSFrançois Tigeot #include "radeon_asic.h" 37926deccbSFrançois Tigeot #include "atom.h" 3857e252bfSMichael Neumann #include "rv770_dpm.h" 3957e252bfSMichael Neumann #include "ni_dpm.h" 40926deccbSFrançois Tigeot 41926deccbSFrançois Tigeot /* 42926deccbSFrançois Tigeot * Registers accessors functions. 43926deccbSFrançois Tigeot */ 44926deccbSFrançois Tigeot /** 45926deccbSFrançois Tigeot * radeon_invalid_rreg - dummy reg read function 46926deccbSFrançois Tigeot * 47926deccbSFrançois Tigeot * @rdev: radeon device pointer 48926deccbSFrançois Tigeot * @reg: offset of register 49926deccbSFrançois Tigeot * 50926deccbSFrançois Tigeot * Dummy register read function. Used for register blocks 51926deccbSFrançois Tigeot * that certain asics don't have (all asics). 52926deccbSFrançois Tigeot * Returns the value in the register. 53926deccbSFrançois Tigeot */ 54926deccbSFrançois Tigeot static uint32_t radeon_invalid_rreg(struct radeon_device *rdev, uint32_t reg) 55926deccbSFrançois Tigeot { 56c4ef309bSzrj DRM_ERROR("Invalid callback to read register 0x%04X\n", reg); 57c4ef309bSzrj BUG_ON(1); 58926deccbSFrançois Tigeot return 0; 59926deccbSFrançois Tigeot } 60926deccbSFrançois Tigeot 61926deccbSFrançois Tigeot /** 62926deccbSFrançois Tigeot * radeon_invalid_wreg - dummy reg write function 63926deccbSFrançois Tigeot * 64926deccbSFrançois Tigeot * @rdev: radeon device pointer 65926deccbSFrançois Tigeot * @reg: offset of register 66926deccbSFrançois Tigeot * @v: value to write to the register 67926deccbSFrançois Tigeot * 68926deccbSFrançois Tigeot * Dummy register read function. Used for register blocks 69926deccbSFrançois Tigeot * that certain asics don't have (all asics). 70926deccbSFrançois Tigeot */ 71926deccbSFrançois Tigeot static void radeon_invalid_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v) 72926deccbSFrançois Tigeot { 73c4ef309bSzrj DRM_ERROR("Invalid callback to write register 0x%04X with 0x%08X\n", 74926deccbSFrançois Tigeot reg, v); 75c4ef309bSzrj BUG_ON(1); 76926deccbSFrançois Tigeot } 77926deccbSFrançois Tigeot 78926deccbSFrançois Tigeot /** 79926deccbSFrançois Tigeot * radeon_register_accessor_init - sets up the register accessor callbacks 80926deccbSFrançois Tigeot * 81926deccbSFrançois Tigeot * @rdev: radeon device pointer 82926deccbSFrançois Tigeot * 83926deccbSFrançois Tigeot * Sets up the register accessor callbacks for various register 84926deccbSFrançois Tigeot * apertures. Not all asics have all apertures (all asics). 85926deccbSFrançois Tigeot */ 86926deccbSFrançois Tigeot static void radeon_register_accessor_init(struct radeon_device *rdev) 87926deccbSFrançois Tigeot { 88926deccbSFrançois Tigeot rdev->mc_rreg = &radeon_invalid_rreg; 89926deccbSFrançois Tigeot rdev->mc_wreg = &radeon_invalid_wreg; 90926deccbSFrançois Tigeot rdev->pll_rreg = &radeon_invalid_rreg; 91926deccbSFrançois Tigeot rdev->pll_wreg = &radeon_invalid_wreg; 92926deccbSFrançois Tigeot rdev->pciep_rreg = &radeon_invalid_rreg; 93926deccbSFrançois Tigeot rdev->pciep_wreg = &radeon_invalid_wreg; 94926deccbSFrançois Tigeot 95926deccbSFrançois Tigeot /* Don't change order as we are overridding accessor. */ 96926deccbSFrançois Tigeot if (rdev->family < CHIP_RV515) { 97926deccbSFrançois Tigeot rdev->pcie_reg_mask = 0xff; 98926deccbSFrançois Tigeot } else { 99926deccbSFrançois Tigeot rdev->pcie_reg_mask = 0x7ff; 100926deccbSFrançois Tigeot } 101926deccbSFrançois Tigeot /* FIXME: not sure here */ 102926deccbSFrançois Tigeot if (rdev->family <= CHIP_R580) { 103926deccbSFrançois Tigeot rdev->pll_rreg = &r100_pll_rreg; 104926deccbSFrançois Tigeot rdev->pll_wreg = &r100_pll_wreg; 105926deccbSFrançois Tigeot } 106926deccbSFrançois Tigeot if (rdev->family >= CHIP_R420) { 107926deccbSFrançois Tigeot rdev->mc_rreg = &r420_mc_rreg; 108926deccbSFrançois Tigeot rdev->mc_wreg = &r420_mc_wreg; 109926deccbSFrançois Tigeot } 110926deccbSFrançois Tigeot if (rdev->family >= CHIP_RV515) { 111926deccbSFrançois Tigeot rdev->mc_rreg = &rv515_mc_rreg; 112926deccbSFrançois Tigeot rdev->mc_wreg = &rv515_mc_wreg; 113926deccbSFrançois Tigeot } 114926deccbSFrançois Tigeot if (rdev->family == CHIP_RS400 || rdev->family == CHIP_RS480) { 115926deccbSFrançois Tigeot rdev->mc_rreg = &rs400_mc_rreg; 116926deccbSFrançois Tigeot rdev->mc_wreg = &rs400_mc_wreg; 117926deccbSFrançois Tigeot } 118926deccbSFrançois Tigeot if (rdev->family == CHIP_RS690 || rdev->family == CHIP_RS740) { 119926deccbSFrançois Tigeot rdev->mc_rreg = &rs690_mc_rreg; 120926deccbSFrançois Tigeot rdev->mc_wreg = &rs690_mc_wreg; 121926deccbSFrançois Tigeot } 122926deccbSFrançois Tigeot if (rdev->family == CHIP_RS600) { 123926deccbSFrançois Tigeot rdev->mc_rreg = &rs600_mc_rreg; 124926deccbSFrançois Tigeot rdev->mc_wreg = &rs600_mc_wreg; 125926deccbSFrançois Tigeot } 126f43cf1b1SMichael Neumann if (rdev->family == CHIP_RS780 || rdev->family == CHIP_RS880) { 127f43cf1b1SMichael Neumann rdev->mc_rreg = &rs780_mc_rreg; 128f43cf1b1SMichael Neumann rdev->mc_wreg = &rs780_mc_wreg; 129f43cf1b1SMichael Neumann } 13057e252bfSMichael Neumann 13157e252bfSMichael Neumann if (rdev->family >= CHIP_BONAIRE) { 13257e252bfSMichael Neumann rdev->pciep_rreg = &cik_pciep_rreg; 13357e252bfSMichael Neumann rdev->pciep_wreg = &cik_pciep_wreg; 13457e252bfSMichael Neumann } else if (rdev->family >= CHIP_R600) { 135926deccbSFrançois Tigeot rdev->pciep_rreg = &r600_pciep_rreg; 136926deccbSFrançois Tigeot rdev->pciep_wreg = &r600_pciep_wreg; 137926deccbSFrançois Tigeot } 138926deccbSFrançois Tigeot } 139926deccbSFrançois Tigeot 140*c59a5c48SFrançois Tigeot static int radeon_invalid_get_allowed_info_register(struct radeon_device *rdev, 141*c59a5c48SFrançois Tigeot u32 reg, u32 *val) 142*c59a5c48SFrançois Tigeot { 143*c59a5c48SFrançois Tigeot return -EINVAL; 144*c59a5c48SFrançois Tigeot } 145926deccbSFrançois Tigeot 146926deccbSFrançois Tigeot /* helper to disable agp */ 147926deccbSFrançois Tigeot /** 148926deccbSFrançois Tigeot * radeon_agp_disable - AGP disable helper function 149926deccbSFrançois Tigeot * 150926deccbSFrançois Tigeot * @rdev: radeon device pointer 151926deccbSFrançois Tigeot * 152926deccbSFrançois Tigeot * Removes AGP flags and changes the gart callbacks on AGP 153926deccbSFrançois Tigeot * cards when using the internal gart rather than AGP (all asics). 154926deccbSFrançois Tigeot */ 155926deccbSFrançois Tigeot void radeon_agp_disable(struct radeon_device *rdev) 156926deccbSFrançois Tigeot { 157926deccbSFrançois Tigeot rdev->flags &= ~RADEON_IS_AGP; 158926deccbSFrançois Tigeot if (rdev->family >= CHIP_R600) { 159926deccbSFrançois Tigeot DRM_INFO("Forcing AGP to PCIE mode\n"); 160926deccbSFrançois Tigeot rdev->flags |= RADEON_IS_PCIE; 161926deccbSFrançois Tigeot } else if (rdev->family >= CHIP_RV515 || 162926deccbSFrançois Tigeot rdev->family == CHIP_RV380 || 163926deccbSFrançois Tigeot rdev->family == CHIP_RV410 || 164926deccbSFrançois Tigeot rdev->family == CHIP_R423) { 165926deccbSFrançois Tigeot DRM_INFO("Forcing AGP to PCIE mode\n"); 166926deccbSFrançois Tigeot rdev->flags |= RADEON_IS_PCIE; 167926deccbSFrançois Tigeot rdev->asic->gart.tlb_flush = &rv370_pcie_gart_tlb_flush; 1687dcf36dcSFrançois Tigeot rdev->asic->gart.get_page_entry = &rv370_pcie_gart_get_page_entry; 169926deccbSFrançois Tigeot rdev->asic->gart.set_page = &rv370_pcie_gart_set_page; 170926deccbSFrançois Tigeot } else { 171926deccbSFrançois Tigeot DRM_INFO("Forcing AGP to PCI mode\n"); 172926deccbSFrançois Tigeot rdev->flags |= RADEON_IS_PCI; 173926deccbSFrançois Tigeot rdev->asic->gart.tlb_flush = &r100_pci_gart_tlb_flush; 1747dcf36dcSFrançois Tigeot rdev->asic->gart.get_page_entry = &r100_pci_gart_get_page_entry; 175926deccbSFrançois Tigeot rdev->asic->gart.set_page = &r100_pci_gart_set_page; 176926deccbSFrançois Tigeot } 177926deccbSFrançois Tigeot rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024; 178926deccbSFrançois Tigeot } 179926deccbSFrançois Tigeot 180926deccbSFrançois Tigeot /* 181926deccbSFrançois Tigeot * ASIC 182926deccbSFrançois Tigeot */ 1834cd92098Szrj 184ee479021SImre Vadász static struct radeon_asic_ring r100_gfx_ring = { 1854cd92098Szrj .ib_execute = &r100_ring_ib_execute, 1864cd92098Szrj .emit_fence = &r100_fence_ring_emit, 1874cd92098Szrj .emit_semaphore = &r100_semaphore_ring_emit, 1884cd92098Szrj .cs_parse = &r100_cs_parse, 1894cd92098Szrj .ring_start = &r100_ring_start, 1904cd92098Szrj .ring_test = &r100_ring_test, 1914cd92098Szrj .ib_test = &r100_ib_test, 1924cd92098Szrj .is_lockup = &r100_gpu_is_lockup, 193c6f73aabSFrançois Tigeot .get_rptr = &r100_gfx_get_rptr, 194c6f73aabSFrançois Tigeot .get_wptr = &r100_gfx_get_wptr, 195c6f73aabSFrançois Tigeot .set_wptr = &r100_gfx_set_wptr, 1964cd92098Szrj }; 1974cd92098Szrj 198926deccbSFrançois Tigeot static struct radeon_asic r100_asic = { 199926deccbSFrançois Tigeot .init = &r100_init, 200926deccbSFrançois Tigeot .fini = &r100_fini, 201926deccbSFrançois Tigeot .suspend = &r100_suspend, 202926deccbSFrançois Tigeot .resume = &r100_resume, 203926deccbSFrançois Tigeot .vga_set_state = &r100_vga_set_state, 204926deccbSFrançois Tigeot .asic_reset = &r100_asic_reset, 205c6f73aabSFrançois Tigeot .mmio_hdp_flush = NULL, 206926deccbSFrançois Tigeot .gui_idle = &r100_gui_idle, 207926deccbSFrançois Tigeot .mc_wait_for_idle = &r100_mc_wait_for_idle, 208*c59a5c48SFrançois Tigeot .get_allowed_info_register = radeon_invalid_get_allowed_info_register, 209926deccbSFrançois Tigeot .gart = { 210926deccbSFrançois Tigeot .tlb_flush = &r100_pci_gart_tlb_flush, 2117dcf36dcSFrançois Tigeot .get_page_entry = &r100_pci_gart_get_page_entry, 212926deccbSFrançois Tigeot .set_page = &r100_pci_gart_set_page, 213926deccbSFrançois Tigeot }, 214926deccbSFrançois Tigeot .ring = { 2154cd92098Szrj [RADEON_RING_TYPE_GFX_INDEX] = &r100_gfx_ring 216926deccbSFrançois Tigeot }, 217926deccbSFrançois Tigeot .irq = { 218926deccbSFrançois Tigeot .set = &r100_irq_set, 219926deccbSFrançois Tigeot .process = &r100_irq_process, 220926deccbSFrançois Tigeot }, 221926deccbSFrançois Tigeot .display = { 222926deccbSFrançois Tigeot .bandwidth_update = &r100_bandwidth_update, 223926deccbSFrançois Tigeot .get_vblank_counter = &r100_get_vblank_counter, 224926deccbSFrançois Tigeot .wait_for_vblank = &r100_wait_for_vblank, 225926deccbSFrançois Tigeot .set_backlight_level = &radeon_legacy_set_backlight_level, 226926deccbSFrançois Tigeot .get_backlight_level = &radeon_legacy_get_backlight_level, 227926deccbSFrançois Tigeot }, 228926deccbSFrançois Tigeot .copy = { 229926deccbSFrançois Tigeot .blit = &r100_copy_blit, 230926deccbSFrançois Tigeot .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX, 231926deccbSFrançois Tigeot .dma = NULL, 232926deccbSFrançois Tigeot .dma_ring_index = RADEON_RING_TYPE_GFX_INDEX, 233926deccbSFrançois Tigeot .copy = &r100_copy_blit, 234926deccbSFrançois Tigeot .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX, 235926deccbSFrançois Tigeot }, 236926deccbSFrançois Tigeot .surface = { 237926deccbSFrançois Tigeot .set_reg = r100_set_surface_reg, 238926deccbSFrançois Tigeot .clear_reg = r100_clear_surface_reg, 239926deccbSFrançois Tigeot }, 240926deccbSFrançois Tigeot .hpd = { 241926deccbSFrançois Tigeot .init = &r100_hpd_init, 242926deccbSFrançois Tigeot .fini = &r100_hpd_fini, 243926deccbSFrançois Tigeot .sense = &r100_hpd_sense, 244926deccbSFrançois Tigeot .set_polarity = &r100_hpd_set_polarity, 245926deccbSFrançois Tigeot }, 246926deccbSFrançois Tigeot .pm = { 247926deccbSFrançois Tigeot .misc = &r100_pm_misc, 248926deccbSFrançois Tigeot .prepare = &r100_pm_prepare, 249926deccbSFrançois Tigeot .finish = &r100_pm_finish, 250926deccbSFrançois Tigeot .init_profile = &r100_pm_init_profile, 251926deccbSFrançois Tigeot .get_dynpm_state = &r100_pm_get_dynpm_state, 252926deccbSFrançois Tigeot .get_engine_clock = &radeon_legacy_get_engine_clock, 253926deccbSFrançois Tigeot .set_engine_clock = &radeon_legacy_set_engine_clock, 254926deccbSFrançois Tigeot .get_memory_clock = &radeon_legacy_get_memory_clock, 255926deccbSFrançois Tigeot .set_memory_clock = NULL, 256926deccbSFrançois Tigeot .get_pcie_lanes = NULL, 257926deccbSFrançois Tigeot .set_pcie_lanes = NULL, 258926deccbSFrançois Tigeot .set_clock_gating = &radeon_legacy_set_clock_gating, 259926deccbSFrançois Tigeot }, 260926deccbSFrançois Tigeot .pflip = { 261926deccbSFrançois Tigeot .page_flip = &r100_page_flip, 262c6f73aabSFrançois Tigeot .page_flip_pending = &r100_page_flip_pending, 263926deccbSFrançois Tigeot }, 264926deccbSFrançois Tigeot }; 265926deccbSFrançois Tigeot 266926deccbSFrançois Tigeot static struct radeon_asic r200_asic = { 267926deccbSFrançois Tigeot .init = &r100_init, 268926deccbSFrançois Tigeot .fini = &r100_fini, 269926deccbSFrançois Tigeot .suspend = &r100_suspend, 270926deccbSFrançois Tigeot .resume = &r100_resume, 271926deccbSFrançois Tigeot .vga_set_state = &r100_vga_set_state, 272926deccbSFrançois Tigeot .asic_reset = &r100_asic_reset, 273c6f73aabSFrançois Tigeot .mmio_hdp_flush = NULL, 274926deccbSFrançois Tigeot .gui_idle = &r100_gui_idle, 275926deccbSFrançois Tigeot .mc_wait_for_idle = &r100_mc_wait_for_idle, 276*c59a5c48SFrançois Tigeot .get_allowed_info_register = radeon_invalid_get_allowed_info_register, 277926deccbSFrançois Tigeot .gart = { 278926deccbSFrançois Tigeot .tlb_flush = &r100_pci_gart_tlb_flush, 2797dcf36dcSFrançois Tigeot .get_page_entry = &r100_pci_gart_get_page_entry, 280926deccbSFrançois Tigeot .set_page = &r100_pci_gart_set_page, 281926deccbSFrançois Tigeot }, 282926deccbSFrançois Tigeot .ring = { 2834cd92098Szrj [RADEON_RING_TYPE_GFX_INDEX] = &r100_gfx_ring 284926deccbSFrançois Tigeot }, 285926deccbSFrançois Tigeot .irq = { 286926deccbSFrançois Tigeot .set = &r100_irq_set, 287926deccbSFrançois Tigeot .process = &r100_irq_process, 288926deccbSFrançois Tigeot }, 289926deccbSFrançois Tigeot .display = { 290926deccbSFrançois Tigeot .bandwidth_update = &r100_bandwidth_update, 291926deccbSFrançois Tigeot .get_vblank_counter = &r100_get_vblank_counter, 292926deccbSFrançois Tigeot .wait_for_vblank = &r100_wait_for_vblank, 293926deccbSFrançois Tigeot .set_backlight_level = &radeon_legacy_set_backlight_level, 294926deccbSFrançois Tigeot .get_backlight_level = &radeon_legacy_get_backlight_level, 295926deccbSFrançois Tigeot }, 296926deccbSFrançois Tigeot .copy = { 297926deccbSFrançois Tigeot .blit = &r100_copy_blit, 298926deccbSFrançois Tigeot .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX, 299926deccbSFrançois Tigeot .dma = &r200_copy_dma, 300926deccbSFrançois Tigeot .dma_ring_index = RADEON_RING_TYPE_GFX_INDEX, 301926deccbSFrançois Tigeot .copy = &r100_copy_blit, 302926deccbSFrançois Tigeot .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX, 303926deccbSFrançois Tigeot }, 304926deccbSFrançois Tigeot .surface = { 305926deccbSFrançois Tigeot .set_reg = r100_set_surface_reg, 306926deccbSFrançois Tigeot .clear_reg = r100_clear_surface_reg, 307926deccbSFrançois Tigeot }, 308926deccbSFrançois Tigeot .hpd = { 309926deccbSFrançois Tigeot .init = &r100_hpd_init, 310926deccbSFrançois Tigeot .fini = &r100_hpd_fini, 311926deccbSFrançois Tigeot .sense = &r100_hpd_sense, 312926deccbSFrançois Tigeot .set_polarity = &r100_hpd_set_polarity, 313926deccbSFrançois Tigeot }, 314926deccbSFrançois Tigeot .pm = { 315926deccbSFrançois Tigeot .misc = &r100_pm_misc, 316926deccbSFrançois Tigeot .prepare = &r100_pm_prepare, 317926deccbSFrançois Tigeot .finish = &r100_pm_finish, 318926deccbSFrançois Tigeot .init_profile = &r100_pm_init_profile, 319926deccbSFrançois Tigeot .get_dynpm_state = &r100_pm_get_dynpm_state, 320926deccbSFrançois Tigeot .get_engine_clock = &radeon_legacy_get_engine_clock, 321926deccbSFrançois Tigeot .set_engine_clock = &radeon_legacy_set_engine_clock, 322926deccbSFrançois Tigeot .get_memory_clock = &radeon_legacy_get_memory_clock, 323926deccbSFrançois Tigeot .set_memory_clock = NULL, 324926deccbSFrançois Tigeot .get_pcie_lanes = NULL, 325926deccbSFrançois Tigeot .set_pcie_lanes = NULL, 326926deccbSFrançois Tigeot .set_clock_gating = &radeon_legacy_set_clock_gating, 327926deccbSFrançois Tigeot }, 328926deccbSFrançois Tigeot .pflip = { 329926deccbSFrançois Tigeot .page_flip = &r100_page_flip, 330c6f73aabSFrançois Tigeot .page_flip_pending = &r100_page_flip_pending, 331926deccbSFrançois Tigeot }, 332926deccbSFrançois Tigeot }; 333926deccbSFrançois Tigeot 334ee479021SImre Vadász static struct radeon_asic_ring r300_gfx_ring = { 3354cd92098Szrj .ib_execute = &r100_ring_ib_execute, 3364cd92098Szrj .emit_fence = &r300_fence_ring_emit, 3374cd92098Szrj .emit_semaphore = &r100_semaphore_ring_emit, 3384cd92098Szrj .cs_parse = &r300_cs_parse, 3394cd92098Szrj .ring_start = &r300_ring_start, 3404cd92098Szrj .ring_test = &r100_ring_test, 3414cd92098Szrj .ib_test = &r100_ib_test, 3424cd92098Szrj .is_lockup = &r100_gpu_is_lockup, 343c6f73aabSFrançois Tigeot .get_rptr = &r100_gfx_get_rptr, 344c6f73aabSFrançois Tigeot .get_wptr = &r100_gfx_get_wptr, 345c6f73aabSFrançois Tigeot .set_wptr = &r100_gfx_set_wptr, 3464cd92098Szrj }; 3474cd92098Szrj 348ee479021SImre Vadász static struct radeon_asic_ring rv515_gfx_ring = { 34951f246adSzrj .ib_execute = &r100_ring_ib_execute, 35051f246adSzrj .emit_fence = &r300_fence_ring_emit, 35151f246adSzrj .emit_semaphore = &r100_semaphore_ring_emit, 35251f246adSzrj .cs_parse = &r300_cs_parse, 35351f246adSzrj .ring_start = &rv515_ring_start, 35451f246adSzrj .ring_test = &r100_ring_test, 35551f246adSzrj .ib_test = &r100_ib_test, 35651f246adSzrj .is_lockup = &r100_gpu_is_lockup, 35751f246adSzrj .get_rptr = &r100_gfx_get_rptr, 35851f246adSzrj .get_wptr = &r100_gfx_get_wptr, 35951f246adSzrj .set_wptr = &r100_gfx_set_wptr, 36051f246adSzrj }; 36151f246adSzrj 362926deccbSFrançois Tigeot static struct radeon_asic r300_asic = { 363926deccbSFrançois Tigeot .init = &r300_init, 364926deccbSFrançois Tigeot .fini = &r300_fini, 365926deccbSFrançois Tigeot .suspend = &r300_suspend, 366926deccbSFrançois Tigeot .resume = &r300_resume, 367926deccbSFrançois Tigeot .vga_set_state = &r100_vga_set_state, 368926deccbSFrançois Tigeot .asic_reset = &r300_asic_reset, 369c6f73aabSFrançois Tigeot .mmio_hdp_flush = NULL, 370926deccbSFrançois Tigeot .gui_idle = &r100_gui_idle, 371926deccbSFrançois Tigeot .mc_wait_for_idle = &r300_mc_wait_for_idle, 372*c59a5c48SFrançois Tigeot .get_allowed_info_register = radeon_invalid_get_allowed_info_register, 373926deccbSFrançois Tigeot .gart = { 374926deccbSFrançois Tigeot .tlb_flush = &r100_pci_gart_tlb_flush, 3757dcf36dcSFrançois Tigeot .get_page_entry = &r100_pci_gart_get_page_entry, 376926deccbSFrançois Tigeot .set_page = &r100_pci_gart_set_page, 377926deccbSFrançois Tigeot }, 378926deccbSFrançois Tigeot .ring = { 3794cd92098Szrj [RADEON_RING_TYPE_GFX_INDEX] = &r300_gfx_ring 380926deccbSFrançois Tigeot }, 381926deccbSFrançois Tigeot .irq = { 382926deccbSFrançois Tigeot .set = &r100_irq_set, 383926deccbSFrançois Tigeot .process = &r100_irq_process, 384926deccbSFrançois Tigeot }, 385926deccbSFrançois Tigeot .display = { 386926deccbSFrançois Tigeot .bandwidth_update = &r100_bandwidth_update, 387926deccbSFrançois Tigeot .get_vblank_counter = &r100_get_vblank_counter, 388926deccbSFrançois Tigeot .wait_for_vblank = &r100_wait_for_vblank, 389926deccbSFrançois Tigeot .set_backlight_level = &radeon_legacy_set_backlight_level, 390926deccbSFrançois Tigeot .get_backlight_level = &radeon_legacy_get_backlight_level, 391926deccbSFrançois Tigeot }, 392926deccbSFrançois Tigeot .copy = { 393926deccbSFrançois Tigeot .blit = &r100_copy_blit, 394926deccbSFrançois Tigeot .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX, 395926deccbSFrançois Tigeot .dma = &r200_copy_dma, 396926deccbSFrançois Tigeot .dma_ring_index = RADEON_RING_TYPE_GFX_INDEX, 397926deccbSFrançois Tigeot .copy = &r100_copy_blit, 398926deccbSFrançois Tigeot .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX, 399926deccbSFrançois Tigeot }, 400926deccbSFrançois Tigeot .surface = { 401926deccbSFrançois Tigeot .set_reg = r100_set_surface_reg, 402926deccbSFrançois Tigeot .clear_reg = r100_clear_surface_reg, 403926deccbSFrançois Tigeot }, 404926deccbSFrançois Tigeot .hpd = { 405926deccbSFrançois Tigeot .init = &r100_hpd_init, 406926deccbSFrançois Tigeot .fini = &r100_hpd_fini, 407926deccbSFrançois Tigeot .sense = &r100_hpd_sense, 408926deccbSFrançois Tigeot .set_polarity = &r100_hpd_set_polarity, 409926deccbSFrançois Tigeot }, 410926deccbSFrançois Tigeot .pm = { 411926deccbSFrançois Tigeot .misc = &r100_pm_misc, 412926deccbSFrançois Tigeot .prepare = &r100_pm_prepare, 413926deccbSFrançois Tigeot .finish = &r100_pm_finish, 414926deccbSFrançois Tigeot .init_profile = &r100_pm_init_profile, 415926deccbSFrançois Tigeot .get_dynpm_state = &r100_pm_get_dynpm_state, 416926deccbSFrançois Tigeot .get_engine_clock = &radeon_legacy_get_engine_clock, 417926deccbSFrançois Tigeot .set_engine_clock = &radeon_legacy_set_engine_clock, 418926deccbSFrançois Tigeot .get_memory_clock = &radeon_legacy_get_memory_clock, 419926deccbSFrançois Tigeot .set_memory_clock = NULL, 420926deccbSFrançois Tigeot .get_pcie_lanes = &rv370_get_pcie_lanes, 421926deccbSFrançois Tigeot .set_pcie_lanes = &rv370_set_pcie_lanes, 422926deccbSFrançois Tigeot .set_clock_gating = &radeon_legacy_set_clock_gating, 423926deccbSFrançois Tigeot }, 424926deccbSFrançois Tigeot .pflip = { 425926deccbSFrançois Tigeot .page_flip = &r100_page_flip, 426c6f73aabSFrançois Tigeot .page_flip_pending = &r100_page_flip_pending, 427926deccbSFrançois Tigeot }, 428926deccbSFrançois Tigeot }; 429926deccbSFrançois Tigeot 430926deccbSFrançois Tigeot static struct radeon_asic r300_asic_pcie = { 431926deccbSFrançois Tigeot .init = &r300_init, 432926deccbSFrançois Tigeot .fini = &r300_fini, 433926deccbSFrançois Tigeot .suspend = &r300_suspend, 434926deccbSFrançois Tigeot .resume = &r300_resume, 435926deccbSFrançois Tigeot .vga_set_state = &r100_vga_set_state, 436926deccbSFrançois Tigeot .asic_reset = &r300_asic_reset, 437c6f73aabSFrançois Tigeot .mmio_hdp_flush = NULL, 438926deccbSFrançois Tigeot .gui_idle = &r100_gui_idle, 439926deccbSFrançois Tigeot .mc_wait_for_idle = &r300_mc_wait_for_idle, 440*c59a5c48SFrançois Tigeot .get_allowed_info_register = radeon_invalid_get_allowed_info_register, 441926deccbSFrançois Tigeot .gart = { 442926deccbSFrançois Tigeot .tlb_flush = &rv370_pcie_gart_tlb_flush, 4437dcf36dcSFrançois Tigeot .get_page_entry = &rv370_pcie_gart_get_page_entry, 444926deccbSFrançois Tigeot .set_page = &rv370_pcie_gart_set_page, 445926deccbSFrançois Tigeot }, 446926deccbSFrançois Tigeot .ring = { 4474cd92098Szrj [RADEON_RING_TYPE_GFX_INDEX] = &r300_gfx_ring 448926deccbSFrançois Tigeot }, 449926deccbSFrançois Tigeot .irq = { 450926deccbSFrançois Tigeot .set = &r100_irq_set, 451926deccbSFrançois Tigeot .process = &r100_irq_process, 452926deccbSFrançois Tigeot }, 453926deccbSFrançois Tigeot .display = { 454926deccbSFrançois Tigeot .bandwidth_update = &r100_bandwidth_update, 455926deccbSFrançois Tigeot .get_vblank_counter = &r100_get_vblank_counter, 456926deccbSFrançois Tigeot .wait_for_vblank = &r100_wait_for_vblank, 457926deccbSFrançois Tigeot .set_backlight_level = &radeon_legacy_set_backlight_level, 458926deccbSFrançois Tigeot .get_backlight_level = &radeon_legacy_get_backlight_level, 459926deccbSFrançois Tigeot }, 460926deccbSFrançois Tigeot .copy = { 461926deccbSFrançois Tigeot .blit = &r100_copy_blit, 462926deccbSFrançois Tigeot .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX, 463926deccbSFrançois Tigeot .dma = &r200_copy_dma, 464926deccbSFrançois Tigeot .dma_ring_index = RADEON_RING_TYPE_GFX_INDEX, 465926deccbSFrançois Tigeot .copy = &r100_copy_blit, 466926deccbSFrançois Tigeot .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX, 467926deccbSFrançois Tigeot }, 468926deccbSFrançois Tigeot .surface = { 469926deccbSFrançois Tigeot .set_reg = r100_set_surface_reg, 470926deccbSFrançois Tigeot .clear_reg = r100_clear_surface_reg, 471926deccbSFrançois Tigeot }, 472926deccbSFrançois Tigeot .hpd = { 473926deccbSFrançois Tigeot .init = &r100_hpd_init, 474926deccbSFrançois Tigeot .fini = &r100_hpd_fini, 475926deccbSFrançois Tigeot .sense = &r100_hpd_sense, 476926deccbSFrançois Tigeot .set_polarity = &r100_hpd_set_polarity, 477926deccbSFrançois Tigeot }, 478926deccbSFrançois Tigeot .pm = { 479926deccbSFrançois Tigeot .misc = &r100_pm_misc, 480926deccbSFrançois Tigeot .prepare = &r100_pm_prepare, 481926deccbSFrançois Tigeot .finish = &r100_pm_finish, 482926deccbSFrançois Tigeot .init_profile = &r100_pm_init_profile, 483926deccbSFrançois Tigeot .get_dynpm_state = &r100_pm_get_dynpm_state, 484926deccbSFrançois Tigeot .get_engine_clock = &radeon_legacy_get_engine_clock, 485926deccbSFrançois Tigeot .set_engine_clock = &radeon_legacy_set_engine_clock, 486926deccbSFrançois Tigeot .get_memory_clock = &radeon_legacy_get_memory_clock, 487926deccbSFrançois Tigeot .set_memory_clock = NULL, 488926deccbSFrançois Tigeot .get_pcie_lanes = &rv370_get_pcie_lanes, 489926deccbSFrançois Tigeot .set_pcie_lanes = &rv370_set_pcie_lanes, 490926deccbSFrançois Tigeot .set_clock_gating = &radeon_legacy_set_clock_gating, 491926deccbSFrançois Tigeot }, 492926deccbSFrançois Tigeot .pflip = { 493926deccbSFrançois Tigeot .page_flip = &r100_page_flip, 494c6f73aabSFrançois Tigeot .page_flip_pending = &r100_page_flip_pending, 495926deccbSFrançois Tigeot }, 496926deccbSFrançois Tigeot }; 497926deccbSFrançois Tigeot 498926deccbSFrançois Tigeot static struct radeon_asic r420_asic = { 499926deccbSFrançois Tigeot .init = &r420_init, 500926deccbSFrançois Tigeot .fini = &r420_fini, 501926deccbSFrançois Tigeot .suspend = &r420_suspend, 502926deccbSFrançois Tigeot .resume = &r420_resume, 503926deccbSFrançois Tigeot .vga_set_state = &r100_vga_set_state, 504926deccbSFrançois Tigeot .asic_reset = &r300_asic_reset, 505c6f73aabSFrançois Tigeot .mmio_hdp_flush = NULL, 506926deccbSFrançois Tigeot .gui_idle = &r100_gui_idle, 507926deccbSFrançois Tigeot .mc_wait_for_idle = &r300_mc_wait_for_idle, 508*c59a5c48SFrançois Tigeot .get_allowed_info_register = radeon_invalid_get_allowed_info_register, 509926deccbSFrançois Tigeot .gart = { 510926deccbSFrançois Tigeot .tlb_flush = &rv370_pcie_gart_tlb_flush, 5117dcf36dcSFrançois Tigeot .get_page_entry = &rv370_pcie_gart_get_page_entry, 512926deccbSFrançois Tigeot .set_page = &rv370_pcie_gart_set_page, 513926deccbSFrançois Tigeot }, 514926deccbSFrançois Tigeot .ring = { 5154cd92098Szrj [RADEON_RING_TYPE_GFX_INDEX] = &r300_gfx_ring 516926deccbSFrançois Tigeot }, 517926deccbSFrançois Tigeot .irq = { 518926deccbSFrançois Tigeot .set = &r100_irq_set, 519926deccbSFrançois Tigeot .process = &r100_irq_process, 520926deccbSFrançois Tigeot }, 521926deccbSFrançois Tigeot .display = { 522926deccbSFrançois Tigeot .bandwidth_update = &r100_bandwidth_update, 523926deccbSFrançois Tigeot .get_vblank_counter = &r100_get_vblank_counter, 524926deccbSFrançois Tigeot .wait_for_vblank = &r100_wait_for_vblank, 525926deccbSFrançois Tigeot .set_backlight_level = &atombios_set_backlight_level, 526926deccbSFrançois Tigeot .get_backlight_level = &atombios_get_backlight_level, 527926deccbSFrançois Tigeot }, 528926deccbSFrançois Tigeot .copy = { 529926deccbSFrançois Tigeot .blit = &r100_copy_blit, 530926deccbSFrançois Tigeot .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX, 531926deccbSFrançois Tigeot .dma = &r200_copy_dma, 532926deccbSFrançois Tigeot .dma_ring_index = RADEON_RING_TYPE_GFX_INDEX, 533926deccbSFrançois Tigeot .copy = &r100_copy_blit, 534926deccbSFrançois Tigeot .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX, 535926deccbSFrançois Tigeot }, 536926deccbSFrançois Tigeot .surface = { 537926deccbSFrançois Tigeot .set_reg = r100_set_surface_reg, 538926deccbSFrançois Tigeot .clear_reg = r100_clear_surface_reg, 539926deccbSFrançois Tigeot }, 540926deccbSFrançois Tigeot .hpd = { 541926deccbSFrançois Tigeot .init = &r100_hpd_init, 542926deccbSFrançois Tigeot .fini = &r100_hpd_fini, 543926deccbSFrançois Tigeot .sense = &r100_hpd_sense, 544926deccbSFrançois Tigeot .set_polarity = &r100_hpd_set_polarity, 545926deccbSFrançois Tigeot }, 546926deccbSFrançois Tigeot .pm = { 547926deccbSFrançois Tigeot .misc = &r100_pm_misc, 548926deccbSFrançois Tigeot .prepare = &r100_pm_prepare, 549926deccbSFrançois Tigeot .finish = &r100_pm_finish, 550926deccbSFrançois Tigeot .init_profile = &r420_pm_init_profile, 551926deccbSFrançois Tigeot .get_dynpm_state = &r100_pm_get_dynpm_state, 552926deccbSFrançois Tigeot .get_engine_clock = &radeon_atom_get_engine_clock, 553926deccbSFrançois Tigeot .set_engine_clock = &radeon_atom_set_engine_clock, 554926deccbSFrançois Tigeot .get_memory_clock = &radeon_atom_get_memory_clock, 555926deccbSFrançois Tigeot .set_memory_clock = &radeon_atom_set_memory_clock, 556926deccbSFrançois Tigeot .get_pcie_lanes = &rv370_get_pcie_lanes, 557926deccbSFrançois Tigeot .set_pcie_lanes = &rv370_set_pcie_lanes, 558926deccbSFrançois Tigeot .set_clock_gating = &radeon_atom_set_clock_gating, 559926deccbSFrançois Tigeot }, 560926deccbSFrançois Tigeot .pflip = { 561926deccbSFrançois Tigeot .page_flip = &r100_page_flip, 562c6f73aabSFrançois Tigeot .page_flip_pending = &r100_page_flip_pending, 563926deccbSFrançois Tigeot }, 564926deccbSFrançois Tigeot }; 565926deccbSFrançois Tigeot 566926deccbSFrançois Tigeot static struct radeon_asic rs400_asic = { 567926deccbSFrançois Tigeot .init = &rs400_init, 568926deccbSFrançois Tigeot .fini = &rs400_fini, 569926deccbSFrançois Tigeot .suspend = &rs400_suspend, 570926deccbSFrançois Tigeot .resume = &rs400_resume, 571926deccbSFrançois Tigeot .vga_set_state = &r100_vga_set_state, 572926deccbSFrançois Tigeot .asic_reset = &r300_asic_reset, 573c6f73aabSFrançois Tigeot .mmio_hdp_flush = NULL, 574926deccbSFrançois Tigeot .gui_idle = &r100_gui_idle, 575926deccbSFrançois Tigeot .mc_wait_for_idle = &rs400_mc_wait_for_idle, 576*c59a5c48SFrançois Tigeot .get_allowed_info_register = radeon_invalid_get_allowed_info_register, 577926deccbSFrançois Tigeot .gart = { 578926deccbSFrançois Tigeot .tlb_flush = &rs400_gart_tlb_flush, 5797dcf36dcSFrançois Tigeot .get_page_entry = &rs400_gart_get_page_entry, 580926deccbSFrançois Tigeot .set_page = &rs400_gart_set_page, 581926deccbSFrançois Tigeot }, 582926deccbSFrançois Tigeot .ring = { 5834cd92098Szrj [RADEON_RING_TYPE_GFX_INDEX] = &r300_gfx_ring 584926deccbSFrançois Tigeot }, 585926deccbSFrançois Tigeot .irq = { 586926deccbSFrançois Tigeot .set = &r100_irq_set, 587926deccbSFrançois Tigeot .process = &r100_irq_process, 588926deccbSFrançois Tigeot }, 589926deccbSFrançois Tigeot .display = { 590926deccbSFrançois Tigeot .bandwidth_update = &r100_bandwidth_update, 591926deccbSFrançois Tigeot .get_vblank_counter = &r100_get_vblank_counter, 592926deccbSFrançois Tigeot .wait_for_vblank = &r100_wait_for_vblank, 593926deccbSFrançois Tigeot .set_backlight_level = &radeon_legacy_set_backlight_level, 594926deccbSFrançois Tigeot .get_backlight_level = &radeon_legacy_get_backlight_level, 595926deccbSFrançois Tigeot }, 596926deccbSFrançois Tigeot .copy = { 597926deccbSFrançois Tigeot .blit = &r100_copy_blit, 598926deccbSFrançois Tigeot .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX, 599926deccbSFrançois Tigeot .dma = &r200_copy_dma, 600926deccbSFrançois Tigeot .dma_ring_index = RADEON_RING_TYPE_GFX_INDEX, 601926deccbSFrançois Tigeot .copy = &r100_copy_blit, 602926deccbSFrançois Tigeot .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX, 603926deccbSFrançois Tigeot }, 604926deccbSFrançois Tigeot .surface = { 605926deccbSFrançois Tigeot .set_reg = r100_set_surface_reg, 606926deccbSFrançois Tigeot .clear_reg = r100_clear_surface_reg, 607926deccbSFrançois Tigeot }, 608926deccbSFrançois Tigeot .hpd = { 609926deccbSFrançois Tigeot .init = &r100_hpd_init, 610926deccbSFrançois Tigeot .fini = &r100_hpd_fini, 611926deccbSFrançois Tigeot .sense = &r100_hpd_sense, 612926deccbSFrançois Tigeot .set_polarity = &r100_hpd_set_polarity, 613926deccbSFrançois Tigeot }, 614926deccbSFrançois Tigeot .pm = { 615926deccbSFrançois Tigeot .misc = &r100_pm_misc, 616926deccbSFrançois Tigeot .prepare = &r100_pm_prepare, 617926deccbSFrançois Tigeot .finish = &r100_pm_finish, 618926deccbSFrançois Tigeot .init_profile = &r100_pm_init_profile, 619926deccbSFrançois Tigeot .get_dynpm_state = &r100_pm_get_dynpm_state, 620926deccbSFrançois Tigeot .get_engine_clock = &radeon_legacy_get_engine_clock, 621926deccbSFrançois Tigeot .set_engine_clock = &radeon_legacy_set_engine_clock, 622926deccbSFrançois Tigeot .get_memory_clock = &radeon_legacy_get_memory_clock, 623926deccbSFrançois Tigeot .set_memory_clock = NULL, 624926deccbSFrançois Tigeot .get_pcie_lanes = NULL, 625926deccbSFrançois Tigeot .set_pcie_lanes = NULL, 626926deccbSFrançois Tigeot .set_clock_gating = &radeon_legacy_set_clock_gating, 627926deccbSFrançois Tigeot }, 628926deccbSFrançois Tigeot .pflip = { 629926deccbSFrançois Tigeot .page_flip = &r100_page_flip, 630c6f73aabSFrançois Tigeot .page_flip_pending = &r100_page_flip_pending, 631926deccbSFrançois Tigeot }, 632926deccbSFrançois Tigeot }; 633926deccbSFrançois Tigeot 634926deccbSFrançois Tigeot static struct radeon_asic rs600_asic = { 635926deccbSFrançois Tigeot .init = &rs600_init, 636926deccbSFrançois Tigeot .fini = &rs600_fini, 637926deccbSFrançois Tigeot .suspend = &rs600_suspend, 638926deccbSFrançois Tigeot .resume = &rs600_resume, 639926deccbSFrançois Tigeot .vga_set_state = &r100_vga_set_state, 640926deccbSFrançois Tigeot .asic_reset = &rs600_asic_reset, 641c6f73aabSFrançois Tigeot .mmio_hdp_flush = NULL, 642926deccbSFrançois Tigeot .gui_idle = &r100_gui_idle, 643926deccbSFrançois Tigeot .mc_wait_for_idle = &rs600_mc_wait_for_idle, 644*c59a5c48SFrançois Tigeot .get_allowed_info_register = radeon_invalid_get_allowed_info_register, 645926deccbSFrançois Tigeot .gart = { 646926deccbSFrançois Tigeot .tlb_flush = &rs600_gart_tlb_flush, 6477dcf36dcSFrançois Tigeot .get_page_entry = &rs600_gart_get_page_entry, 648926deccbSFrançois Tigeot .set_page = &rs600_gart_set_page, 649926deccbSFrançois Tigeot }, 650926deccbSFrançois Tigeot .ring = { 6514cd92098Szrj [RADEON_RING_TYPE_GFX_INDEX] = &r300_gfx_ring 652926deccbSFrançois Tigeot }, 653926deccbSFrançois Tigeot .irq = { 654926deccbSFrançois Tigeot .set = &rs600_irq_set, 655926deccbSFrançois Tigeot .process = &rs600_irq_process, 656926deccbSFrançois Tigeot }, 657926deccbSFrançois Tigeot .display = { 658926deccbSFrançois Tigeot .bandwidth_update = &rs600_bandwidth_update, 659926deccbSFrançois Tigeot .get_vblank_counter = &rs600_get_vblank_counter, 660926deccbSFrançois Tigeot .wait_for_vblank = &avivo_wait_for_vblank, 661926deccbSFrançois Tigeot .set_backlight_level = &atombios_set_backlight_level, 662926deccbSFrançois Tigeot .get_backlight_level = &atombios_get_backlight_level, 663926deccbSFrançois Tigeot }, 664926deccbSFrançois Tigeot .copy = { 665926deccbSFrançois Tigeot .blit = &r100_copy_blit, 666926deccbSFrançois Tigeot .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX, 667926deccbSFrançois Tigeot .dma = &r200_copy_dma, 668926deccbSFrançois Tigeot .dma_ring_index = RADEON_RING_TYPE_GFX_INDEX, 669926deccbSFrançois Tigeot .copy = &r100_copy_blit, 670926deccbSFrançois Tigeot .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX, 671926deccbSFrançois Tigeot }, 672926deccbSFrançois Tigeot .surface = { 673926deccbSFrançois Tigeot .set_reg = r100_set_surface_reg, 674926deccbSFrançois Tigeot .clear_reg = r100_clear_surface_reg, 675926deccbSFrançois Tigeot }, 676926deccbSFrançois Tigeot .hpd = { 677926deccbSFrançois Tigeot .init = &rs600_hpd_init, 678926deccbSFrançois Tigeot .fini = &rs600_hpd_fini, 679926deccbSFrançois Tigeot .sense = &rs600_hpd_sense, 680926deccbSFrançois Tigeot .set_polarity = &rs600_hpd_set_polarity, 681926deccbSFrançois Tigeot }, 682926deccbSFrançois Tigeot .pm = { 683926deccbSFrançois Tigeot .misc = &rs600_pm_misc, 684926deccbSFrançois Tigeot .prepare = &rs600_pm_prepare, 685926deccbSFrançois Tigeot .finish = &rs600_pm_finish, 686926deccbSFrançois Tigeot .init_profile = &r420_pm_init_profile, 687926deccbSFrançois Tigeot .get_dynpm_state = &r100_pm_get_dynpm_state, 688926deccbSFrançois Tigeot .get_engine_clock = &radeon_atom_get_engine_clock, 689926deccbSFrançois Tigeot .set_engine_clock = &radeon_atom_set_engine_clock, 690926deccbSFrançois Tigeot .get_memory_clock = &radeon_atom_get_memory_clock, 691926deccbSFrançois Tigeot .set_memory_clock = &radeon_atom_set_memory_clock, 692926deccbSFrançois Tigeot .get_pcie_lanes = NULL, 693926deccbSFrançois Tigeot .set_pcie_lanes = NULL, 694926deccbSFrançois Tigeot .set_clock_gating = &radeon_atom_set_clock_gating, 695926deccbSFrançois Tigeot }, 696926deccbSFrançois Tigeot .pflip = { 697926deccbSFrançois Tigeot .page_flip = &rs600_page_flip, 698c6f73aabSFrançois Tigeot .page_flip_pending = &rs600_page_flip_pending, 699926deccbSFrançois Tigeot }, 700926deccbSFrançois Tigeot }; 701926deccbSFrançois Tigeot 702926deccbSFrançois Tigeot static struct radeon_asic rs690_asic = { 703926deccbSFrançois Tigeot .init = &rs690_init, 704926deccbSFrançois Tigeot .fini = &rs690_fini, 705926deccbSFrançois Tigeot .suspend = &rs690_suspend, 706926deccbSFrançois Tigeot .resume = &rs690_resume, 707926deccbSFrançois Tigeot .vga_set_state = &r100_vga_set_state, 708926deccbSFrançois Tigeot .asic_reset = &rs600_asic_reset, 709c6f73aabSFrançois Tigeot .mmio_hdp_flush = NULL, 710926deccbSFrançois Tigeot .gui_idle = &r100_gui_idle, 711926deccbSFrançois Tigeot .mc_wait_for_idle = &rs690_mc_wait_for_idle, 712*c59a5c48SFrançois Tigeot .get_allowed_info_register = radeon_invalid_get_allowed_info_register, 713926deccbSFrançois Tigeot .gart = { 714926deccbSFrançois Tigeot .tlb_flush = &rs400_gart_tlb_flush, 7157dcf36dcSFrançois Tigeot .get_page_entry = &rs400_gart_get_page_entry, 716926deccbSFrançois Tigeot .set_page = &rs400_gart_set_page, 717926deccbSFrançois Tigeot }, 718926deccbSFrançois Tigeot .ring = { 7194cd92098Szrj [RADEON_RING_TYPE_GFX_INDEX] = &r300_gfx_ring 720926deccbSFrançois Tigeot }, 721926deccbSFrançois Tigeot .irq = { 722926deccbSFrançois Tigeot .set = &rs600_irq_set, 723926deccbSFrançois Tigeot .process = &rs600_irq_process, 724926deccbSFrançois Tigeot }, 725926deccbSFrançois Tigeot .display = { 726926deccbSFrançois Tigeot .get_vblank_counter = &rs600_get_vblank_counter, 727926deccbSFrançois Tigeot .bandwidth_update = &rs690_bandwidth_update, 728926deccbSFrançois Tigeot .wait_for_vblank = &avivo_wait_for_vblank, 729926deccbSFrançois Tigeot .set_backlight_level = &atombios_set_backlight_level, 730926deccbSFrançois Tigeot .get_backlight_level = &atombios_get_backlight_level, 731926deccbSFrançois Tigeot }, 732926deccbSFrançois Tigeot .copy = { 733926deccbSFrançois Tigeot .blit = &r100_copy_blit, 734926deccbSFrançois Tigeot .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX, 735926deccbSFrançois Tigeot .dma = &r200_copy_dma, 736926deccbSFrançois Tigeot .dma_ring_index = RADEON_RING_TYPE_GFX_INDEX, 737926deccbSFrançois Tigeot .copy = &r200_copy_dma, 738926deccbSFrançois Tigeot .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX, 739926deccbSFrançois Tigeot }, 740926deccbSFrançois Tigeot .surface = { 741926deccbSFrançois Tigeot .set_reg = r100_set_surface_reg, 742926deccbSFrançois Tigeot .clear_reg = r100_clear_surface_reg, 743926deccbSFrançois Tigeot }, 744926deccbSFrançois Tigeot .hpd = { 745926deccbSFrançois Tigeot .init = &rs600_hpd_init, 746926deccbSFrançois Tigeot .fini = &rs600_hpd_fini, 747926deccbSFrançois Tigeot .sense = &rs600_hpd_sense, 748926deccbSFrançois Tigeot .set_polarity = &rs600_hpd_set_polarity, 749926deccbSFrançois Tigeot }, 750926deccbSFrançois Tigeot .pm = { 751926deccbSFrançois Tigeot .misc = &rs600_pm_misc, 752926deccbSFrançois Tigeot .prepare = &rs600_pm_prepare, 753926deccbSFrançois Tigeot .finish = &rs600_pm_finish, 754926deccbSFrançois Tigeot .init_profile = &r420_pm_init_profile, 755926deccbSFrançois Tigeot .get_dynpm_state = &r100_pm_get_dynpm_state, 756926deccbSFrançois Tigeot .get_engine_clock = &radeon_atom_get_engine_clock, 757926deccbSFrançois Tigeot .set_engine_clock = &radeon_atom_set_engine_clock, 758926deccbSFrançois Tigeot .get_memory_clock = &radeon_atom_get_memory_clock, 759926deccbSFrançois Tigeot .set_memory_clock = &radeon_atom_set_memory_clock, 760926deccbSFrançois Tigeot .get_pcie_lanes = NULL, 761926deccbSFrançois Tigeot .set_pcie_lanes = NULL, 762926deccbSFrançois Tigeot .set_clock_gating = &radeon_atom_set_clock_gating, 763926deccbSFrançois Tigeot }, 764926deccbSFrançois Tigeot .pflip = { 765926deccbSFrançois Tigeot .page_flip = &rs600_page_flip, 766c6f73aabSFrançois Tigeot .page_flip_pending = &rs600_page_flip_pending, 767926deccbSFrançois Tigeot }, 768926deccbSFrançois Tigeot }; 769926deccbSFrançois Tigeot 770926deccbSFrançois Tigeot static struct radeon_asic rv515_asic = { 771926deccbSFrançois Tigeot .init = &rv515_init, 772926deccbSFrançois Tigeot .fini = &rv515_fini, 773926deccbSFrançois Tigeot .suspend = &rv515_suspend, 774926deccbSFrançois Tigeot .resume = &rv515_resume, 775926deccbSFrançois Tigeot .vga_set_state = &r100_vga_set_state, 776926deccbSFrançois Tigeot .asic_reset = &rs600_asic_reset, 777c6f73aabSFrançois Tigeot .mmio_hdp_flush = NULL, 778926deccbSFrançois Tigeot .gui_idle = &r100_gui_idle, 779926deccbSFrançois Tigeot .mc_wait_for_idle = &rv515_mc_wait_for_idle, 780*c59a5c48SFrançois Tigeot .get_allowed_info_register = radeon_invalid_get_allowed_info_register, 781926deccbSFrançois Tigeot .gart = { 782926deccbSFrançois Tigeot .tlb_flush = &rv370_pcie_gart_tlb_flush, 7837dcf36dcSFrançois Tigeot .get_page_entry = &rv370_pcie_gart_get_page_entry, 784926deccbSFrançois Tigeot .set_page = &rv370_pcie_gart_set_page, 785926deccbSFrançois Tigeot }, 786926deccbSFrançois Tigeot .ring = { 78751f246adSzrj [RADEON_RING_TYPE_GFX_INDEX] = &rv515_gfx_ring 788926deccbSFrançois Tigeot }, 789926deccbSFrançois Tigeot .irq = { 790926deccbSFrançois Tigeot .set = &rs600_irq_set, 791926deccbSFrançois Tigeot .process = &rs600_irq_process, 792926deccbSFrançois Tigeot }, 793926deccbSFrançois Tigeot .display = { 794926deccbSFrançois Tigeot .get_vblank_counter = &rs600_get_vblank_counter, 795926deccbSFrançois Tigeot .bandwidth_update = &rv515_bandwidth_update, 796926deccbSFrançois Tigeot .wait_for_vblank = &avivo_wait_for_vblank, 797926deccbSFrançois Tigeot .set_backlight_level = &atombios_set_backlight_level, 798926deccbSFrançois Tigeot .get_backlight_level = &atombios_get_backlight_level, 799926deccbSFrançois Tigeot }, 800926deccbSFrançois Tigeot .copy = { 801926deccbSFrançois Tigeot .blit = &r100_copy_blit, 802926deccbSFrançois Tigeot .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX, 803926deccbSFrançois Tigeot .dma = &r200_copy_dma, 804926deccbSFrançois Tigeot .dma_ring_index = RADEON_RING_TYPE_GFX_INDEX, 805926deccbSFrançois Tigeot .copy = &r100_copy_blit, 806926deccbSFrançois Tigeot .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX, 807926deccbSFrançois Tigeot }, 808926deccbSFrançois Tigeot .surface = { 809926deccbSFrançois Tigeot .set_reg = r100_set_surface_reg, 810926deccbSFrançois Tigeot .clear_reg = r100_clear_surface_reg, 811926deccbSFrançois Tigeot }, 812926deccbSFrançois Tigeot .hpd = { 813926deccbSFrançois Tigeot .init = &rs600_hpd_init, 814926deccbSFrançois Tigeot .fini = &rs600_hpd_fini, 815926deccbSFrançois Tigeot .sense = &rs600_hpd_sense, 816926deccbSFrançois Tigeot .set_polarity = &rs600_hpd_set_polarity, 817926deccbSFrançois Tigeot }, 818926deccbSFrançois Tigeot .pm = { 819926deccbSFrançois Tigeot .misc = &rs600_pm_misc, 820926deccbSFrançois Tigeot .prepare = &rs600_pm_prepare, 821926deccbSFrançois Tigeot .finish = &rs600_pm_finish, 822926deccbSFrançois Tigeot .init_profile = &r420_pm_init_profile, 823926deccbSFrançois Tigeot .get_dynpm_state = &r100_pm_get_dynpm_state, 824926deccbSFrançois Tigeot .get_engine_clock = &radeon_atom_get_engine_clock, 825926deccbSFrançois Tigeot .set_engine_clock = &radeon_atom_set_engine_clock, 826926deccbSFrançois Tigeot .get_memory_clock = &radeon_atom_get_memory_clock, 827926deccbSFrançois Tigeot .set_memory_clock = &radeon_atom_set_memory_clock, 828926deccbSFrançois Tigeot .get_pcie_lanes = &rv370_get_pcie_lanes, 829926deccbSFrançois Tigeot .set_pcie_lanes = &rv370_set_pcie_lanes, 830926deccbSFrançois Tigeot .set_clock_gating = &radeon_atom_set_clock_gating, 831926deccbSFrançois Tigeot }, 832926deccbSFrançois Tigeot .pflip = { 833926deccbSFrançois Tigeot .page_flip = &rs600_page_flip, 834c6f73aabSFrançois Tigeot .page_flip_pending = &rs600_page_flip_pending, 835926deccbSFrançois Tigeot }, 836926deccbSFrançois Tigeot }; 837926deccbSFrançois Tigeot 838926deccbSFrançois Tigeot static struct radeon_asic r520_asic = { 839926deccbSFrançois Tigeot .init = &r520_init, 840926deccbSFrançois Tigeot .fini = &rv515_fini, 841926deccbSFrançois Tigeot .suspend = &rv515_suspend, 842926deccbSFrançois Tigeot .resume = &r520_resume, 843926deccbSFrançois Tigeot .vga_set_state = &r100_vga_set_state, 844926deccbSFrançois Tigeot .asic_reset = &rs600_asic_reset, 845c6f73aabSFrançois Tigeot .mmio_hdp_flush = NULL, 846926deccbSFrançois Tigeot .gui_idle = &r100_gui_idle, 847926deccbSFrançois Tigeot .mc_wait_for_idle = &r520_mc_wait_for_idle, 848*c59a5c48SFrançois Tigeot .get_allowed_info_register = radeon_invalid_get_allowed_info_register, 849926deccbSFrançois Tigeot .gart = { 850926deccbSFrançois Tigeot .tlb_flush = &rv370_pcie_gart_tlb_flush, 8517dcf36dcSFrançois Tigeot .get_page_entry = &rv370_pcie_gart_get_page_entry, 852926deccbSFrançois Tigeot .set_page = &rv370_pcie_gart_set_page, 853926deccbSFrançois Tigeot }, 854926deccbSFrançois Tigeot .ring = { 85551f246adSzrj [RADEON_RING_TYPE_GFX_INDEX] = &rv515_gfx_ring 856926deccbSFrançois Tigeot }, 857926deccbSFrançois Tigeot .irq = { 858926deccbSFrançois Tigeot .set = &rs600_irq_set, 859926deccbSFrançois Tigeot .process = &rs600_irq_process, 860926deccbSFrançois Tigeot }, 861926deccbSFrançois Tigeot .display = { 862926deccbSFrançois Tigeot .bandwidth_update = &rv515_bandwidth_update, 863926deccbSFrançois Tigeot .get_vblank_counter = &rs600_get_vblank_counter, 864926deccbSFrançois Tigeot .wait_for_vblank = &avivo_wait_for_vblank, 865926deccbSFrançois Tigeot .set_backlight_level = &atombios_set_backlight_level, 866926deccbSFrançois Tigeot .get_backlight_level = &atombios_get_backlight_level, 867926deccbSFrançois Tigeot }, 868926deccbSFrançois Tigeot .copy = { 869926deccbSFrançois Tigeot .blit = &r100_copy_blit, 870926deccbSFrançois Tigeot .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX, 871926deccbSFrançois Tigeot .dma = &r200_copy_dma, 872926deccbSFrançois Tigeot .dma_ring_index = RADEON_RING_TYPE_GFX_INDEX, 873926deccbSFrançois Tigeot .copy = &r100_copy_blit, 874926deccbSFrançois Tigeot .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX, 875926deccbSFrançois Tigeot }, 876926deccbSFrançois Tigeot .surface = { 877926deccbSFrançois Tigeot .set_reg = r100_set_surface_reg, 878926deccbSFrançois Tigeot .clear_reg = r100_clear_surface_reg, 879926deccbSFrançois Tigeot }, 880926deccbSFrançois Tigeot .hpd = { 881926deccbSFrançois Tigeot .init = &rs600_hpd_init, 882926deccbSFrançois Tigeot .fini = &rs600_hpd_fini, 883926deccbSFrançois Tigeot .sense = &rs600_hpd_sense, 884926deccbSFrançois Tigeot .set_polarity = &rs600_hpd_set_polarity, 885926deccbSFrançois Tigeot }, 886926deccbSFrançois Tigeot .pm = { 887926deccbSFrançois Tigeot .misc = &rs600_pm_misc, 888926deccbSFrançois Tigeot .prepare = &rs600_pm_prepare, 889926deccbSFrançois Tigeot .finish = &rs600_pm_finish, 890926deccbSFrançois Tigeot .init_profile = &r420_pm_init_profile, 891926deccbSFrançois Tigeot .get_dynpm_state = &r100_pm_get_dynpm_state, 892926deccbSFrançois Tigeot .get_engine_clock = &radeon_atom_get_engine_clock, 893926deccbSFrançois Tigeot .set_engine_clock = &radeon_atom_set_engine_clock, 894926deccbSFrançois Tigeot .get_memory_clock = &radeon_atom_get_memory_clock, 895926deccbSFrançois Tigeot .set_memory_clock = &radeon_atom_set_memory_clock, 896926deccbSFrançois Tigeot .get_pcie_lanes = &rv370_get_pcie_lanes, 897926deccbSFrançois Tigeot .set_pcie_lanes = &rv370_set_pcie_lanes, 898926deccbSFrançois Tigeot .set_clock_gating = &radeon_atom_set_clock_gating, 899926deccbSFrançois Tigeot }, 900926deccbSFrançois Tigeot .pflip = { 901926deccbSFrançois Tigeot .page_flip = &rs600_page_flip, 902c6f73aabSFrançois Tigeot .page_flip_pending = &rs600_page_flip_pending, 903926deccbSFrançois Tigeot }, 904926deccbSFrançois Tigeot }; 905926deccbSFrançois Tigeot 906ee479021SImre Vadász static struct radeon_asic_ring r600_gfx_ring = { 9074cd92098Szrj .ib_execute = &r600_ring_ib_execute, 9084cd92098Szrj .emit_fence = &r600_fence_ring_emit, 9094cd92098Szrj .emit_semaphore = &r600_semaphore_ring_emit, 9104cd92098Szrj .cs_parse = &r600_cs_parse, 9114cd92098Szrj .ring_test = &r600_ring_test, 9124cd92098Szrj .ib_test = &r600_ib_test, 9134cd92098Szrj .is_lockup = &r600_gfx_is_lockup, 914c6f73aabSFrançois Tigeot .get_rptr = &r600_gfx_get_rptr, 915c6f73aabSFrançois Tigeot .get_wptr = &r600_gfx_get_wptr, 916c6f73aabSFrançois Tigeot .set_wptr = &r600_gfx_set_wptr, 9174cd92098Szrj }; 9184cd92098Szrj 919ee479021SImre Vadász static struct radeon_asic_ring r600_dma_ring = { 9204cd92098Szrj .ib_execute = &r600_dma_ring_ib_execute, 9214cd92098Szrj .emit_fence = &r600_dma_fence_ring_emit, 9224cd92098Szrj .emit_semaphore = &r600_dma_semaphore_ring_emit, 9234cd92098Szrj .cs_parse = &r600_dma_cs_parse, 9244cd92098Szrj .ring_test = &r600_dma_ring_test, 9254cd92098Szrj .ib_test = &r600_dma_ib_test, 9264cd92098Szrj .is_lockup = &r600_dma_is_lockup, 9274cd92098Szrj .get_rptr = &r600_dma_get_rptr, 9284cd92098Szrj .get_wptr = &r600_dma_get_wptr, 9294cd92098Szrj .set_wptr = &r600_dma_set_wptr, 9304cd92098Szrj }; 9314cd92098Szrj 932926deccbSFrançois Tigeot static struct radeon_asic r600_asic = { 933926deccbSFrançois Tigeot .init = &r600_init, 934926deccbSFrançois Tigeot .fini = &r600_fini, 935926deccbSFrançois Tigeot .suspend = &r600_suspend, 936926deccbSFrançois Tigeot .resume = &r600_resume, 937926deccbSFrançois Tigeot .vga_set_state = &r600_vga_set_state, 938926deccbSFrançois Tigeot .asic_reset = &r600_asic_reset, 939c6f73aabSFrançois Tigeot .mmio_hdp_flush = r600_mmio_hdp_flush, 940926deccbSFrançois Tigeot .gui_idle = &r600_gui_idle, 941926deccbSFrançois Tigeot .mc_wait_for_idle = &r600_mc_wait_for_idle, 942b403bed8SMichael Neumann .get_xclk = &r600_get_xclk, 943b403bed8SMichael Neumann .get_gpu_clock_counter = &r600_get_gpu_clock_counter, 944*c59a5c48SFrançois Tigeot .get_allowed_info_register = r600_get_allowed_info_register, 945926deccbSFrançois Tigeot .gart = { 946926deccbSFrançois Tigeot .tlb_flush = &r600_pcie_gart_tlb_flush, 9477dcf36dcSFrançois Tigeot .get_page_entry = &rs600_gart_get_page_entry, 948926deccbSFrançois Tigeot .set_page = &rs600_gart_set_page, 949926deccbSFrançois Tigeot }, 950926deccbSFrançois Tigeot .ring = { 9514cd92098Szrj [RADEON_RING_TYPE_GFX_INDEX] = &r600_gfx_ring, 9524cd92098Szrj [R600_RING_TYPE_DMA_INDEX] = &r600_dma_ring, 953926deccbSFrançois Tigeot }, 954926deccbSFrançois Tigeot .irq = { 955926deccbSFrançois Tigeot .set = &r600_irq_set, 956926deccbSFrançois Tigeot .process = &r600_irq_process, 957926deccbSFrançois Tigeot }, 958926deccbSFrançois Tigeot .display = { 959926deccbSFrançois Tigeot .bandwidth_update = &rv515_bandwidth_update, 960926deccbSFrançois Tigeot .get_vblank_counter = &rs600_get_vblank_counter, 961926deccbSFrançois Tigeot .wait_for_vblank = &avivo_wait_for_vblank, 962926deccbSFrançois Tigeot .set_backlight_level = &atombios_set_backlight_level, 963926deccbSFrançois Tigeot .get_backlight_level = &atombios_get_backlight_level, 964926deccbSFrançois Tigeot }, 965926deccbSFrançois Tigeot .copy = { 9664cd92098Szrj .blit = &r600_copy_cpdma, 967926deccbSFrançois Tigeot .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX, 968926deccbSFrançois Tigeot .dma = &r600_copy_dma, 969926deccbSFrançois Tigeot .dma_ring_index = R600_RING_TYPE_DMA_INDEX, 97057e252bfSMichael Neumann .copy = &r600_copy_cpdma, 97157e252bfSMichael Neumann .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX, 972926deccbSFrançois Tigeot }, 973926deccbSFrançois Tigeot .surface = { 974926deccbSFrançois Tigeot .set_reg = r600_set_surface_reg, 975926deccbSFrançois Tigeot .clear_reg = r600_clear_surface_reg, 976926deccbSFrançois Tigeot }, 977926deccbSFrançois Tigeot .hpd = { 978926deccbSFrançois Tigeot .init = &r600_hpd_init, 979926deccbSFrançois Tigeot .fini = &r600_hpd_fini, 980926deccbSFrançois Tigeot .sense = &r600_hpd_sense, 981926deccbSFrançois Tigeot .set_polarity = &r600_hpd_set_polarity, 982926deccbSFrançois Tigeot }, 983926deccbSFrançois Tigeot .pm = { 984926deccbSFrançois Tigeot .misc = &r600_pm_misc, 985926deccbSFrançois Tigeot .prepare = &rs600_pm_prepare, 986926deccbSFrançois Tigeot .finish = &rs600_pm_finish, 987926deccbSFrançois Tigeot .init_profile = &r600_pm_init_profile, 988926deccbSFrançois Tigeot .get_dynpm_state = &r600_pm_get_dynpm_state, 989926deccbSFrançois Tigeot .get_engine_clock = &radeon_atom_get_engine_clock, 990926deccbSFrançois Tigeot .set_engine_clock = &radeon_atom_set_engine_clock, 991926deccbSFrançois Tigeot .get_memory_clock = &radeon_atom_get_memory_clock, 992926deccbSFrançois Tigeot .set_memory_clock = &radeon_atom_set_memory_clock, 993926deccbSFrançois Tigeot .get_pcie_lanes = &r600_get_pcie_lanes, 994926deccbSFrançois Tigeot .set_pcie_lanes = &r600_set_pcie_lanes, 995926deccbSFrançois Tigeot .set_clock_gating = NULL, 99657e252bfSMichael Neumann .get_temperature = &rv6xx_get_temp, 99757e252bfSMichael Neumann }, 99857e252bfSMichael Neumann .pflip = { 99957e252bfSMichael Neumann .page_flip = &rs600_page_flip, 1000c6f73aabSFrançois Tigeot .page_flip_pending = &rs600_page_flip_pending, 100157e252bfSMichael Neumann }, 100257e252bfSMichael Neumann }; 100357e252bfSMichael Neumann 1004ee479021SImre Vadász static struct radeon_asic_ring rv6xx_uvd_ring = { 1005591d5043SFrançois Tigeot .ib_execute = &uvd_v1_0_ib_execute, 1006591d5043SFrançois Tigeot .emit_fence = &uvd_v1_0_fence_emit, 1007591d5043SFrançois Tigeot .emit_semaphore = &uvd_v1_0_semaphore_emit, 1008591d5043SFrançois Tigeot .cs_parse = &radeon_uvd_cs_parse, 1009591d5043SFrançois Tigeot .ring_test = &uvd_v1_0_ring_test, 1010591d5043SFrançois Tigeot .ib_test = &uvd_v1_0_ib_test, 1011591d5043SFrançois Tigeot .is_lockup = &radeon_ring_test_lockup, 1012591d5043SFrançois Tigeot .get_rptr = &uvd_v1_0_get_rptr, 1013591d5043SFrançois Tigeot .get_wptr = &uvd_v1_0_get_wptr, 1014591d5043SFrançois Tigeot .set_wptr = &uvd_v1_0_set_wptr, 1015591d5043SFrançois Tigeot }; 1016591d5043SFrançois Tigeot 101757e252bfSMichael Neumann static struct radeon_asic rv6xx_asic = { 101857e252bfSMichael Neumann .init = &r600_init, 101957e252bfSMichael Neumann .fini = &r600_fini, 102057e252bfSMichael Neumann .suspend = &r600_suspend, 102157e252bfSMichael Neumann .resume = &r600_resume, 102257e252bfSMichael Neumann .vga_set_state = &r600_vga_set_state, 102357e252bfSMichael Neumann .asic_reset = &r600_asic_reset, 1024c6f73aabSFrançois Tigeot .mmio_hdp_flush = r600_mmio_hdp_flush, 102557e252bfSMichael Neumann .gui_idle = &r600_gui_idle, 102657e252bfSMichael Neumann .mc_wait_for_idle = &r600_mc_wait_for_idle, 102757e252bfSMichael Neumann .get_xclk = &r600_get_xclk, 102857e252bfSMichael Neumann .get_gpu_clock_counter = &r600_get_gpu_clock_counter, 1029*c59a5c48SFrançois Tigeot .get_allowed_info_register = r600_get_allowed_info_register, 103057e252bfSMichael Neumann .gart = { 103157e252bfSMichael Neumann .tlb_flush = &r600_pcie_gart_tlb_flush, 10327dcf36dcSFrançois Tigeot .get_page_entry = &rs600_gart_get_page_entry, 103357e252bfSMichael Neumann .set_page = &rs600_gart_set_page, 103457e252bfSMichael Neumann }, 103557e252bfSMichael Neumann .ring = { 10364cd92098Szrj [RADEON_RING_TYPE_GFX_INDEX] = &r600_gfx_ring, 10374cd92098Szrj [R600_RING_TYPE_DMA_INDEX] = &r600_dma_ring, 1038591d5043SFrançois Tigeot [R600_RING_TYPE_UVD_INDEX] = &rv6xx_uvd_ring, 103957e252bfSMichael Neumann }, 104057e252bfSMichael Neumann .irq = { 104157e252bfSMichael Neumann .set = &r600_irq_set, 104257e252bfSMichael Neumann .process = &r600_irq_process, 104357e252bfSMichael Neumann }, 104457e252bfSMichael Neumann .display = { 104557e252bfSMichael Neumann .bandwidth_update = &rv515_bandwidth_update, 104657e252bfSMichael Neumann .get_vblank_counter = &rs600_get_vblank_counter, 104757e252bfSMichael Neumann .wait_for_vblank = &avivo_wait_for_vblank, 104857e252bfSMichael Neumann .set_backlight_level = &atombios_set_backlight_level, 104957e252bfSMichael Neumann .get_backlight_level = &atombios_get_backlight_level, 105057e252bfSMichael Neumann }, 105157e252bfSMichael Neumann .copy = { 10524cd92098Szrj .blit = &r600_copy_cpdma, 105357e252bfSMichael Neumann .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX, 105457e252bfSMichael Neumann .dma = &r600_copy_dma, 105557e252bfSMichael Neumann .dma_ring_index = R600_RING_TYPE_DMA_INDEX, 105657e252bfSMichael Neumann .copy = &r600_copy_cpdma, 105757e252bfSMichael Neumann .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX, 105857e252bfSMichael Neumann }, 105957e252bfSMichael Neumann .surface = { 106057e252bfSMichael Neumann .set_reg = r600_set_surface_reg, 106157e252bfSMichael Neumann .clear_reg = r600_clear_surface_reg, 106257e252bfSMichael Neumann }, 106357e252bfSMichael Neumann .hpd = { 106457e252bfSMichael Neumann .init = &r600_hpd_init, 106557e252bfSMichael Neumann .fini = &r600_hpd_fini, 106657e252bfSMichael Neumann .sense = &r600_hpd_sense, 106757e252bfSMichael Neumann .set_polarity = &r600_hpd_set_polarity, 106857e252bfSMichael Neumann }, 106957e252bfSMichael Neumann .pm = { 107057e252bfSMichael Neumann .misc = &r600_pm_misc, 107157e252bfSMichael Neumann .prepare = &rs600_pm_prepare, 107257e252bfSMichael Neumann .finish = &rs600_pm_finish, 107357e252bfSMichael Neumann .init_profile = &r600_pm_init_profile, 107457e252bfSMichael Neumann .get_dynpm_state = &r600_pm_get_dynpm_state, 107557e252bfSMichael Neumann .get_engine_clock = &radeon_atom_get_engine_clock, 107657e252bfSMichael Neumann .set_engine_clock = &radeon_atom_set_engine_clock, 107757e252bfSMichael Neumann .get_memory_clock = &radeon_atom_get_memory_clock, 107857e252bfSMichael Neumann .set_memory_clock = &radeon_atom_set_memory_clock, 107957e252bfSMichael Neumann .get_pcie_lanes = &r600_get_pcie_lanes, 108057e252bfSMichael Neumann .set_pcie_lanes = &r600_set_pcie_lanes, 108157e252bfSMichael Neumann .set_clock_gating = NULL, 108257e252bfSMichael Neumann .get_temperature = &rv6xx_get_temp, 10834cd92098Szrj .set_uvd_clocks = &r600_set_uvd_clocks, 108457e252bfSMichael Neumann }, 108557e252bfSMichael Neumann .dpm = { 108657e252bfSMichael Neumann .init = &rv6xx_dpm_init, 108757e252bfSMichael Neumann .setup_asic = &rv6xx_setup_asic, 108857e252bfSMichael Neumann .enable = &rv6xx_dpm_enable, 1089c6f73aabSFrançois Tigeot .late_enable = &r600_dpm_late_enable, 109057e252bfSMichael Neumann .disable = &rv6xx_dpm_disable, 109157e252bfSMichael Neumann .pre_set_power_state = &r600_dpm_pre_set_power_state, 109257e252bfSMichael Neumann .set_power_state = &rv6xx_dpm_set_power_state, 109357e252bfSMichael Neumann .post_set_power_state = &r600_dpm_post_set_power_state, 109457e252bfSMichael Neumann .display_configuration_changed = &rv6xx_dpm_display_configuration_changed, 109557e252bfSMichael Neumann .fini = &rv6xx_dpm_fini, 109657e252bfSMichael Neumann .get_sclk = &rv6xx_dpm_get_sclk, 109757e252bfSMichael Neumann .get_mclk = &rv6xx_dpm_get_mclk, 109857e252bfSMichael Neumann .print_power_state = &rv6xx_dpm_print_power_state, 109957e252bfSMichael Neumann .debugfs_print_current_performance_level = &rv6xx_dpm_debugfs_print_current_performance_level, 110057e252bfSMichael Neumann .force_performance_level = &rv6xx_dpm_force_performance_level, 1101*c59a5c48SFrançois Tigeot .get_current_sclk = &rv6xx_dpm_get_current_sclk, 1102*c59a5c48SFrançois Tigeot .get_current_mclk = &rv6xx_dpm_get_current_mclk, 1103926deccbSFrançois Tigeot }, 1104926deccbSFrançois Tigeot .pflip = { 1105926deccbSFrançois Tigeot .page_flip = &rs600_page_flip, 1106c6f73aabSFrançois Tigeot .page_flip_pending = &rs600_page_flip_pending, 1107926deccbSFrançois Tigeot }, 1108926deccbSFrançois Tigeot }; 1109926deccbSFrançois Tigeot 1110926deccbSFrançois Tigeot static struct radeon_asic rs780_asic = { 1111926deccbSFrançois Tigeot .init = &r600_init, 1112926deccbSFrançois Tigeot .fini = &r600_fini, 1113926deccbSFrançois Tigeot .suspend = &r600_suspend, 1114926deccbSFrançois Tigeot .resume = &r600_resume, 1115926deccbSFrançois Tigeot .vga_set_state = &r600_vga_set_state, 1116926deccbSFrançois Tigeot .asic_reset = &r600_asic_reset, 1117c6f73aabSFrançois Tigeot .mmio_hdp_flush = r600_mmio_hdp_flush, 1118926deccbSFrançois Tigeot .gui_idle = &r600_gui_idle, 1119926deccbSFrançois Tigeot .mc_wait_for_idle = &r600_mc_wait_for_idle, 1120b403bed8SMichael Neumann .get_xclk = &r600_get_xclk, 1121b403bed8SMichael Neumann .get_gpu_clock_counter = &r600_get_gpu_clock_counter, 1122*c59a5c48SFrançois Tigeot .get_allowed_info_register = r600_get_allowed_info_register, 1123926deccbSFrançois Tigeot .gart = { 1124926deccbSFrançois Tigeot .tlb_flush = &r600_pcie_gart_tlb_flush, 11257dcf36dcSFrançois Tigeot .get_page_entry = &rs600_gart_get_page_entry, 1126926deccbSFrançois Tigeot .set_page = &rs600_gart_set_page, 1127926deccbSFrançois Tigeot }, 1128926deccbSFrançois Tigeot .ring = { 11294cd92098Szrj [RADEON_RING_TYPE_GFX_INDEX] = &r600_gfx_ring, 11304cd92098Szrj [R600_RING_TYPE_DMA_INDEX] = &r600_dma_ring, 1131591d5043SFrançois Tigeot [R600_RING_TYPE_UVD_INDEX] = &rv6xx_uvd_ring, 1132926deccbSFrançois Tigeot }, 1133926deccbSFrançois Tigeot .irq = { 1134926deccbSFrançois Tigeot .set = &r600_irq_set, 1135926deccbSFrançois Tigeot .process = &r600_irq_process, 1136926deccbSFrançois Tigeot }, 1137926deccbSFrançois Tigeot .display = { 1138926deccbSFrançois Tigeot .bandwidth_update = &rs690_bandwidth_update, 1139926deccbSFrançois Tigeot .get_vblank_counter = &rs600_get_vblank_counter, 1140926deccbSFrançois Tigeot .wait_for_vblank = &avivo_wait_for_vblank, 1141926deccbSFrançois Tigeot .set_backlight_level = &atombios_set_backlight_level, 1142926deccbSFrançois Tigeot .get_backlight_level = &atombios_get_backlight_level, 1143926deccbSFrançois Tigeot }, 1144926deccbSFrançois Tigeot .copy = { 11454cd92098Szrj .blit = &r600_copy_cpdma, 1146926deccbSFrançois Tigeot .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX, 1147926deccbSFrançois Tigeot .dma = &r600_copy_dma, 1148926deccbSFrançois Tigeot .dma_ring_index = R600_RING_TYPE_DMA_INDEX, 114957e252bfSMichael Neumann .copy = &r600_copy_cpdma, 115057e252bfSMichael Neumann .copy_ring_index = RADEON_RING_TYPE_GFX_INDEX, 1151926deccbSFrançois Tigeot }, 1152926deccbSFrançois Tigeot .surface = { 1153926deccbSFrançois Tigeot .set_reg = r600_set_surface_reg, 1154926deccbSFrançois Tigeot .clear_reg = r600_clear_surface_reg, 1155926deccbSFrançois Tigeot }, 1156926deccbSFrançois Tigeot .hpd = { 1157926deccbSFrançois Tigeot .init = &r600_hpd_init, 1158926deccbSFrançois Tigeot .fini = &r600_hpd_fini, 1159926deccbSFrançois Tigeot .sense = &r600_hpd_sense, 1160926deccbSFrançois Tigeot .set_polarity = &r600_hpd_set_polarity, 1161926deccbSFrançois Tigeot }, 1162926deccbSFrançois Tigeot .pm = { 1163926deccbSFrançois Tigeot .misc = &r600_pm_misc, 1164926deccbSFrançois Tigeot .prepare = &rs600_pm_prepare, 1165926deccbSFrançois Tigeot .finish = &rs600_pm_finish, 1166926deccbSFrançois Tigeot .init_profile = &rs780_pm_init_profile, 1167926deccbSFrançois Tigeot .get_dynpm_state = &r600_pm_get_dynpm_state, 1168926deccbSFrançois Tigeot .get_engine_clock = &radeon_atom_get_engine_clock, 1169926deccbSFrançois Tigeot .set_engine_clock = &radeon_atom_set_engine_clock, 1170926deccbSFrançois Tigeot .get_memory_clock = NULL, 1171926deccbSFrançois Tigeot .set_memory_clock = NULL, 1172926deccbSFrançois Tigeot .get_pcie_lanes = NULL, 1173926deccbSFrançois Tigeot .set_pcie_lanes = NULL, 1174926deccbSFrançois Tigeot .set_clock_gating = NULL, 117557e252bfSMichael Neumann .get_temperature = &rv6xx_get_temp, 11764cd92098Szrj .set_uvd_clocks = &r600_set_uvd_clocks, 117757e252bfSMichael Neumann }, 117857e252bfSMichael Neumann .dpm = { 117957e252bfSMichael Neumann .init = &rs780_dpm_init, 118057e252bfSMichael Neumann .setup_asic = &rs780_dpm_setup_asic, 118157e252bfSMichael Neumann .enable = &rs780_dpm_enable, 1182c6f73aabSFrançois Tigeot .late_enable = &r600_dpm_late_enable, 118357e252bfSMichael Neumann .disable = &rs780_dpm_disable, 118457e252bfSMichael Neumann .pre_set_power_state = &r600_dpm_pre_set_power_state, 118557e252bfSMichael Neumann .set_power_state = &rs780_dpm_set_power_state, 118657e252bfSMichael Neumann .post_set_power_state = &r600_dpm_post_set_power_state, 118757e252bfSMichael Neumann .display_configuration_changed = &rs780_dpm_display_configuration_changed, 118857e252bfSMichael Neumann .fini = &rs780_dpm_fini, 118957e252bfSMichael Neumann .get_sclk = &rs780_dpm_get_sclk, 119057e252bfSMichael Neumann .get_mclk = &rs780_dpm_get_mclk, 119157e252bfSMichael Neumann .print_power_state = &rs780_dpm_print_power_state, 119257e252bfSMichael Neumann .debugfs_print_current_performance_level = &rs780_dpm_debugfs_print_current_performance_level, 11934cd92098Szrj .force_performance_level = &rs780_dpm_force_performance_level, 1194*c59a5c48SFrançois Tigeot .get_current_sclk = &rs780_dpm_get_current_sclk, 1195*c59a5c48SFrançois Tigeot .get_current_mclk = &rs780_dpm_get_current_mclk, 1196926deccbSFrançois Tigeot }, 1197926deccbSFrançois Tigeot .pflip = { 1198926deccbSFrançois Tigeot .page_flip = &rs600_page_flip, 1199c6f73aabSFrançois Tigeot .page_flip_pending = &rs600_page_flip_pending, 1200926deccbSFrançois Tigeot }, 1201926deccbSFrançois Tigeot }; 1202926deccbSFrançois Tigeot 1203ee479021SImre Vadász static struct radeon_asic_ring rv770_uvd_ring = { 12044cd92098Szrj .ib_execute = &uvd_v1_0_ib_execute, 12054cd92098Szrj .emit_fence = &uvd_v2_2_fence_emit, 1206*c59a5c48SFrançois Tigeot .emit_semaphore = &uvd_v2_2_semaphore_emit, 12074cd92098Szrj .cs_parse = &radeon_uvd_cs_parse, 12084cd92098Szrj .ring_test = &uvd_v1_0_ring_test, 12094cd92098Szrj .ib_test = &uvd_v1_0_ib_test, 12104cd92098Szrj .is_lockup = &radeon_ring_test_lockup, 12114cd92098Szrj .get_rptr = &uvd_v1_0_get_rptr, 12124cd92098Szrj .get_wptr = &uvd_v1_0_get_wptr, 12134cd92098Szrj .set_wptr = &uvd_v1_0_set_wptr, 12144cd92098Szrj }; 12154cd92098Szrj 1216926deccbSFrançois Tigeot static struct radeon_asic rv770_asic = { 1217926deccbSFrançois Tigeot .init = &rv770_init, 1218926deccbSFrançois Tigeot .fini = &rv770_fini, 1219926deccbSFrançois Tigeot .suspend = &rv770_suspend, 1220926deccbSFrançois Tigeot .resume = &rv770_resume, 1221926deccbSFrançois Tigeot .asic_reset = &r600_asic_reset, 1222926deccbSFrançois Tigeot .vga_set_state = &r600_vga_set_state, 1223c6f73aabSFrançois Tigeot .mmio_hdp_flush = r600_mmio_hdp_flush, 1224926deccbSFrançois Tigeot .gui_idle = &r600_gui_idle, 1225926deccbSFrançois Tigeot .mc_wait_for_idle = &r600_mc_wait_for_idle, 1226b403bed8SMichael Neumann .get_xclk = &rv770_get_xclk, 1227b403bed8SMichael Neumann .get_gpu_clock_counter = &r600_get_gpu_clock_counter, 1228*c59a5c48SFrançois Tigeot .get_allowed_info_register = r600_get_allowed_info_register, 1229926deccbSFrançois Tigeot .gart = { 1230926deccbSFrançois Tigeot .tlb_flush = &r600_pcie_gart_tlb_flush, 12317dcf36dcSFrançois Tigeot .get_page_entry = &rs600_gart_get_page_entry, 1232926deccbSFrançois Tigeot .set_page = &rs600_gart_set_page, 1233926deccbSFrançois Tigeot }, 1234926deccbSFrançois Tigeot .ring = { 12354cd92098Szrj [RADEON_RING_TYPE_GFX_INDEX] = &r600_gfx_ring, 12364cd92098Szrj [R600_RING_TYPE_DMA_INDEX] = &r600_dma_ring, 12374cd92098Szrj [R600_RING_TYPE_UVD_INDEX] = &rv770_uvd_ring, 1238926deccbSFrançois Tigeot }, 1239926deccbSFrançois Tigeot .irq = { 1240926deccbSFrançois Tigeot .set = &r600_irq_set, 1241926deccbSFrançois Tigeot .process = &r600_irq_process, 1242926deccbSFrançois Tigeot }, 1243926deccbSFrançois Tigeot .display = { 1244926deccbSFrançois Tigeot .bandwidth_update = &rv515_bandwidth_update, 1245926deccbSFrançois Tigeot .get_vblank_counter = &rs600_get_vblank_counter, 1246926deccbSFrançois Tigeot .wait_for_vblank = &avivo_wait_for_vblank, 1247926deccbSFrançois Tigeot .set_backlight_level = &atombios_set_backlight_level, 1248926deccbSFrançois Tigeot .get_backlight_level = &atombios_get_backlight_level, 1249926deccbSFrançois Tigeot }, 1250926deccbSFrançois Tigeot .copy = { 12514cd92098Szrj .blit = &r600_copy_cpdma, 1252926deccbSFrançois Tigeot .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX, 1253926deccbSFrançois Tigeot .dma = &rv770_copy_dma, 1254926deccbSFrançois Tigeot .dma_ring_index = R600_RING_TYPE_DMA_INDEX, 1255926deccbSFrançois Tigeot .copy = &rv770_copy_dma, 1256926deccbSFrançois Tigeot .copy_ring_index = R600_RING_TYPE_DMA_INDEX, 1257926deccbSFrançois Tigeot }, 1258926deccbSFrançois Tigeot .surface = { 1259926deccbSFrançois Tigeot .set_reg = r600_set_surface_reg, 1260926deccbSFrançois Tigeot .clear_reg = r600_clear_surface_reg, 1261926deccbSFrançois Tigeot }, 1262926deccbSFrançois Tigeot .hpd = { 1263926deccbSFrançois Tigeot .init = &r600_hpd_init, 1264926deccbSFrançois Tigeot .fini = &r600_hpd_fini, 1265926deccbSFrançois Tigeot .sense = &r600_hpd_sense, 1266926deccbSFrançois Tigeot .set_polarity = &r600_hpd_set_polarity, 1267926deccbSFrançois Tigeot }, 1268926deccbSFrançois Tigeot .pm = { 1269926deccbSFrançois Tigeot .misc = &rv770_pm_misc, 1270926deccbSFrançois Tigeot .prepare = &rs600_pm_prepare, 1271926deccbSFrançois Tigeot .finish = &rs600_pm_finish, 1272926deccbSFrançois Tigeot .init_profile = &r600_pm_init_profile, 1273926deccbSFrançois Tigeot .get_dynpm_state = &r600_pm_get_dynpm_state, 1274926deccbSFrançois Tigeot .get_engine_clock = &radeon_atom_get_engine_clock, 1275926deccbSFrançois Tigeot .set_engine_clock = &radeon_atom_set_engine_clock, 1276926deccbSFrançois Tigeot .get_memory_clock = &radeon_atom_get_memory_clock, 1277926deccbSFrançois Tigeot .set_memory_clock = &radeon_atom_set_memory_clock, 1278926deccbSFrançois Tigeot .get_pcie_lanes = &r600_get_pcie_lanes, 1279926deccbSFrançois Tigeot .set_pcie_lanes = &r600_set_pcie_lanes, 1280926deccbSFrançois Tigeot .set_clock_gating = &radeon_atom_set_clock_gating, 1281f43cf1b1SMichael Neumann .set_uvd_clocks = &rv770_set_uvd_clocks, 128257e252bfSMichael Neumann .get_temperature = &rv770_get_temp, 128357e252bfSMichael Neumann }, 128457e252bfSMichael Neumann .dpm = { 128557e252bfSMichael Neumann .init = &rv770_dpm_init, 128657e252bfSMichael Neumann .setup_asic = &rv770_dpm_setup_asic, 128757e252bfSMichael Neumann .enable = &rv770_dpm_enable, 1288c6f73aabSFrançois Tigeot .late_enable = &rv770_dpm_late_enable, 128957e252bfSMichael Neumann .disable = &rv770_dpm_disable, 129057e252bfSMichael Neumann .pre_set_power_state = &r600_dpm_pre_set_power_state, 129157e252bfSMichael Neumann .set_power_state = &rv770_dpm_set_power_state, 129257e252bfSMichael Neumann .post_set_power_state = &r600_dpm_post_set_power_state, 129357e252bfSMichael Neumann .display_configuration_changed = &rv770_dpm_display_configuration_changed, 129457e252bfSMichael Neumann .fini = &rv770_dpm_fini, 129557e252bfSMichael Neumann .get_sclk = &rv770_dpm_get_sclk, 129657e252bfSMichael Neumann .get_mclk = &rv770_dpm_get_mclk, 129757e252bfSMichael Neumann .print_power_state = &rv770_dpm_print_power_state, 129857e252bfSMichael Neumann .debugfs_print_current_performance_level = &rv770_dpm_debugfs_print_current_performance_level, 129957e252bfSMichael Neumann .force_performance_level = &rv770_dpm_force_performance_level, 130057e252bfSMichael Neumann .vblank_too_short = &rv770_dpm_vblank_too_short, 1301*c59a5c48SFrançois Tigeot .get_current_sclk = &rv770_dpm_get_current_sclk, 1302*c59a5c48SFrançois Tigeot .get_current_mclk = &rv770_dpm_get_current_mclk, 1303926deccbSFrançois Tigeot }, 1304926deccbSFrançois Tigeot .pflip = { 1305926deccbSFrançois Tigeot .page_flip = &rv770_page_flip, 1306c6f73aabSFrançois Tigeot .page_flip_pending = &rv770_page_flip_pending, 1307926deccbSFrançois Tigeot }, 1308926deccbSFrançois Tigeot }; 1309926deccbSFrançois Tigeot 1310ee479021SImre Vadász static struct radeon_asic_ring evergreen_gfx_ring = { 13114cd92098Szrj .ib_execute = &evergreen_ring_ib_execute, 13124cd92098Szrj .emit_fence = &r600_fence_ring_emit, 13134cd92098Szrj .emit_semaphore = &r600_semaphore_ring_emit, 13144cd92098Szrj .cs_parse = &evergreen_cs_parse, 13154cd92098Szrj .ring_test = &r600_ring_test, 13164cd92098Szrj .ib_test = &r600_ib_test, 13174cd92098Szrj .is_lockup = &evergreen_gfx_is_lockup, 1318c6f73aabSFrançois Tigeot .get_rptr = &r600_gfx_get_rptr, 1319c6f73aabSFrançois Tigeot .get_wptr = &r600_gfx_get_wptr, 1320c6f73aabSFrançois Tigeot .set_wptr = &r600_gfx_set_wptr, 13214cd92098Szrj }; 13224cd92098Szrj 1323ee479021SImre Vadász static struct radeon_asic_ring evergreen_dma_ring = { 13244cd92098Szrj .ib_execute = &evergreen_dma_ring_ib_execute, 13254cd92098Szrj .emit_fence = &evergreen_dma_fence_ring_emit, 13264cd92098Szrj .emit_semaphore = &r600_dma_semaphore_ring_emit, 13274cd92098Szrj .cs_parse = &evergreen_dma_cs_parse, 13284cd92098Szrj .ring_test = &r600_dma_ring_test, 13294cd92098Szrj .ib_test = &r600_dma_ib_test, 13304cd92098Szrj .is_lockup = &evergreen_dma_is_lockup, 13314cd92098Szrj .get_rptr = &r600_dma_get_rptr, 13324cd92098Szrj .get_wptr = &r600_dma_get_wptr, 13334cd92098Szrj .set_wptr = &r600_dma_set_wptr, 13344cd92098Szrj }; 13354cd92098Szrj 1336926deccbSFrançois Tigeot static struct radeon_asic evergreen_asic = { 1337926deccbSFrançois Tigeot .init = &evergreen_init, 1338926deccbSFrançois Tigeot .fini = &evergreen_fini, 1339926deccbSFrançois Tigeot .suspend = &evergreen_suspend, 1340926deccbSFrançois Tigeot .resume = &evergreen_resume, 1341926deccbSFrançois Tigeot .asic_reset = &evergreen_asic_reset, 1342926deccbSFrançois Tigeot .vga_set_state = &r600_vga_set_state, 1343c6f73aabSFrançois Tigeot .mmio_hdp_flush = r600_mmio_hdp_flush, 1344926deccbSFrançois Tigeot .gui_idle = &r600_gui_idle, 1345926deccbSFrançois Tigeot .mc_wait_for_idle = &evergreen_mc_wait_for_idle, 1346b403bed8SMichael Neumann .get_xclk = &rv770_get_xclk, 1347b403bed8SMichael Neumann .get_gpu_clock_counter = &r600_get_gpu_clock_counter, 1348*c59a5c48SFrançois Tigeot .get_allowed_info_register = evergreen_get_allowed_info_register, 1349926deccbSFrançois Tigeot .gart = { 1350926deccbSFrançois Tigeot .tlb_flush = &evergreen_pcie_gart_tlb_flush, 13517dcf36dcSFrançois Tigeot .get_page_entry = &rs600_gart_get_page_entry, 1352926deccbSFrançois Tigeot .set_page = &rs600_gart_set_page, 1353926deccbSFrançois Tigeot }, 1354926deccbSFrançois Tigeot .ring = { 13554cd92098Szrj [RADEON_RING_TYPE_GFX_INDEX] = &evergreen_gfx_ring, 13564cd92098Szrj [R600_RING_TYPE_DMA_INDEX] = &evergreen_dma_ring, 13574cd92098Szrj [R600_RING_TYPE_UVD_INDEX] = &rv770_uvd_ring, 1358926deccbSFrançois Tigeot }, 1359926deccbSFrançois Tigeot .irq = { 1360926deccbSFrançois Tigeot .set = &evergreen_irq_set, 1361926deccbSFrançois Tigeot .process = &evergreen_irq_process, 1362926deccbSFrançois Tigeot }, 1363926deccbSFrançois Tigeot .display = { 1364926deccbSFrançois Tigeot .bandwidth_update = &evergreen_bandwidth_update, 1365926deccbSFrançois Tigeot .get_vblank_counter = &evergreen_get_vblank_counter, 1366926deccbSFrançois Tigeot .wait_for_vblank = &dce4_wait_for_vblank, 1367926deccbSFrançois Tigeot .set_backlight_level = &atombios_set_backlight_level, 1368926deccbSFrançois Tigeot .get_backlight_level = &atombios_get_backlight_level, 1369926deccbSFrançois Tigeot }, 1370926deccbSFrançois Tigeot .copy = { 13714cd92098Szrj .blit = &r600_copy_cpdma, 1372926deccbSFrançois Tigeot .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX, 1373926deccbSFrançois Tigeot .dma = &evergreen_copy_dma, 1374926deccbSFrançois Tigeot .dma_ring_index = R600_RING_TYPE_DMA_INDEX, 1375926deccbSFrançois Tigeot .copy = &evergreen_copy_dma, 1376926deccbSFrançois Tigeot .copy_ring_index = R600_RING_TYPE_DMA_INDEX, 1377926deccbSFrançois Tigeot }, 1378926deccbSFrançois Tigeot .surface = { 1379926deccbSFrançois Tigeot .set_reg = r600_set_surface_reg, 1380926deccbSFrançois Tigeot .clear_reg = r600_clear_surface_reg, 1381926deccbSFrançois Tigeot }, 1382926deccbSFrançois Tigeot .hpd = { 1383926deccbSFrançois Tigeot .init = &evergreen_hpd_init, 1384926deccbSFrançois Tigeot .fini = &evergreen_hpd_fini, 1385926deccbSFrançois Tigeot .sense = &evergreen_hpd_sense, 1386926deccbSFrançois Tigeot .set_polarity = &evergreen_hpd_set_polarity, 1387926deccbSFrançois Tigeot }, 1388926deccbSFrançois Tigeot .pm = { 1389926deccbSFrançois Tigeot .misc = &evergreen_pm_misc, 1390926deccbSFrançois Tigeot .prepare = &evergreen_pm_prepare, 1391926deccbSFrançois Tigeot .finish = &evergreen_pm_finish, 1392926deccbSFrançois Tigeot .init_profile = &r600_pm_init_profile, 1393926deccbSFrançois Tigeot .get_dynpm_state = &r600_pm_get_dynpm_state, 1394926deccbSFrançois Tigeot .get_engine_clock = &radeon_atom_get_engine_clock, 1395926deccbSFrançois Tigeot .set_engine_clock = &radeon_atom_set_engine_clock, 1396926deccbSFrançois Tigeot .get_memory_clock = &radeon_atom_get_memory_clock, 1397926deccbSFrançois Tigeot .set_memory_clock = &radeon_atom_set_memory_clock, 1398926deccbSFrançois Tigeot .get_pcie_lanes = &r600_get_pcie_lanes, 1399926deccbSFrançois Tigeot .set_pcie_lanes = &r600_set_pcie_lanes, 1400926deccbSFrançois Tigeot .set_clock_gating = NULL, 1401f43cf1b1SMichael Neumann .set_uvd_clocks = &evergreen_set_uvd_clocks, 140257e252bfSMichael Neumann .get_temperature = &evergreen_get_temp, 140357e252bfSMichael Neumann }, 140457e252bfSMichael Neumann .dpm = { 140557e252bfSMichael Neumann .init = &cypress_dpm_init, 140657e252bfSMichael Neumann .setup_asic = &cypress_dpm_setup_asic, 140757e252bfSMichael Neumann .enable = &cypress_dpm_enable, 1408c6f73aabSFrançois Tigeot .late_enable = &rv770_dpm_late_enable, 140957e252bfSMichael Neumann .disable = &cypress_dpm_disable, 141057e252bfSMichael Neumann .pre_set_power_state = &r600_dpm_pre_set_power_state, 141157e252bfSMichael Neumann .set_power_state = &cypress_dpm_set_power_state, 141257e252bfSMichael Neumann .post_set_power_state = &r600_dpm_post_set_power_state, 141357e252bfSMichael Neumann .display_configuration_changed = &cypress_dpm_display_configuration_changed, 141457e252bfSMichael Neumann .fini = &cypress_dpm_fini, 141557e252bfSMichael Neumann .get_sclk = &rv770_dpm_get_sclk, 141657e252bfSMichael Neumann .get_mclk = &rv770_dpm_get_mclk, 141757e252bfSMichael Neumann .print_power_state = &rv770_dpm_print_power_state, 141857e252bfSMichael Neumann .debugfs_print_current_performance_level = &rv770_dpm_debugfs_print_current_performance_level, 141957e252bfSMichael Neumann .force_performance_level = &rv770_dpm_force_performance_level, 142057e252bfSMichael Neumann .vblank_too_short = &cypress_dpm_vblank_too_short, 1421*c59a5c48SFrançois Tigeot .get_current_sclk = &rv770_dpm_get_current_sclk, 1422*c59a5c48SFrançois Tigeot .get_current_mclk = &rv770_dpm_get_current_mclk, 1423926deccbSFrançois Tigeot }, 1424926deccbSFrançois Tigeot .pflip = { 1425926deccbSFrançois Tigeot .page_flip = &evergreen_page_flip, 1426c6f73aabSFrançois Tigeot .page_flip_pending = &evergreen_page_flip_pending, 1427926deccbSFrançois Tigeot }, 1428926deccbSFrançois Tigeot }; 1429926deccbSFrançois Tigeot 1430926deccbSFrançois Tigeot static struct radeon_asic sumo_asic = { 1431926deccbSFrançois Tigeot .init = &evergreen_init, 1432926deccbSFrançois Tigeot .fini = &evergreen_fini, 1433926deccbSFrançois Tigeot .suspend = &evergreen_suspend, 1434926deccbSFrançois Tigeot .resume = &evergreen_resume, 1435926deccbSFrançois Tigeot .asic_reset = &evergreen_asic_reset, 1436926deccbSFrançois Tigeot .vga_set_state = &r600_vga_set_state, 1437c6f73aabSFrançois Tigeot .mmio_hdp_flush = r600_mmio_hdp_flush, 1438926deccbSFrançois Tigeot .gui_idle = &r600_gui_idle, 1439926deccbSFrançois Tigeot .mc_wait_for_idle = &evergreen_mc_wait_for_idle, 1440b403bed8SMichael Neumann .get_xclk = &r600_get_xclk, 1441b403bed8SMichael Neumann .get_gpu_clock_counter = &r600_get_gpu_clock_counter, 1442*c59a5c48SFrançois Tigeot .get_allowed_info_register = evergreen_get_allowed_info_register, 1443926deccbSFrançois Tigeot .gart = { 1444926deccbSFrançois Tigeot .tlb_flush = &evergreen_pcie_gart_tlb_flush, 14457dcf36dcSFrançois Tigeot .get_page_entry = &rs600_gart_get_page_entry, 1446926deccbSFrançois Tigeot .set_page = &rs600_gart_set_page, 1447926deccbSFrançois Tigeot }, 1448926deccbSFrançois Tigeot .ring = { 14494cd92098Szrj [RADEON_RING_TYPE_GFX_INDEX] = &evergreen_gfx_ring, 14504cd92098Szrj [R600_RING_TYPE_DMA_INDEX] = &evergreen_dma_ring, 14514cd92098Szrj [R600_RING_TYPE_UVD_INDEX] = &rv770_uvd_ring, 1452926deccbSFrançois Tigeot }, 1453926deccbSFrançois Tigeot .irq = { 1454926deccbSFrançois Tigeot .set = &evergreen_irq_set, 1455926deccbSFrançois Tigeot .process = &evergreen_irq_process, 1456926deccbSFrançois Tigeot }, 1457926deccbSFrançois Tigeot .display = { 1458926deccbSFrançois Tigeot .bandwidth_update = &evergreen_bandwidth_update, 1459926deccbSFrançois Tigeot .get_vblank_counter = &evergreen_get_vblank_counter, 1460926deccbSFrançois Tigeot .wait_for_vblank = &dce4_wait_for_vblank, 1461926deccbSFrançois Tigeot .set_backlight_level = &atombios_set_backlight_level, 1462926deccbSFrançois Tigeot .get_backlight_level = &atombios_get_backlight_level, 1463926deccbSFrançois Tigeot }, 1464926deccbSFrançois Tigeot .copy = { 14654cd92098Szrj .blit = &r600_copy_cpdma, 1466926deccbSFrançois Tigeot .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX, 1467926deccbSFrançois Tigeot .dma = &evergreen_copy_dma, 1468926deccbSFrançois Tigeot .dma_ring_index = R600_RING_TYPE_DMA_INDEX, 1469926deccbSFrançois Tigeot .copy = &evergreen_copy_dma, 1470926deccbSFrançois Tigeot .copy_ring_index = R600_RING_TYPE_DMA_INDEX, 1471926deccbSFrançois Tigeot }, 1472926deccbSFrançois Tigeot .surface = { 1473926deccbSFrançois Tigeot .set_reg = r600_set_surface_reg, 1474926deccbSFrançois Tigeot .clear_reg = r600_clear_surface_reg, 1475926deccbSFrançois Tigeot }, 1476926deccbSFrançois Tigeot .hpd = { 1477926deccbSFrançois Tigeot .init = &evergreen_hpd_init, 1478926deccbSFrançois Tigeot .fini = &evergreen_hpd_fini, 1479926deccbSFrançois Tigeot .sense = &evergreen_hpd_sense, 1480926deccbSFrançois Tigeot .set_polarity = &evergreen_hpd_set_polarity, 1481926deccbSFrançois Tigeot }, 1482926deccbSFrançois Tigeot .pm = { 1483926deccbSFrançois Tigeot .misc = &evergreen_pm_misc, 1484926deccbSFrançois Tigeot .prepare = &evergreen_pm_prepare, 1485926deccbSFrançois Tigeot .finish = &evergreen_pm_finish, 1486926deccbSFrançois Tigeot .init_profile = &sumo_pm_init_profile, 1487926deccbSFrançois Tigeot .get_dynpm_state = &r600_pm_get_dynpm_state, 1488926deccbSFrançois Tigeot .get_engine_clock = &radeon_atom_get_engine_clock, 1489926deccbSFrançois Tigeot .set_engine_clock = &radeon_atom_set_engine_clock, 1490926deccbSFrançois Tigeot .get_memory_clock = NULL, 1491926deccbSFrançois Tigeot .set_memory_clock = NULL, 1492926deccbSFrançois Tigeot .get_pcie_lanes = NULL, 1493926deccbSFrançois Tigeot .set_pcie_lanes = NULL, 1494926deccbSFrançois Tigeot .set_clock_gating = NULL, 1495f43cf1b1SMichael Neumann .set_uvd_clocks = &sumo_set_uvd_clocks, 149657e252bfSMichael Neumann .get_temperature = &sumo_get_temp, 149757e252bfSMichael Neumann }, 149857e252bfSMichael Neumann .dpm = { 149957e252bfSMichael Neumann .init = &sumo_dpm_init, 150057e252bfSMichael Neumann .setup_asic = &sumo_dpm_setup_asic, 150157e252bfSMichael Neumann .enable = &sumo_dpm_enable, 1502c6f73aabSFrançois Tigeot .late_enable = &sumo_dpm_late_enable, 150357e252bfSMichael Neumann .disable = &sumo_dpm_disable, 150457e252bfSMichael Neumann .pre_set_power_state = &sumo_dpm_pre_set_power_state, 150557e252bfSMichael Neumann .set_power_state = &sumo_dpm_set_power_state, 150657e252bfSMichael Neumann .post_set_power_state = &sumo_dpm_post_set_power_state, 150757e252bfSMichael Neumann .display_configuration_changed = &sumo_dpm_display_configuration_changed, 150857e252bfSMichael Neumann .fini = &sumo_dpm_fini, 150957e252bfSMichael Neumann .get_sclk = &sumo_dpm_get_sclk, 151057e252bfSMichael Neumann .get_mclk = &sumo_dpm_get_mclk, 151157e252bfSMichael Neumann .print_power_state = &sumo_dpm_print_power_state, 151257e252bfSMichael Neumann .debugfs_print_current_performance_level = &sumo_dpm_debugfs_print_current_performance_level, 151357e252bfSMichael Neumann .force_performance_level = &sumo_dpm_force_performance_level, 1514*c59a5c48SFrançois Tigeot .get_current_sclk = &sumo_dpm_get_current_sclk, 1515*c59a5c48SFrançois Tigeot .get_current_mclk = &sumo_dpm_get_current_mclk, 1516926deccbSFrançois Tigeot }, 1517926deccbSFrançois Tigeot .pflip = { 1518926deccbSFrançois Tigeot .page_flip = &evergreen_page_flip, 1519c6f73aabSFrançois Tigeot .page_flip_pending = &evergreen_page_flip_pending, 1520926deccbSFrançois Tigeot }, 1521926deccbSFrançois Tigeot }; 1522926deccbSFrançois Tigeot 1523926deccbSFrançois Tigeot static struct radeon_asic btc_asic = { 1524926deccbSFrançois Tigeot .init = &evergreen_init, 1525926deccbSFrançois Tigeot .fini = &evergreen_fini, 1526926deccbSFrançois Tigeot .suspend = &evergreen_suspend, 1527926deccbSFrançois Tigeot .resume = &evergreen_resume, 1528926deccbSFrançois Tigeot .asic_reset = &evergreen_asic_reset, 1529926deccbSFrançois Tigeot .vga_set_state = &r600_vga_set_state, 1530c6f73aabSFrançois Tigeot .mmio_hdp_flush = r600_mmio_hdp_flush, 1531926deccbSFrançois Tigeot .gui_idle = &r600_gui_idle, 1532926deccbSFrançois Tigeot .mc_wait_for_idle = &evergreen_mc_wait_for_idle, 1533b403bed8SMichael Neumann .get_xclk = &rv770_get_xclk, 1534b403bed8SMichael Neumann .get_gpu_clock_counter = &r600_get_gpu_clock_counter, 1535*c59a5c48SFrançois Tigeot .get_allowed_info_register = evergreen_get_allowed_info_register, 1536926deccbSFrançois Tigeot .gart = { 1537926deccbSFrançois Tigeot .tlb_flush = &evergreen_pcie_gart_tlb_flush, 15387dcf36dcSFrançois Tigeot .get_page_entry = &rs600_gart_get_page_entry, 1539926deccbSFrançois Tigeot .set_page = &rs600_gart_set_page, 1540926deccbSFrançois Tigeot }, 1541926deccbSFrançois Tigeot .ring = { 15424cd92098Szrj [RADEON_RING_TYPE_GFX_INDEX] = &evergreen_gfx_ring, 15434cd92098Szrj [R600_RING_TYPE_DMA_INDEX] = &evergreen_dma_ring, 15444cd92098Szrj [R600_RING_TYPE_UVD_INDEX] = &rv770_uvd_ring, 1545926deccbSFrançois Tigeot }, 1546926deccbSFrançois Tigeot .irq = { 1547926deccbSFrançois Tigeot .set = &evergreen_irq_set, 1548926deccbSFrançois Tigeot .process = &evergreen_irq_process, 1549926deccbSFrançois Tigeot }, 1550926deccbSFrançois Tigeot .display = { 1551926deccbSFrançois Tigeot .bandwidth_update = &evergreen_bandwidth_update, 1552926deccbSFrançois Tigeot .get_vblank_counter = &evergreen_get_vblank_counter, 1553926deccbSFrançois Tigeot .wait_for_vblank = &dce4_wait_for_vblank, 1554926deccbSFrançois Tigeot .set_backlight_level = &atombios_set_backlight_level, 1555926deccbSFrançois Tigeot .get_backlight_level = &atombios_get_backlight_level, 1556926deccbSFrançois Tigeot }, 1557926deccbSFrançois Tigeot .copy = { 15584cd92098Szrj .blit = &r600_copy_cpdma, 1559926deccbSFrançois Tigeot .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX, 1560926deccbSFrançois Tigeot .dma = &evergreen_copy_dma, 1561926deccbSFrançois Tigeot .dma_ring_index = R600_RING_TYPE_DMA_INDEX, 1562926deccbSFrançois Tigeot .copy = &evergreen_copy_dma, 1563926deccbSFrançois Tigeot .copy_ring_index = R600_RING_TYPE_DMA_INDEX, 1564926deccbSFrançois Tigeot }, 1565926deccbSFrançois Tigeot .surface = { 1566926deccbSFrançois Tigeot .set_reg = r600_set_surface_reg, 1567926deccbSFrançois Tigeot .clear_reg = r600_clear_surface_reg, 1568926deccbSFrançois Tigeot }, 1569926deccbSFrançois Tigeot .hpd = { 1570926deccbSFrançois Tigeot .init = &evergreen_hpd_init, 1571926deccbSFrançois Tigeot .fini = &evergreen_hpd_fini, 1572926deccbSFrançois Tigeot .sense = &evergreen_hpd_sense, 1573926deccbSFrançois Tigeot .set_polarity = &evergreen_hpd_set_polarity, 1574926deccbSFrançois Tigeot }, 1575926deccbSFrançois Tigeot .pm = { 1576926deccbSFrançois Tigeot .misc = &evergreen_pm_misc, 1577926deccbSFrançois Tigeot .prepare = &evergreen_pm_prepare, 1578926deccbSFrançois Tigeot .finish = &evergreen_pm_finish, 1579926deccbSFrançois Tigeot .init_profile = &btc_pm_init_profile, 1580926deccbSFrançois Tigeot .get_dynpm_state = &r600_pm_get_dynpm_state, 1581926deccbSFrançois Tigeot .get_engine_clock = &radeon_atom_get_engine_clock, 1582926deccbSFrançois Tigeot .set_engine_clock = &radeon_atom_set_engine_clock, 1583926deccbSFrançois Tigeot .get_memory_clock = &radeon_atom_get_memory_clock, 1584926deccbSFrançois Tigeot .set_memory_clock = &radeon_atom_set_memory_clock, 1585f43cf1b1SMichael Neumann .get_pcie_lanes = &r600_get_pcie_lanes, 1586f43cf1b1SMichael Neumann .set_pcie_lanes = &r600_set_pcie_lanes, 1587926deccbSFrançois Tigeot .set_clock_gating = NULL, 1588f43cf1b1SMichael Neumann .set_uvd_clocks = &evergreen_set_uvd_clocks, 158957e252bfSMichael Neumann .get_temperature = &evergreen_get_temp, 159057e252bfSMichael Neumann }, 159157e252bfSMichael Neumann .dpm = { 159257e252bfSMichael Neumann .init = &btc_dpm_init, 159357e252bfSMichael Neumann .setup_asic = &btc_dpm_setup_asic, 159457e252bfSMichael Neumann .enable = &btc_dpm_enable, 1595c6f73aabSFrançois Tigeot .late_enable = &rv770_dpm_late_enable, 159657e252bfSMichael Neumann .disable = &btc_dpm_disable, 159757e252bfSMichael Neumann .pre_set_power_state = &btc_dpm_pre_set_power_state, 159857e252bfSMichael Neumann .set_power_state = &btc_dpm_set_power_state, 159957e252bfSMichael Neumann .post_set_power_state = &btc_dpm_post_set_power_state, 160057e252bfSMichael Neumann .display_configuration_changed = &cypress_dpm_display_configuration_changed, 160157e252bfSMichael Neumann .fini = &btc_dpm_fini, 160257e252bfSMichael Neumann .get_sclk = &btc_dpm_get_sclk, 160357e252bfSMichael Neumann .get_mclk = &btc_dpm_get_mclk, 160457e252bfSMichael Neumann .print_power_state = &rv770_dpm_print_power_state, 1605c6f73aabSFrançois Tigeot .debugfs_print_current_performance_level = &btc_dpm_debugfs_print_current_performance_level, 160657e252bfSMichael Neumann .force_performance_level = &rv770_dpm_force_performance_level, 160757e252bfSMichael Neumann .vblank_too_short = &btc_dpm_vblank_too_short, 1608*c59a5c48SFrançois Tigeot .get_current_sclk = &btc_dpm_get_current_sclk, 1609*c59a5c48SFrançois Tigeot .get_current_mclk = &btc_dpm_get_current_mclk, 1610926deccbSFrançois Tigeot }, 1611926deccbSFrançois Tigeot .pflip = { 1612926deccbSFrançois Tigeot .page_flip = &evergreen_page_flip, 1613c6f73aabSFrançois Tigeot .page_flip_pending = &evergreen_page_flip_pending, 1614926deccbSFrançois Tigeot }, 1615926deccbSFrançois Tigeot }; 1616926deccbSFrançois Tigeot 1617ee479021SImre Vadász static struct radeon_asic_ring cayman_gfx_ring = { 16184cd92098Szrj .ib_execute = &cayman_ring_ib_execute, 16194cd92098Szrj .ib_parse = &evergreen_ib_parse, 16204cd92098Szrj .emit_fence = &cayman_fence_ring_emit, 16214cd92098Szrj .emit_semaphore = &r600_semaphore_ring_emit, 16224cd92098Szrj .cs_parse = &evergreen_cs_parse, 16234cd92098Szrj .ring_test = &r600_ring_test, 16244cd92098Szrj .ib_test = &r600_ib_test, 16254cd92098Szrj .is_lockup = &cayman_gfx_is_lockup, 16264cd92098Szrj .vm_flush = &cayman_vm_flush, 1627c6f73aabSFrançois Tigeot .get_rptr = &cayman_gfx_get_rptr, 1628c6f73aabSFrançois Tigeot .get_wptr = &cayman_gfx_get_wptr, 1629c6f73aabSFrançois Tigeot .set_wptr = &cayman_gfx_set_wptr, 16304cd92098Szrj }; 16314cd92098Szrj 1632ee479021SImre Vadász static struct radeon_asic_ring cayman_dma_ring = { 16334cd92098Szrj .ib_execute = &cayman_dma_ring_ib_execute, 16344cd92098Szrj .ib_parse = &evergreen_dma_ib_parse, 16354cd92098Szrj .emit_fence = &evergreen_dma_fence_ring_emit, 16364cd92098Szrj .emit_semaphore = &r600_dma_semaphore_ring_emit, 16374cd92098Szrj .cs_parse = &evergreen_dma_cs_parse, 16384cd92098Szrj .ring_test = &r600_dma_ring_test, 16394cd92098Szrj .ib_test = &r600_dma_ib_test, 16404cd92098Szrj .is_lockup = &cayman_dma_is_lockup, 16414cd92098Szrj .vm_flush = &cayman_dma_vm_flush, 1642c6f73aabSFrançois Tigeot .get_rptr = &cayman_dma_get_rptr, 1643c6f73aabSFrançois Tigeot .get_wptr = &cayman_dma_get_wptr, 1644c6f73aabSFrançois Tigeot .set_wptr = &cayman_dma_set_wptr 16454cd92098Szrj }; 16464cd92098Szrj 1647ee479021SImre Vadász static struct radeon_asic_ring cayman_uvd_ring = { 16484cd92098Szrj .ib_execute = &uvd_v1_0_ib_execute, 16494cd92098Szrj .emit_fence = &uvd_v2_2_fence_emit, 16504cd92098Szrj .emit_semaphore = &uvd_v3_1_semaphore_emit, 16514cd92098Szrj .cs_parse = &radeon_uvd_cs_parse, 16524cd92098Szrj .ring_test = &uvd_v1_0_ring_test, 16534cd92098Szrj .ib_test = &uvd_v1_0_ib_test, 16544cd92098Szrj .is_lockup = &radeon_ring_test_lockup, 16554cd92098Szrj .get_rptr = &uvd_v1_0_get_rptr, 16564cd92098Szrj .get_wptr = &uvd_v1_0_get_wptr, 16574cd92098Szrj .set_wptr = &uvd_v1_0_set_wptr, 16584cd92098Szrj }; 16594cd92098Szrj 1660926deccbSFrançois Tigeot static struct radeon_asic cayman_asic = { 1661926deccbSFrançois Tigeot .init = &cayman_init, 1662926deccbSFrançois Tigeot .fini = &cayman_fini, 1663926deccbSFrançois Tigeot .suspend = &cayman_suspend, 1664926deccbSFrançois Tigeot .resume = &cayman_resume, 1665926deccbSFrançois Tigeot .asic_reset = &cayman_asic_reset, 1666926deccbSFrançois Tigeot .vga_set_state = &r600_vga_set_state, 1667c6f73aabSFrançois Tigeot .mmio_hdp_flush = r600_mmio_hdp_flush, 1668926deccbSFrançois Tigeot .gui_idle = &r600_gui_idle, 1669926deccbSFrançois Tigeot .mc_wait_for_idle = &evergreen_mc_wait_for_idle, 1670b403bed8SMichael Neumann .get_xclk = &rv770_get_xclk, 1671b403bed8SMichael Neumann .get_gpu_clock_counter = &r600_get_gpu_clock_counter, 1672*c59a5c48SFrançois Tigeot .get_allowed_info_register = cayman_get_allowed_info_register, 1673926deccbSFrançois Tigeot .gart = { 1674926deccbSFrançois Tigeot .tlb_flush = &cayman_pcie_gart_tlb_flush, 16757dcf36dcSFrançois Tigeot .get_page_entry = &rs600_gart_get_page_entry, 1676926deccbSFrançois Tigeot .set_page = &rs600_gart_set_page, 1677926deccbSFrançois Tigeot }, 1678926deccbSFrançois Tigeot .vm = { 1679926deccbSFrançois Tigeot .init = &cayman_vm_init, 1680926deccbSFrançois Tigeot .fini = &cayman_vm_fini, 1681c6f73aabSFrançois Tigeot .copy_pages = &cayman_dma_vm_copy_pages, 1682c6f73aabSFrançois Tigeot .write_pages = &cayman_dma_vm_write_pages, 1683c6f73aabSFrançois Tigeot .set_pages = &cayman_dma_vm_set_pages, 1684c6f73aabSFrançois Tigeot .pad_ib = &cayman_dma_vm_pad_ib, 1685926deccbSFrançois Tigeot }, 1686926deccbSFrançois Tigeot .ring = { 16874cd92098Szrj [RADEON_RING_TYPE_GFX_INDEX] = &cayman_gfx_ring, 16884cd92098Szrj [CAYMAN_RING_TYPE_CP1_INDEX] = &cayman_gfx_ring, 16894cd92098Szrj [CAYMAN_RING_TYPE_CP2_INDEX] = &cayman_gfx_ring, 16904cd92098Szrj [R600_RING_TYPE_DMA_INDEX] = &cayman_dma_ring, 16914cd92098Szrj [CAYMAN_RING_TYPE_DMA1_INDEX] = &cayman_dma_ring, 16924cd92098Szrj [R600_RING_TYPE_UVD_INDEX] = &cayman_uvd_ring, 1693926deccbSFrançois Tigeot }, 1694926deccbSFrançois Tigeot .irq = { 1695926deccbSFrançois Tigeot .set = &evergreen_irq_set, 1696926deccbSFrançois Tigeot .process = &evergreen_irq_process, 1697926deccbSFrançois Tigeot }, 1698926deccbSFrançois Tigeot .display = { 1699926deccbSFrançois Tigeot .bandwidth_update = &evergreen_bandwidth_update, 1700926deccbSFrançois Tigeot .get_vblank_counter = &evergreen_get_vblank_counter, 1701926deccbSFrançois Tigeot .wait_for_vblank = &dce4_wait_for_vblank, 1702926deccbSFrançois Tigeot .set_backlight_level = &atombios_set_backlight_level, 1703926deccbSFrançois Tigeot .get_backlight_level = &atombios_get_backlight_level, 1704926deccbSFrançois Tigeot }, 1705926deccbSFrançois Tigeot .copy = { 17064cd92098Szrj .blit = &r600_copy_cpdma, 1707926deccbSFrançois Tigeot .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX, 1708926deccbSFrançois Tigeot .dma = &evergreen_copy_dma, 1709926deccbSFrançois Tigeot .dma_ring_index = R600_RING_TYPE_DMA_INDEX, 1710926deccbSFrançois Tigeot .copy = &evergreen_copy_dma, 1711926deccbSFrançois Tigeot .copy_ring_index = R600_RING_TYPE_DMA_INDEX, 1712926deccbSFrançois Tigeot }, 1713926deccbSFrançois Tigeot .surface = { 1714926deccbSFrançois Tigeot .set_reg = r600_set_surface_reg, 1715926deccbSFrançois Tigeot .clear_reg = r600_clear_surface_reg, 1716926deccbSFrançois Tigeot }, 1717926deccbSFrançois Tigeot .hpd = { 1718926deccbSFrançois Tigeot .init = &evergreen_hpd_init, 1719926deccbSFrançois Tigeot .fini = &evergreen_hpd_fini, 1720926deccbSFrançois Tigeot .sense = &evergreen_hpd_sense, 1721926deccbSFrançois Tigeot .set_polarity = &evergreen_hpd_set_polarity, 1722926deccbSFrançois Tigeot }, 1723926deccbSFrançois Tigeot .pm = { 1724926deccbSFrançois Tigeot .misc = &evergreen_pm_misc, 1725926deccbSFrançois Tigeot .prepare = &evergreen_pm_prepare, 1726926deccbSFrançois Tigeot .finish = &evergreen_pm_finish, 1727926deccbSFrançois Tigeot .init_profile = &btc_pm_init_profile, 1728926deccbSFrançois Tigeot .get_dynpm_state = &r600_pm_get_dynpm_state, 1729926deccbSFrançois Tigeot .get_engine_clock = &radeon_atom_get_engine_clock, 1730926deccbSFrançois Tigeot .set_engine_clock = &radeon_atom_set_engine_clock, 1731926deccbSFrançois Tigeot .get_memory_clock = &radeon_atom_get_memory_clock, 1732926deccbSFrançois Tigeot .set_memory_clock = &radeon_atom_set_memory_clock, 1733f43cf1b1SMichael Neumann .get_pcie_lanes = &r600_get_pcie_lanes, 1734f43cf1b1SMichael Neumann .set_pcie_lanes = &r600_set_pcie_lanes, 1735926deccbSFrançois Tigeot .set_clock_gating = NULL, 1736f43cf1b1SMichael Neumann .set_uvd_clocks = &evergreen_set_uvd_clocks, 173757e252bfSMichael Neumann .get_temperature = &evergreen_get_temp, 173857e252bfSMichael Neumann }, 173957e252bfSMichael Neumann .dpm = { 174057e252bfSMichael Neumann .init = &ni_dpm_init, 174157e252bfSMichael Neumann .setup_asic = &ni_dpm_setup_asic, 174257e252bfSMichael Neumann .enable = &ni_dpm_enable, 1743c6f73aabSFrançois Tigeot .late_enable = &rv770_dpm_late_enable, 174457e252bfSMichael Neumann .disable = &ni_dpm_disable, 174557e252bfSMichael Neumann .pre_set_power_state = &ni_dpm_pre_set_power_state, 174657e252bfSMichael Neumann .set_power_state = &ni_dpm_set_power_state, 174757e252bfSMichael Neumann .post_set_power_state = &ni_dpm_post_set_power_state, 174857e252bfSMichael Neumann .display_configuration_changed = &cypress_dpm_display_configuration_changed, 174957e252bfSMichael Neumann .fini = &ni_dpm_fini, 175057e252bfSMichael Neumann .get_sclk = &ni_dpm_get_sclk, 175157e252bfSMichael Neumann .get_mclk = &ni_dpm_get_mclk, 175257e252bfSMichael Neumann .print_power_state = &ni_dpm_print_power_state, 175357e252bfSMichael Neumann .debugfs_print_current_performance_level = &ni_dpm_debugfs_print_current_performance_level, 175457e252bfSMichael Neumann .force_performance_level = &ni_dpm_force_performance_level, 175557e252bfSMichael Neumann .vblank_too_short = &ni_dpm_vblank_too_short, 1756*c59a5c48SFrançois Tigeot .get_current_sclk = &ni_dpm_get_current_sclk, 1757*c59a5c48SFrançois Tigeot .get_current_mclk = &ni_dpm_get_current_mclk, 1758926deccbSFrançois Tigeot }, 1759926deccbSFrançois Tigeot .pflip = { 1760926deccbSFrançois Tigeot .page_flip = &evergreen_page_flip, 1761c6f73aabSFrançois Tigeot .page_flip_pending = &evergreen_page_flip_pending, 1762926deccbSFrançois Tigeot }, 1763926deccbSFrançois Tigeot }; 1764926deccbSFrançois Tigeot 1765*c59a5c48SFrançois Tigeot static struct radeon_asic_ring trinity_vce_ring = { 1766*c59a5c48SFrançois Tigeot .ib_execute = &radeon_vce_ib_execute, 1767*c59a5c48SFrançois Tigeot .emit_fence = &radeon_vce_fence_emit, 1768*c59a5c48SFrançois Tigeot .emit_semaphore = &radeon_vce_semaphore_emit, 1769*c59a5c48SFrançois Tigeot .cs_parse = &radeon_vce_cs_parse, 1770*c59a5c48SFrançois Tigeot .ring_test = &radeon_vce_ring_test, 1771*c59a5c48SFrançois Tigeot .ib_test = &radeon_vce_ib_test, 1772*c59a5c48SFrançois Tigeot .is_lockup = &radeon_ring_test_lockup, 1773*c59a5c48SFrançois Tigeot .get_rptr = &vce_v1_0_get_rptr, 1774*c59a5c48SFrançois Tigeot .get_wptr = &vce_v1_0_get_wptr, 1775*c59a5c48SFrançois Tigeot .set_wptr = &vce_v1_0_set_wptr, 1776*c59a5c48SFrançois Tigeot }; 1777*c59a5c48SFrançois Tigeot 1778926deccbSFrançois Tigeot static struct radeon_asic trinity_asic = { 1779926deccbSFrançois Tigeot .init = &cayman_init, 1780926deccbSFrançois Tigeot .fini = &cayman_fini, 1781926deccbSFrançois Tigeot .suspend = &cayman_suspend, 1782926deccbSFrançois Tigeot .resume = &cayman_resume, 1783926deccbSFrançois Tigeot .asic_reset = &cayman_asic_reset, 1784926deccbSFrançois Tigeot .vga_set_state = &r600_vga_set_state, 1785c6f73aabSFrançois Tigeot .mmio_hdp_flush = r600_mmio_hdp_flush, 1786926deccbSFrançois Tigeot .gui_idle = &r600_gui_idle, 1787926deccbSFrançois Tigeot .mc_wait_for_idle = &evergreen_mc_wait_for_idle, 1788b403bed8SMichael Neumann .get_xclk = &r600_get_xclk, 1789b403bed8SMichael Neumann .get_gpu_clock_counter = &r600_get_gpu_clock_counter, 1790*c59a5c48SFrançois Tigeot .get_allowed_info_register = cayman_get_allowed_info_register, 1791926deccbSFrançois Tigeot .gart = { 1792926deccbSFrançois Tigeot .tlb_flush = &cayman_pcie_gart_tlb_flush, 17937dcf36dcSFrançois Tigeot .get_page_entry = &rs600_gart_get_page_entry, 1794926deccbSFrançois Tigeot .set_page = &rs600_gart_set_page, 1795926deccbSFrançois Tigeot }, 1796926deccbSFrançois Tigeot .vm = { 1797926deccbSFrançois Tigeot .init = &cayman_vm_init, 1798926deccbSFrançois Tigeot .fini = &cayman_vm_fini, 1799c6f73aabSFrançois Tigeot .copy_pages = &cayman_dma_vm_copy_pages, 1800c6f73aabSFrançois Tigeot .write_pages = &cayman_dma_vm_write_pages, 1801c6f73aabSFrançois Tigeot .set_pages = &cayman_dma_vm_set_pages, 1802c6f73aabSFrançois Tigeot .pad_ib = &cayman_dma_vm_pad_ib, 1803926deccbSFrançois Tigeot }, 1804926deccbSFrançois Tigeot .ring = { 18054cd92098Szrj [RADEON_RING_TYPE_GFX_INDEX] = &cayman_gfx_ring, 18064cd92098Szrj [CAYMAN_RING_TYPE_CP1_INDEX] = &cayman_gfx_ring, 18074cd92098Szrj [CAYMAN_RING_TYPE_CP2_INDEX] = &cayman_gfx_ring, 18084cd92098Szrj [R600_RING_TYPE_DMA_INDEX] = &cayman_dma_ring, 18094cd92098Szrj [CAYMAN_RING_TYPE_DMA1_INDEX] = &cayman_dma_ring, 18104cd92098Szrj [R600_RING_TYPE_UVD_INDEX] = &cayman_uvd_ring, 1811*c59a5c48SFrançois Tigeot [TN_RING_TYPE_VCE1_INDEX] = &trinity_vce_ring, 1812*c59a5c48SFrançois Tigeot [TN_RING_TYPE_VCE2_INDEX] = &trinity_vce_ring, 1813926deccbSFrançois Tigeot }, 1814926deccbSFrançois Tigeot .irq = { 1815926deccbSFrançois Tigeot .set = &evergreen_irq_set, 1816926deccbSFrançois Tigeot .process = &evergreen_irq_process, 1817926deccbSFrançois Tigeot }, 1818926deccbSFrançois Tigeot .display = { 1819926deccbSFrançois Tigeot .bandwidth_update = &dce6_bandwidth_update, 1820926deccbSFrançois Tigeot .get_vblank_counter = &evergreen_get_vblank_counter, 1821926deccbSFrançois Tigeot .wait_for_vblank = &dce4_wait_for_vblank, 1822926deccbSFrançois Tigeot .set_backlight_level = &atombios_set_backlight_level, 1823926deccbSFrançois Tigeot .get_backlight_level = &atombios_get_backlight_level, 1824926deccbSFrançois Tigeot }, 1825926deccbSFrançois Tigeot .copy = { 18264cd92098Szrj .blit = &r600_copy_cpdma, 1827926deccbSFrançois Tigeot .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX, 1828926deccbSFrançois Tigeot .dma = &evergreen_copy_dma, 1829926deccbSFrançois Tigeot .dma_ring_index = R600_RING_TYPE_DMA_INDEX, 1830926deccbSFrançois Tigeot .copy = &evergreen_copy_dma, 1831926deccbSFrançois Tigeot .copy_ring_index = R600_RING_TYPE_DMA_INDEX, 1832926deccbSFrançois Tigeot }, 1833926deccbSFrançois Tigeot .surface = { 1834926deccbSFrançois Tigeot .set_reg = r600_set_surface_reg, 1835926deccbSFrançois Tigeot .clear_reg = r600_clear_surface_reg, 1836926deccbSFrançois Tigeot }, 1837926deccbSFrançois Tigeot .hpd = { 1838926deccbSFrançois Tigeot .init = &evergreen_hpd_init, 1839926deccbSFrançois Tigeot .fini = &evergreen_hpd_fini, 1840926deccbSFrançois Tigeot .sense = &evergreen_hpd_sense, 1841926deccbSFrançois Tigeot .set_polarity = &evergreen_hpd_set_polarity, 1842926deccbSFrançois Tigeot }, 1843926deccbSFrançois Tigeot .pm = { 1844926deccbSFrançois Tigeot .misc = &evergreen_pm_misc, 1845926deccbSFrançois Tigeot .prepare = &evergreen_pm_prepare, 1846926deccbSFrançois Tigeot .finish = &evergreen_pm_finish, 1847926deccbSFrançois Tigeot .init_profile = &sumo_pm_init_profile, 1848926deccbSFrançois Tigeot .get_dynpm_state = &r600_pm_get_dynpm_state, 1849926deccbSFrançois Tigeot .get_engine_clock = &radeon_atom_get_engine_clock, 1850926deccbSFrançois Tigeot .set_engine_clock = &radeon_atom_set_engine_clock, 1851926deccbSFrançois Tigeot .get_memory_clock = NULL, 1852926deccbSFrançois Tigeot .set_memory_clock = NULL, 1853926deccbSFrançois Tigeot .get_pcie_lanes = NULL, 1854926deccbSFrançois Tigeot .set_pcie_lanes = NULL, 1855926deccbSFrançois Tigeot .set_clock_gating = NULL, 1856f43cf1b1SMichael Neumann .set_uvd_clocks = &sumo_set_uvd_clocks, 1857*c59a5c48SFrançois Tigeot .set_vce_clocks = &tn_set_vce_clocks, 185857e252bfSMichael Neumann .get_temperature = &tn_get_temp, 185957e252bfSMichael Neumann }, 186057e252bfSMichael Neumann .dpm = { 186157e252bfSMichael Neumann .init = &trinity_dpm_init, 186257e252bfSMichael Neumann .setup_asic = &trinity_dpm_setup_asic, 186357e252bfSMichael Neumann .enable = &trinity_dpm_enable, 1864c6f73aabSFrançois Tigeot .late_enable = &trinity_dpm_late_enable, 186557e252bfSMichael Neumann .disable = &trinity_dpm_disable, 186657e252bfSMichael Neumann .pre_set_power_state = &trinity_dpm_pre_set_power_state, 186757e252bfSMichael Neumann .set_power_state = &trinity_dpm_set_power_state, 186857e252bfSMichael Neumann .post_set_power_state = &trinity_dpm_post_set_power_state, 186957e252bfSMichael Neumann .display_configuration_changed = &trinity_dpm_display_configuration_changed, 187057e252bfSMichael Neumann .fini = &trinity_dpm_fini, 187157e252bfSMichael Neumann .get_sclk = &trinity_dpm_get_sclk, 187257e252bfSMichael Neumann .get_mclk = &trinity_dpm_get_mclk, 187357e252bfSMichael Neumann .print_power_state = &trinity_dpm_print_power_state, 187457e252bfSMichael Neumann .debugfs_print_current_performance_level = &trinity_dpm_debugfs_print_current_performance_level, 187557e252bfSMichael Neumann .force_performance_level = &trinity_dpm_force_performance_level, 18764cd92098Szrj .enable_bapm = &trinity_dpm_enable_bapm, 1877*c59a5c48SFrançois Tigeot .get_current_sclk = &trinity_dpm_get_current_sclk, 1878*c59a5c48SFrançois Tigeot .get_current_mclk = &trinity_dpm_get_current_mclk, 1879926deccbSFrançois Tigeot }, 1880926deccbSFrançois Tigeot .pflip = { 1881926deccbSFrançois Tigeot .page_flip = &evergreen_page_flip, 1882c6f73aabSFrançois Tigeot .page_flip_pending = &evergreen_page_flip_pending, 1883926deccbSFrançois Tigeot }, 1884926deccbSFrançois Tigeot }; 1885926deccbSFrançois Tigeot 1886ee479021SImre Vadász static struct radeon_asic_ring si_gfx_ring = { 18874cd92098Szrj .ib_execute = &si_ring_ib_execute, 18884cd92098Szrj .ib_parse = &si_ib_parse, 18894cd92098Szrj .emit_fence = &si_fence_ring_emit, 18904cd92098Szrj .emit_semaphore = &r600_semaphore_ring_emit, 18914cd92098Szrj .cs_parse = NULL, 18924cd92098Szrj .ring_test = &r600_ring_test, 18934cd92098Szrj .ib_test = &r600_ib_test, 18944cd92098Szrj .is_lockup = &si_gfx_is_lockup, 18954cd92098Szrj .vm_flush = &si_vm_flush, 1896c6f73aabSFrançois Tigeot .get_rptr = &cayman_gfx_get_rptr, 1897c6f73aabSFrançois Tigeot .get_wptr = &cayman_gfx_get_wptr, 1898c6f73aabSFrançois Tigeot .set_wptr = &cayman_gfx_set_wptr, 18994cd92098Szrj }; 19004cd92098Szrj 1901ee479021SImre Vadász static struct radeon_asic_ring si_dma_ring = { 19024cd92098Szrj .ib_execute = &cayman_dma_ring_ib_execute, 19034cd92098Szrj .ib_parse = &evergreen_dma_ib_parse, 19044cd92098Szrj .emit_fence = &evergreen_dma_fence_ring_emit, 19054cd92098Szrj .emit_semaphore = &r600_dma_semaphore_ring_emit, 19064cd92098Szrj .cs_parse = NULL, 19074cd92098Szrj .ring_test = &r600_dma_ring_test, 19084cd92098Szrj .ib_test = &r600_dma_ib_test, 19094cd92098Szrj .is_lockup = &si_dma_is_lockup, 19104cd92098Szrj .vm_flush = &si_dma_vm_flush, 1911c6f73aabSFrançois Tigeot .get_rptr = &cayman_dma_get_rptr, 1912c6f73aabSFrançois Tigeot .get_wptr = &cayman_dma_get_wptr, 1913c6f73aabSFrançois Tigeot .set_wptr = &cayman_dma_set_wptr, 19144cd92098Szrj }; 19154cd92098Szrj 1916926deccbSFrançois Tigeot static struct radeon_asic si_asic = { 1917926deccbSFrançois Tigeot .init = &si_init, 1918926deccbSFrançois Tigeot .fini = &si_fini, 1919926deccbSFrançois Tigeot .suspend = &si_suspend, 1920926deccbSFrançois Tigeot .resume = &si_resume, 1921926deccbSFrançois Tigeot .asic_reset = &si_asic_reset, 1922926deccbSFrançois Tigeot .vga_set_state = &r600_vga_set_state, 1923c6f73aabSFrançois Tigeot .mmio_hdp_flush = r600_mmio_hdp_flush, 1924926deccbSFrançois Tigeot .gui_idle = &r600_gui_idle, 1925926deccbSFrançois Tigeot .mc_wait_for_idle = &evergreen_mc_wait_for_idle, 1926b403bed8SMichael Neumann .get_xclk = &si_get_xclk, 1927b403bed8SMichael Neumann .get_gpu_clock_counter = &si_get_gpu_clock_counter, 1928*c59a5c48SFrançois Tigeot .get_allowed_info_register = si_get_allowed_info_register, 1929926deccbSFrançois Tigeot .gart = { 1930926deccbSFrançois Tigeot .tlb_flush = &si_pcie_gart_tlb_flush, 19317dcf36dcSFrançois Tigeot .get_page_entry = &rs600_gart_get_page_entry, 1932926deccbSFrançois Tigeot .set_page = &rs600_gart_set_page, 1933926deccbSFrançois Tigeot }, 1934926deccbSFrançois Tigeot .vm = { 1935926deccbSFrançois Tigeot .init = &si_vm_init, 1936926deccbSFrançois Tigeot .fini = &si_vm_fini, 1937c6f73aabSFrançois Tigeot .copy_pages = &si_dma_vm_copy_pages, 1938c6f73aabSFrançois Tigeot .write_pages = &si_dma_vm_write_pages, 1939c6f73aabSFrançois Tigeot .set_pages = &si_dma_vm_set_pages, 1940c6f73aabSFrançois Tigeot .pad_ib = &cayman_dma_vm_pad_ib, 1941926deccbSFrançois Tigeot }, 1942926deccbSFrançois Tigeot .ring = { 19434cd92098Szrj [RADEON_RING_TYPE_GFX_INDEX] = &si_gfx_ring, 19444cd92098Szrj [CAYMAN_RING_TYPE_CP1_INDEX] = &si_gfx_ring, 19454cd92098Szrj [CAYMAN_RING_TYPE_CP2_INDEX] = &si_gfx_ring, 19464cd92098Szrj [R600_RING_TYPE_DMA_INDEX] = &si_dma_ring, 19474cd92098Szrj [CAYMAN_RING_TYPE_DMA1_INDEX] = &si_dma_ring, 19484cd92098Szrj [R600_RING_TYPE_UVD_INDEX] = &cayman_uvd_ring, 1949*c59a5c48SFrançois Tigeot [TN_RING_TYPE_VCE1_INDEX] = &trinity_vce_ring, 1950*c59a5c48SFrançois Tigeot [TN_RING_TYPE_VCE2_INDEX] = &trinity_vce_ring, 1951926deccbSFrançois Tigeot }, 1952926deccbSFrançois Tigeot .irq = { 1953926deccbSFrançois Tigeot .set = &si_irq_set, 1954926deccbSFrançois Tigeot .process = &si_irq_process, 1955926deccbSFrançois Tigeot }, 1956926deccbSFrançois Tigeot .display = { 1957926deccbSFrançois Tigeot .bandwidth_update = &dce6_bandwidth_update, 1958926deccbSFrançois Tigeot .get_vblank_counter = &evergreen_get_vblank_counter, 1959926deccbSFrançois Tigeot .wait_for_vblank = &dce4_wait_for_vblank, 1960926deccbSFrançois Tigeot .set_backlight_level = &atombios_set_backlight_level, 1961926deccbSFrançois Tigeot .get_backlight_level = &atombios_get_backlight_level, 1962926deccbSFrançois Tigeot }, 1963926deccbSFrançois Tigeot .copy = { 1964c6f73aabSFrançois Tigeot .blit = &r600_copy_cpdma, 1965926deccbSFrançois Tigeot .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX, 1966926deccbSFrançois Tigeot .dma = &si_copy_dma, 1967926deccbSFrançois Tigeot .dma_ring_index = R600_RING_TYPE_DMA_INDEX, 1968926deccbSFrançois Tigeot .copy = &si_copy_dma, 1969926deccbSFrançois Tigeot .copy_ring_index = R600_RING_TYPE_DMA_INDEX, 1970926deccbSFrançois Tigeot }, 1971926deccbSFrançois Tigeot .surface = { 1972926deccbSFrançois Tigeot .set_reg = r600_set_surface_reg, 1973926deccbSFrançois Tigeot .clear_reg = r600_clear_surface_reg, 1974926deccbSFrançois Tigeot }, 1975926deccbSFrançois Tigeot .hpd = { 1976926deccbSFrançois Tigeot .init = &evergreen_hpd_init, 1977926deccbSFrançois Tigeot .fini = &evergreen_hpd_fini, 1978926deccbSFrançois Tigeot .sense = &evergreen_hpd_sense, 1979926deccbSFrançois Tigeot .set_polarity = &evergreen_hpd_set_polarity, 1980926deccbSFrançois Tigeot }, 1981926deccbSFrançois Tigeot .pm = { 1982926deccbSFrançois Tigeot .misc = &evergreen_pm_misc, 1983926deccbSFrançois Tigeot .prepare = &evergreen_pm_prepare, 1984926deccbSFrançois Tigeot .finish = &evergreen_pm_finish, 1985926deccbSFrançois Tigeot .init_profile = &sumo_pm_init_profile, 1986926deccbSFrançois Tigeot .get_dynpm_state = &r600_pm_get_dynpm_state, 1987926deccbSFrançois Tigeot .get_engine_clock = &radeon_atom_get_engine_clock, 1988926deccbSFrançois Tigeot .set_engine_clock = &radeon_atom_set_engine_clock, 1989926deccbSFrançois Tigeot .get_memory_clock = &radeon_atom_get_memory_clock, 1990926deccbSFrançois Tigeot .set_memory_clock = &radeon_atom_set_memory_clock, 1991f43cf1b1SMichael Neumann .get_pcie_lanes = &r600_get_pcie_lanes, 1992f43cf1b1SMichael Neumann .set_pcie_lanes = &r600_set_pcie_lanes, 1993926deccbSFrançois Tigeot .set_clock_gating = NULL, 1994f43cf1b1SMichael Neumann .set_uvd_clocks = &si_set_uvd_clocks, 1995*c59a5c48SFrançois Tigeot .set_vce_clocks = &si_set_vce_clocks, 199657e252bfSMichael Neumann .get_temperature = &si_get_temp, 199757e252bfSMichael Neumann }, 199857e252bfSMichael Neumann .dpm = { 199957e252bfSMichael Neumann .init = &si_dpm_init, 200057e252bfSMichael Neumann .setup_asic = &si_dpm_setup_asic, 200157e252bfSMichael Neumann .enable = &si_dpm_enable, 2002c6f73aabSFrançois Tigeot .late_enable = &si_dpm_late_enable, 200357e252bfSMichael Neumann .disable = &si_dpm_disable, 200457e252bfSMichael Neumann .pre_set_power_state = &si_dpm_pre_set_power_state, 200557e252bfSMichael Neumann .set_power_state = &si_dpm_set_power_state, 200657e252bfSMichael Neumann .post_set_power_state = &si_dpm_post_set_power_state, 200757e252bfSMichael Neumann .display_configuration_changed = &si_dpm_display_configuration_changed, 200857e252bfSMichael Neumann .fini = &si_dpm_fini, 200957e252bfSMichael Neumann .get_sclk = &ni_dpm_get_sclk, 201057e252bfSMichael Neumann .get_mclk = &ni_dpm_get_mclk, 201157e252bfSMichael Neumann .print_power_state = &ni_dpm_print_power_state, 201257e252bfSMichael Neumann .debugfs_print_current_performance_level = &si_dpm_debugfs_print_current_performance_level, 201357e252bfSMichael Neumann .force_performance_level = &si_dpm_force_performance_level, 201457e252bfSMichael Neumann .vblank_too_short = &ni_dpm_vblank_too_short, 2015*c59a5c48SFrançois Tigeot .fan_ctrl_set_mode = &si_fan_ctrl_set_mode, 2016*c59a5c48SFrançois Tigeot .fan_ctrl_get_mode = &si_fan_ctrl_get_mode, 2017*c59a5c48SFrançois Tigeot .get_fan_speed_percent = &si_fan_ctrl_get_fan_speed_percent, 2018*c59a5c48SFrançois Tigeot .set_fan_speed_percent = &si_fan_ctrl_set_fan_speed_percent, 2019*c59a5c48SFrançois Tigeot .get_current_sclk = &si_dpm_get_current_sclk, 2020*c59a5c48SFrançois Tigeot .get_current_mclk = &si_dpm_get_current_mclk, 202157e252bfSMichael Neumann }, 202257e252bfSMichael Neumann .pflip = { 202357e252bfSMichael Neumann .page_flip = &evergreen_page_flip, 2024c6f73aabSFrançois Tigeot .page_flip_pending = &evergreen_page_flip_pending, 202557e252bfSMichael Neumann }, 202657e252bfSMichael Neumann }; 202757e252bfSMichael Neumann 2028ee479021SImre Vadász static struct radeon_asic_ring ci_gfx_ring = { 20294cd92098Szrj .ib_execute = &cik_ring_ib_execute, 20304cd92098Szrj .ib_parse = &cik_ib_parse, 20314cd92098Szrj .emit_fence = &cik_fence_gfx_ring_emit, 20324cd92098Szrj .emit_semaphore = &cik_semaphore_ring_emit, 20334cd92098Szrj .cs_parse = NULL, 20344cd92098Szrj .ring_test = &cik_ring_test, 20354cd92098Szrj .ib_test = &cik_ib_test, 20364cd92098Szrj .is_lockup = &cik_gfx_is_lockup, 20374cd92098Szrj .vm_flush = &cik_vm_flush, 2038c6f73aabSFrançois Tigeot .get_rptr = &cik_gfx_get_rptr, 2039c6f73aabSFrançois Tigeot .get_wptr = &cik_gfx_get_wptr, 2040c6f73aabSFrançois Tigeot .set_wptr = &cik_gfx_set_wptr, 20414cd92098Szrj }; 20424cd92098Szrj 2043ee479021SImre Vadász static struct radeon_asic_ring ci_cp_ring = { 20444cd92098Szrj .ib_execute = &cik_ring_ib_execute, 20454cd92098Szrj .ib_parse = &cik_ib_parse, 20464cd92098Szrj .emit_fence = &cik_fence_compute_ring_emit, 20474cd92098Szrj .emit_semaphore = &cik_semaphore_ring_emit, 20484cd92098Szrj .cs_parse = NULL, 20494cd92098Szrj .ring_test = &cik_ring_test, 20504cd92098Szrj .ib_test = &cik_ib_test, 20514cd92098Szrj .is_lockup = &cik_gfx_is_lockup, 20524cd92098Szrj .vm_flush = &cik_vm_flush, 2053c6f73aabSFrançois Tigeot .get_rptr = &cik_compute_get_rptr, 2054c6f73aabSFrançois Tigeot .get_wptr = &cik_compute_get_wptr, 2055c6f73aabSFrançois Tigeot .set_wptr = &cik_compute_set_wptr, 20564cd92098Szrj }; 20574cd92098Szrj 2058ee479021SImre Vadász static struct radeon_asic_ring ci_dma_ring = { 20594cd92098Szrj .ib_execute = &cik_sdma_ring_ib_execute, 20604cd92098Szrj .ib_parse = &cik_ib_parse, 20614cd92098Szrj .emit_fence = &cik_sdma_fence_ring_emit, 20624cd92098Szrj .emit_semaphore = &cik_sdma_semaphore_ring_emit, 20634cd92098Szrj .cs_parse = NULL, 20644cd92098Szrj .ring_test = &cik_sdma_ring_test, 20654cd92098Szrj .ib_test = &cik_sdma_ib_test, 20664cd92098Szrj .is_lockup = &cik_sdma_is_lockup, 20674cd92098Szrj .vm_flush = &cik_dma_vm_flush, 2068c6f73aabSFrançois Tigeot .get_rptr = &cik_sdma_get_rptr, 2069c6f73aabSFrançois Tigeot .get_wptr = &cik_sdma_get_wptr, 2070c6f73aabSFrançois Tigeot .set_wptr = &cik_sdma_set_wptr, 2071c6f73aabSFrançois Tigeot }; 2072c6f73aabSFrançois Tigeot 2073ee479021SImre Vadász static struct radeon_asic_ring ci_vce_ring = { 2074c6f73aabSFrançois Tigeot .ib_execute = &radeon_vce_ib_execute, 2075c6f73aabSFrançois Tigeot .emit_fence = &radeon_vce_fence_emit, 2076c6f73aabSFrançois Tigeot .emit_semaphore = &radeon_vce_semaphore_emit, 2077c6f73aabSFrançois Tigeot .cs_parse = &radeon_vce_cs_parse, 2078c6f73aabSFrançois Tigeot .ring_test = &radeon_vce_ring_test, 2079c6f73aabSFrançois Tigeot .ib_test = &radeon_vce_ib_test, 2080c6f73aabSFrançois Tigeot .is_lockup = &radeon_ring_test_lockup, 2081c6f73aabSFrançois Tigeot .get_rptr = &vce_v1_0_get_rptr, 2082c6f73aabSFrançois Tigeot .get_wptr = &vce_v1_0_get_wptr, 2083c6f73aabSFrançois Tigeot .set_wptr = &vce_v1_0_set_wptr, 20844cd92098Szrj }; 20854cd92098Szrj 208657e252bfSMichael Neumann static struct radeon_asic ci_asic = { 208757e252bfSMichael Neumann .init = &cik_init, 208857e252bfSMichael Neumann .fini = &cik_fini, 208957e252bfSMichael Neumann .suspend = &cik_suspend, 209057e252bfSMichael Neumann .resume = &cik_resume, 209157e252bfSMichael Neumann .asic_reset = &cik_asic_reset, 209257e252bfSMichael Neumann .vga_set_state = &r600_vga_set_state, 2093c6f73aabSFrançois Tigeot .mmio_hdp_flush = &r600_mmio_hdp_flush, 209457e252bfSMichael Neumann .gui_idle = &r600_gui_idle, 209557e252bfSMichael Neumann .mc_wait_for_idle = &evergreen_mc_wait_for_idle, 209657e252bfSMichael Neumann .get_xclk = &cik_get_xclk, 209757e252bfSMichael Neumann .get_gpu_clock_counter = &cik_get_gpu_clock_counter, 2098*c59a5c48SFrançois Tigeot .get_allowed_info_register = cik_get_allowed_info_register, 209957e252bfSMichael Neumann .gart = { 210057e252bfSMichael Neumann .tlb_flush = &cik_pcie_gart_tlb_flush, 21017dcf36dcSFrançois Tigeot .get_page_entry = &rs600_gart_get_page_entry, 210257e252bfSMichael Neumann .set_page = &rs600_gart_set_page, 210357e252bfSMichael Neumann }, 210457e252bfSMichael Neumann .vm = { 210557e252bfSMichael Neumann .init = &cik_vm_init, 210657e252bfSMichael Neumann .fini = &cik_vm_fini, 2107c6f73aabSFrançois Tigeot .copy_pages = &cik_sdma_vm_copy_pages, 2108c6f73aabSFrançois Tigeot .write_pages = &cik_sdma_vm_write_pages, 2109c6f73aabSFrançois Tigeot .set_pages = &cik_sdma_vm_set_pages, 2110c6f73aabSFrançois Tigeot .pad_ib = &cik_sdma_vm_pad_ib, 211157e252bfSMichael Neumann }, 211257e252bfSMichael Neumann .ring = { 21134cd92098Szrj [RADEON_RING_TYPE_GFX_INDEX] = &ci_gfx_ring, 21144cd92098Szrj [CAYMAN_RING_TYPE_CP1_INDEX] = &ci_cp_ring, 21154cd92098Szrj [CAYMAN_RING_TYPE_CP2_INDEX] = &ci_cp_ring, 21164cd92098Szrj [R600_RING_TYPE_DMA_INDEX] = &ci_dma_ring, 21174cd92098Szrj [CAYMAN_RING_TYPE_DMA1_INDEX] = &ci_dma_ring, 21184cd92098Szrj [R600_RING_TYPE_UVD_INDEX] = &cayman_uvd_ring, 2119c6f73aabSFrançois Tigeot [TN_RING_TYPE_VCE1_INDEX] = &ci_vce_ring, 2120c6f73aabSFrançois Tigeot [TN_RING_TYPE_VCE2_INDEX] = &ci_vce_ring, 212157e252bfSMichael Neumann }, 212257e252bfSMichael Neumann .irq = { 212357e252bfSMichael Neumann .set = &cik_irq_set, 212457e252bfSMichael Neumann .process = &cik_irq_process, 212557e252bfSMichael Neumann }, 212657e252bfSMichael Neumann .display = { 212757e252bfSMichael Neumann .bandwidth_update = &dce8_bandwidth_update, 212857e252bfSMichael Neumann .get_vblank_counter = &evergreen_get_vblank_counter, 212957e252bfSMichael Neumann .wait_for_vblank = &dce4_wait_for_vblank, 2130c6f73aabSFrançois Tigeot .set_backlight_level = &atombios_set_backlight_level, 2131c6f73aabSFrançois Tigeot .get_backlight_level = &atombios_get_backlight_level, 213257e252bfSMichael Neumann }, 213357e252bfSMichael Neumann .copy = { 2134c6f73aabSFrançois Tigeot .blit = &cik_copy_cpdma, 213557e252bfSMichael Neumann .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX, 213657e252bfSMichael Neumann .dma = &cik_copy_dma, 213757e252bfSMichael Neumann .dma_ring_index = R600_RING_TYPE_DMA_INDEX, 213857e252bfSMichael Neumann .copy = &cik_copy_dma, 213957e252bfSMichael Neumann .copy_ring_index = R600_RING_TYPE_DMA_INDEX, 214057e252bfSMichael Neumann }, 214157e252bfSMichael Neumann .surface = { 214257e252bfSMichael Neumann .set_reg = r600_set_surface_reg, 214357e252bfSMichael Neumann .clear_reg = r600_clear_surface_reg, 214457e252bfSMichael Neumann }, 214557e252bfSMichael Neumann .hpd = { 214657e252bfSMichael Neumann .init = &evergreen_hpd_init, 214757e252bfSMichael Neumann .fini = &evergreen_hpd_fini, 214857e252bfSMichael Neumann .sense = &evergreen_hpd_sense, 214957e252bfSMichael Neumann .set_polarity = &evergreen_hpd_set_polarity, 215057e252bfSMichael Neumann }, 215157e252bfSMichael Neumann .pm = { 215257e252bfSMichael Neumann .misc = &evergreen_pm_misc, 215357e252bfSMichael Neumann .prepare = &evergreen_pm_prepare, 215457e252bfSMichael Neumann .finish = &evergreen_pm_finish, 215557e252bfSMichael Neumann .init_profile = &sumo_pm_init_profile, 215657e252bfSMichael Neumann .get_dynpm_state = &r600_pm_get_dynpm_state, 215757e252bfSMichael Neumann .get_engine_clock = &radeon_atom_get_engine_clock, 215857e252bfSMichael Neumann .set_engine_clock = &radeon_atom_set_engine_clock, 215957e252bfSMichael Neumann .get_memory_clock = &radeon_atom_get_memory_clock, 216057e252bfSMichael Neumann .set_memory_clock = &radeon_atom_set_memory_clock, 216157e252bfSMichael Neumann .get_pcie_lanes = NULL, 216257e252bfSMichael Neumann .set_pcie_lanes = NULL, 216357e252bfSMichael Neumann .set_clock_gating = NULL, 216457e252bfSMichael Neumann .set_uvd_clocks = &cik_set_uvd_clocks, 2165c6f73aabSFrançois Tigeot .set_vce_clocks = &cik_set_vce_clocks, 21664cd92098Szrj .get_temperature = &ci_get_temp, 21674cd92098Szrj }, 21684cd92098Szrj .dpm = { 21694cd92098Szrj .init = &ci_dpm_init, 21704cd92098Szrj .setup_asic = &ci_dpm_setup_asic, 21714cd92098Szrj .enable = &ci_dpm_enable, 2172c6f73aabSFrançois Tigeot .late_enable = &ci_dpm_late_enable, 21734cd92098Szrj .disable = &ci_dpm_disable, 21744cd92098Szrj .pre_set_power_state = &ci_dpm_pre_set_power_state, 21754cd92098Szrj .set_power_state = &ci_dpm_set_power_state, 21764cd92098Szrj .post_set_power_state = &ci_dpm_post_set_power_state, 21774cd92098Szrj .display_configuration_changed = &ci_dpm_display_configuration_changed, 21784cd92098Szrj .fini = &ci_dpm_fini, 21794cd92098Szrj .get_sclk = &ci_dpm_get_sclk, 21804cd92098Szrj .get_mclk = &ci_dpm_get_mclk, 21814cd92098Szrj .print_power_state = &ci_dpm_print_power_state, 21824cd92098Szrj .debugfs_print_current_performance_level = &ci_dpm_debugfs_print_current_performance_level, 21834cd92098Szrj .force_performance_level = &ci_dpm_force_performance_level, 21844cd92098Szrj .vblank_too_short = &ci_dpm_vblank_too_short, 21854cd92098Szrj .powergate_uvd = &ci_dpm_powergate_uvd, 2186*c59a5c48SFrançois Tigeot .fan_ctrl_set_mode = &ci_fan_ctrl_set_mode, 2187*c59a5c48SFrançois Tigeot .fan_ctrl_get_mode = &ci_fan_ctrl_get_mode, 2188*c59a5c48SFrançois Tigeot .get_fan_speed_percent = &ci_fan_ctrl_get_fan_speed_percent, 2189*c59a5c48SFrançois Tigeot .set_fan_speed_percent = &ci_fan_ctrl_set_fan_speed_percent, 2190*c59a5c48SFrançois Tigeot .get_current_sclk = &ci_dpm_get_current_sclk, 2191*c59a5c48SFrançois Tigeot .get_current_mclk = &ci_dpm_get_current_mclk, 219257e252bfSMichael Neumann }, 219357e252bfSMichael Neumann .pflip = { 219457e252bfSMichael Neumann .page_flip = &evergreen_page_flip, 2195c6f73aabSFrançois Tigeot .page_flip_pending = &evergreen_page_flip_pending, 219657e252bfSMichael Neumann }, 219757e252bfSMichael Neumann }; 219857e252bfSMichael Neumann 219957e252bfSMichael Neumann static struct radeon_asic kv_asic = { 220057e252bfSMichael Neumann .init = &cik_init, 220157e252bfSMichael Neumann .fini = &cik_fini, 220257e252bfSMichael Neumann .suspend = &cik_suspend, 220357e252bfSMichael Neumann .resume = &cik_resume, 220457e252bfSMichael Neumann .asic_reset = &cik_asic_reset, 220557e252bfSMichael Neumann .vga_set_state = &r600_vga_set_state, 2206c6f73aabSFrançois Tigeot .mmio_hdp_flush = &r600_mmio_hdp_flush, 220757e252bfSMichael Neumann .gui_idle = &r600_gui_idle, 220857e252bfSMichael Neumann .mc_wait_for_idle = &evergreen_mc_wait_for_idle, 220957e252bfSMichael Neumann .get_xclk = &cik_get_xclk, 221057e252bfSMichael Neumann .get_gpu_clock_counter = &cik_get_gpu_clock_counter, 2211*c59a5c48SFrançois Tigeot .get_allowed_info_register = cik_get_allowed_info_register, 221257e252bfSMichael Neumann .gart = { 221357e252bfSMichael Neumann .tlb_flush = &cik_pcie_gart_tlb_flush, 22147dcf36dcSFrançois Tigeot .get_page_entry = &rs600_gart_get_page_entry, 221557e252bfSMichael Neumann .set_page = &rs600_gart_set_page, 221657e252bfSMichael Neumann }, 221757e252bfSMichael Neumann .vm = { 221857e252bfSMichael Neumann .init = &cik_vm_init, 221957e252bfSMichael Neumann .fini = &cik_vm_fini, 2220c6f73aabSFrançois Tigeot .copy_pages = &cik_sdma_vm_copy_pages, 2221c6f73aabSFrançois Tigeot .write_pages = &cik_sdma_vm_write_pages, 2222c6f73aabSFrançois Tigeot .set_pages = &cik_sdma_vm_set_pages, 2223c6f73aabSFrançois Tigeot .pad_ib = &cik_sdma_vm_pad_ib, 222457e252bfSMichael Neumann }, 222557e252bfSMichael Neumann .ring = { 22264cd92098Szrj [RADEON_RING_TYPE_GFX_INDEX] = &ci_gfx_ring, 22274cd92098Szrj [CAYMAN_RING_TYPE_CP1_INDEX] = &ci_cp_ring, 22284cd92098Szrj [CAYMAN_RING_TYPE_CP2_INDEX] = &ci_cp_ring, 22294cd92098Szrj [R600_RING_TYPE_DMA_INDEX] = &ci_dma_ring, 22304cd92098Szrj [CAYMAN_RING_TYPE_DMA1_INDEX] = &ci_dma_ring, 22314cd92098Szrj [R600_RING_TYPE_UVD_INDEX] = &cayman_uvd_ring, 2232c6f73aabSFrançois Tigeot [TN_RING_TYPE_VCE1_INDEX] = &ci_vce_ring, 2233c6f73aabSFrançois Tigeot [TN_RING_TYPE_VCE2_INDEX] = &ci_vce_ring, 223457e252bfSMichael Neumann }, 223557e252bfSMichael Neumann .irq = { 223657e252bfSMichael Neumann .set = &cik_irq_set, 223757e252bfSMichael Neumann .process = &cik_irq_process, 223857e252bfSMichael Neumann }, 223957e252bfSMichael Neumann .display = { 224057e252bfSMichael Neumann .bandwidth_update = &dce8_bandwidth_update, 224157e252bfSMichael Neumann .get_vblank_counter = &evergreen_get_vblank_counter, 224257e252bfSMichael Neumann .wait_for_vblank = &dce4_wait_for_vblank, 2243c6f73aabSFrançois Tigeot .set_backlight_level = &atombios_set_backlight_level, 2244c6f73aabSFrançois Tigeot .get_backlight_level = &atombios_get_backlight_level, 224557e252bfSMichael Neumann }, 224657e252bfSMichael Neumann .copy = { 2247c6f73aabSFrançois Tigeot .blit = &cik_copy_cpdma, 224857e252bfSMichael Neumann .blit_ring_index = RADEON_RING_TYPE_GFX_INDEX, 224957e252bfSMichael Neumann .dma = &cik_copy_dma, 225057e252bfSMichael Neumann .dma_ring_index = R600_RING_TYPE_DMA_INDEX, 225157e252bfSMichael Neumann .copy = &cik_copy_dma, 225257e252bfSMichael Neumann .copy_ring_index = R600_RING_TYPE_DMA_INDEX, 225357e252bfSMichael Neumann }, 225457e252bfSMichael Neumann .surface = { 225557e252bfSMichael Neumann .set_reg = r600_set_surface_reg, 225657e252bfSMichael Neumann .clear_reg = r600_clear_surface_reg, 225757e252bfSMichael Neumann }, 225857e252bfSMichael Neumann .hpd = { 225957e252bfSMichael Neumann .init = &evergreen_hpd_init, 226057e252bfSMichael Neumann .fini = &evergreen_hpd_fini, 226157e252bfSMichael Neumann .sense = &evergreen_hpd_sense, 226257e252bfSMichael Neumann .set_polarity = &evergreen_hpd_set_polarity, 226357e252bfSMichael Neumann }, 226457e252bfSMichael Neumann .pm = { 226557e252bfSMichael Neumann .misc = &evergreen_pm_misc, 226657e252bfSMichael Neumann .prepare = &evergreen_pm_prepare, 226757e252bfSMichael Neumann .finish = &evergreen_pm_finish, 226857e252bfSMichael Neumann .init_profile = &sumo_pm_init_profile, 226957e252bfSMichael Neumann .get_dynpm_state = &r600_pm_get_dynpm_state, 227057e252bfSMichael Neumann .get_engine_clock = &radeon_atom_get_engine_clock, 227157e252bfSMichael Neumann .set_engine_clock = &radeon_atom_set_engine_clock, 227257e252bfSMichael Neumann .get_memory_clock = &radeon_atom_get_memory_clock, 227357e252bfSMichael Neumann .set_memory_clock = &radeon_atom_set_memory_clock, 227457e252bfSMichael Neumann .get_pcie_lanes = NULL, 227557e252bfSMichael Neumann .set_pcie_lanes = NULL, 227657e252bfSMichael Neumann .set_clock_gating = NULL, 227757e252bfSMichael Neumann .set_uvd_clocks = &cik_set_uvd_clocks, 2278c6f73aabSFrançois Tigeot .set_vce_clocks = &cik_set_vce_clocks, 22794cd92098Szrj .get_temperature = &kv_get_temp, 22804cd92098Szrj }, 22814cd92098Szrj .dpm = { 22824cd92098Szrj .init = &kv_dpm_init, 22834cd92098Szrj .setup_asic = &kv_dpm_setup_asic, 22844cd92098Szrj .enable = &kv_dpm_enable, 2285c6f73aabSFrançois Tigeot .late_enable = &kv_dpm_late_enable, 22864cd92098Szrj .disable = &kv_dpm_disable, 22874cd92098Szrj .pre_set_power_state = &kv_dpm_pre_set_power_state, 22884cd92098Szrj .set_power_state = &kv_dpm_set_power_state, 22894cd92098Szrj .post_set_power_state = &kv_dpm_post_set_power_state, 22904cd92098Szrj .display_configuration_changed = &kv_dpm_display_configuration_changed, 22914cd92098Szrj .fini = &kv_dpm_fini, 22924cd92098Szrj .get_sclk = &kv_dpm_get_sclk, 22934cd92098Szrj .get_mclk = &kv_dpm_get_mclk, 22944cd92098Szrj .print_power_state = &kv_dpm_print_power_state, 22954cd92098Szrj .debugfs_print_current_performance_level = &kv_dpm_debugfs_print_current_performance_level, 22964cd92098Szrj .force_performance_level = &kv_dpm_force_performance_level, 22974cd92098Szrj .powergate_uvd = &kv_dpm_powergate_uvd, 22984cd92098Szrj .enable_bapm = &kv_dpm_enable_bapm, 2299*c59a5c48SFrançois Tigeot .get_current_sclk = &kv_dpm_get_current_sclk, 2300*c59a5c48SFrançois Tigeot .get_current_mclk = &kv_dpm_get_current_mclk, 2301926deccbSFrançois Tigeot }, 2302926deccbSFrançois Tigeot .pflip = { 2303926deccbSFrançois Tigeot .page_flip = &evergreen_page_flip, 2304c6f73aabSFrançois Tigeot .page_flip_pending = &evergreen_page_flip_pending, 2305926deccbSFrançois Tigeot }, 2306926deccbSFrançois Tigeot }; 2307926deccbSFrançois Tigeot 2308926deccbSFrançois Tigeot /** 2309926deccbSFrançois Tigeot * radeon_asic_init - register asic specific callbacks 2310926deccbSFrançois Tigeot * 2311926deccbSFrançois Tigeot * @rdev: radeon device pointer 2312926deccbSFrançois Tigeot * 2313926deccbSFrançois Tigeot * Registers the appropriate asic specific callbacks for each 2314926deccbSFrançois Tigeot * chip family. Also sets other asics specific info like the number 2315926deccbSFrançois Tigeot * of crtcs and the register aperture accessors (all asics). 2316926deccbSFrançois Tigeot * Returns 0 for success. 2317926deccbSFrançois Tigeot */ 2318926deccbSFrançois Tigeot int radeon_asic_init(struct radeon_device *rdev) 2319926deccbSFrançois Tigeot { 2320926deccbSFrançois Tigeot radeon_register_accessor_init(rdev); 2321926deccbSFrançois Tigeot 2322926deccbSFrançois Tigeot /* set the number of crtcs */ 2323926deccbSFrançois Tigeot if (rdev->flags & RADEON_SINGLE_CRTC) 2324926deccbSFrançois Tigeot rdev->num_crtc = 1; 2325926deccbSFrançois Tigeot else 2326926deccbSFrançois Tigeot rdev->num_crtc = 2; 2327926deccbSFrançois Tigeot 2328f43cf1b1SMichael Neumann rdev->has_uvd = false; 2329f43cf1b1SMichael Neumann 2330926deccbSFrançois Tigeot switch (rdev->family) { 2331926deccbSFrançois Tigeot case CHIP_R100: 2332926deccbSFrançois Tigeot case CHIP_RV100: 2333926deccbSFrançois Tigeot case CHIP_RS100: 2334926deccbSFrançois Tigeot case CHIP_RV200: 2335926deccbSFrançois Tigeot case CHIP_RS200: 2336926deccbSFrançois Tigeot rdev->asic = &r100_asic; 2337926deccbSFrançois Tigeot break; 2338926deccbSFrançois Tigeot case CHIP_R200: 2339926deccbSFrançois Tigeot case CHIP_RV250: 2340926deccbSFrançois Tigeot case CHIP_RS300: 2341926deccbSFrançois Tigeot case CHIP_RV280: 2342926deccbSFrançois Tigeot rdev->asic = &r200_asic; 2343926deccbSFrançois Tigeot break; 2344926deccbSFrançois Tigeot case CHIP_R300: 2345926deccbSFrançois Tigeot case CHIP_R350: 2346926deccbSFrançois Tigeot case CHIP_RV350: 2347926deccbSFrançois Tigeot case CHIP_RV380: 2348926deccbSFrançois Tigeot if (rdev->flags & RADEON_IS_PCIE) 2349926deccbSFrançois Tigeot rdev->asic = &r300_asic_pcie; 2350926deccbSFrançois Tigeot else 2351926deccbSFrançois Tigeot rdev->asic = &r300_asic; 2352926deccbSFrançois Tigeot break; 2353926deccbSFrançois Tigeot case CHIP_R420: 2354926deccbSFrançois Tigeot case CHIP_R423: 2355926deccbSFrançois Tigeot case CHIP_RV410: 2356926deccbSFrançois Tigeot rdev->asic = &r420_asic; 2357926deccbSFrançois Tigeot /* handle macs */ 2358926deccbSFrançois Tigeot if (rdev->bios == NULL) { 2359926deccbSFrançois Tigeot rdev->asic->pm.get_engine_clock = &radeon_legacy_get_engine_clock; 2360926deccbSFrançois Tigeot rdev->asic->pm.set_engine_clock = &radeon_legacy_set_engine_clock; 2361926deccbSFrançois Tigeot rdev->asic->pm.get_memory_clock = &radeon_legacy_get_memory_clock; 2362926deccbSFrançois Tigeot rdev->asic->pm.set_memory_clock = NULL; 2363926deccbSFrançois Tigeot rdev->asic->display.set_backlight_level = &radeon_legacy_set_backlight_level; 2364926deccbSFrançois Tigeot } 2365926deccbSFrançois Tigeot break; 2366926deccbSFrançois Tigeot case CHIP_RS400: 2367926deccbSFrançois Tigeot case CHIP_RS480: 2368926deccbSFrançois Tigeot rdev->asic = &rs400_asic; 2369926deccbSFrançois Tigeot break; 2370926deccbSFrançois Tigeot case CHIP_RS600: 2371926deccbSFrançois Tigeot rdev->asic = &rs600_asic; 2372926deccbSFrançois Tigeot break; 2373926deccbSFrançois Tigeot case CHIP_RS690: 2374926deccbSFrançois Tigeot case CHIP_RS740: 2375926deccbSFrançois Tigeot rdev->asic = &rs690_asic; 2376926deccbSFrançois Tigeot break; 2377926deccbSFrançois Tigeot case CHIP_RV515: 2378926deccbSFrançois Tigeot rdev->asic = &rv515_asic; 2379926deccbSFrançois Tigeot break; 2380926deccbSFrançois Tigeot case CHIP_R520: 2381926deccbSFrançois Tigeot case CHIP_RV530: 2382926deccbSFrançois Tigeot case CHIP_RV560: 2383926deccbSFrançois Tigeot case CHIP_RV570: 2384926deccbSFrançois Tigeot case CHIP_R580: 2385926deccbSFrançois Tigeot rdev->asic = &r520_asic; 2386926deccbSFrançois Tigeot break; 2387926deccbSFrançois Tigeot case CHIP_R600: 238857e252bfSMichael Neumann rdev->asic = &r600_asic; 238957e252bfSMichael Neumann break; 2390926deccbSFrançois Tigeot case CHIP_RV610: 2391926deccbSFrançois Tigeot case CHIP_RV630: 2392926deccbSFrançois Tigeot case CHIP_RV620: 2393926deccbSFrançois Tigeot case CHIP_RV635: 2394926deccbSFrançois Tigeot case CHIP_RV670: 239557e252bfSMichael Neumann rdev->asic = &rv6xx_asic; 2396f43cf1b1SMichael Neumann rdev->has_uvd = true; 2397926deccbSFrançois Tigeot break; 2398926deccbSFrançois Tigeot case CHIP_RS780: 2399926deccbSFrançois Tigeot case CHIP_RS880: 2400926deccbSFrançois Tigeot rdev->asic = &rs780_asic; 2401591d5043SFrançois Tigeot /* 760G/780V/880V don't have UVD */ 2402591d5043SFrançois Tigeot if ((rdev->pdev->device == 0x9616)|| 2403591d5043SFrançois Tigeot (rdev->pdev->device == 0x9611)|| 2404591d5043SFrançois Tigeot (rdev->pdev->device == 0x9613)|| 2405591d5043SFrançois Tigeot (rdev->pdev->device == 0x9711)|| 2406591d5043SFrançois Tigeot (rdev->pdev->device == 0x9713)) 2407591d5043SFrançois Tigeot rdev->has_uvd = false; 2408591d5043SFrançois Tigeot else 2409f43cf1b1SMichael Neumann rdev->has_uvd = true; 2410926deccbSFrançois Tigeot break; 2411926deccbSFrançois Tigeot case CHIP_RV770: 2412926deccbSFrançois Tigeot case CHIP_RV730: 2413926deccbSFrançois Tigeot case CHIP_RV710: 2414926deccbSFrançois Tigeot case CHIP_RV740: 2415926deccbSFrançois Tigeot rdev->asic = &rv770_asic; 2416f43cf1b1SMichael Neumann rdev->has_uvd = true; 2417926deccbSFrançois Tigeot break; 2418926deccbSFrançois Tigeot case CHIP_CEDAR: 2419926deccbSFrançois Tigeot case CHIP_REDWOOD: 2420926deccbSFrançois Tigeot case CHIP_JUNIPER: 2421926deccbSFrançois Tigeot case CHIP_CYPRESS: 2422926deccbSFrançois Tigeot case CHIP_HEMLOCK: 2423926deccbSFrançois Tigeot /* set num crtcs */ 2424926deccbSFrançois Tigeot if (rdev->family == CHIP_CEDAR) 2425926deccbSFrançois Tigeot rdev->num_crtc = 4; 2426926deccbSFrançois Tigeot else 2427926deccbSFrançois Tigeot rdev->num_crtc = 6; 2428926deccbSFrançois Tigeot rdev->asic = &evergreen_asic; 2429f43cf1b1SMichael Neumann rdev->has_uvd = true; 2430926deccbSFrançois Tigeot break; 2431926deccbSFrançois Tigeot case CHIP_PALM: 2432926deccbSFrançois Tigeot case CHIP_SUMO: 2433926deccbSFrançois Tigeot case CHIP_SUMO2: 2434926deccbSFrançois Tigeot rdev->asic = &sumo_asic; 2435f43cf1b1SMichael Neumann rdev->has_uvd = true; 2436926deccbSFrançois Tigeot break; 2437926deccbSFrançois Tigeot case CHIP_BARTS: 2438926deccbSFrançois Tigeot case CHIP_TURKS: 2439926deccbSFrançois Tigeot case CHIP_CAICOS: 2440926deccbSFrançois Tigeot /* set num crtcs */ 2441926deccbSFrançois Tigeot if (rdev->family == CHIP_CAICOS) 2442926deccbSFrançois Tigeot rdev->num_crtc = 4; 2443926deccbSFrançois Tigeot else 2444926deccbSFrançois Tigeot rdev->num_crtc = 6; 2445926deccbSFrançois Tigeot rdev->asic = &btc_asic; 2446f43cf1b1SMichael Neumann rdev->has_uvd = true; 2447926deccbSFrançois Tigeot break; 2448926deccbSFrançois Tigeot case CHIP_CAYMAN: 2449926deccbSFrançois Tigeot rdev->asic = &cayman_asic; 2450926deccbSFrançois Tigeot /* set num crtcs */ 2451926deccbSFrançois Tigeot rdev->num_crtc = 6; 2452f43cf1b1SMichael Neumann rdev->has_uvd = true; 2453926deccbSFrançois Tigeot break; 2454926deccbSFrançois Tigeot case CHIP_ARUBA: 2455926deccbSFrançois Tigeot rdev->asic = &trinity_asic; 2456926deccbSFrançois Tigeot /* set num crtcs */ 2457926deccbSFrançois Tigeot rdev->num_crtc = 4; 2458f43cf1b1SMichael Neumann rdev->has_uvd = true; 2459*c59a5c48SFrançois Tigeot rdev->cg_flags = 2460*c59a5c48SFrançois Tigeot RADEON_CG_SUPPORT_VCE_MGCG; 2461926deccbSFrançois Tigeot break; 2462926deccbSFrançois Tigeot case CHIP_TAHITI: 2463926deccbSFrançois Tigeot case CHIP_PITCAIRN: 2464926deccbSFrançois Tigeot case CHIP_VERDE: 2465b403bed8SMichael Neumann case CHIP_OLAND: 2466f43cf1b1SMichael Neumann case CHIP_HAINAN: 2467926deccbSFrançois Tigeot rdev->asic = &si_asic; 2468926deccbSFrançois Tigeot /* set num crtcs */ 2469f43cf1b1SMichael Neumann if (rdev->family == CHIP_HAINAN) 2470f43cf1b1SMichael Neumann rdev->num_crtc = 0; 2471f43cf1b1SMichael Neumann else if (rdev->family == CHIP_OLAND) 2472b403bed8SMichael Neumann rdev->num_crtc = 2; 2473b403bed8SMichael Neumann else 2474926deccbSFrançois Tigeot rdev->num_crtc = 6; 2475ee479021SImre Vadász if (rdev->family == CHIP_HAINAN) 2476f43cf1b1SMichael Neumann rdev->has_uvd = false; 2477ee479021SImre Vadász else 2478f43cf1b1SMichael Neumann rdev->has_uvd = true; 24794cd92098Szrj switch (rdev->family) { 24804cd92098Szrj case CHIP_TAHITI: 24814cd92098Szrj rdev->cg_flags = 24824cd92098Szrj RADEON_CG_SUPPORT_GFX_MGCG | 24834cd92098Szrj RADEON_CG_SUPPORT_GFX_MGLS | 24844cd92098Szrj /*RADEON_CG_SUPPORT_GFX_CGCG |*/ 24854cd92098Szrj RADEON_CG_SUPPORT_GFX_CGLS | 24864cd92098Szrj RADEON_CG_SUPPORT_GFX_CGTS | 24874cd92098Szrj RADEON_CG_SUPPORT_GFX_CP_LS | 24884cd92098Szrj RADEON_CG_SUPPORT_MC_MGCG | 24894cd92098Szrj RADEON_CG_SUPPORT_SDMA_MGCG | 24904cd92098Szrj RADEON_CG_SUPPORT_BIF_LS | 24914cd92098Szrj RADEON_CG_SUPPORT_VCE_MGCG | 24924cd92098Szrj RADEON_CG_SUPPORT_UVD_MGCG | 24934cd92098Szrj RADEON_CG_SUPPORT_HDP_LS | 24944cd92098Szrj RADEON_CG_SUPPORT_HDP_MGCG; 24954cd92098Szrj rdev->pg_flags = 0; 24964cd92098Szrj break; 24974cd92098Szrj case CHIP_PITCAIRN: 24984cd92098Szrj rdev->cg_flags = 24994cd92098Szrj RADEON_CG_SUPPORT_GFX_MGCG | 25004cd92098Szrj RADEON_CG_SUPPORT_GFX_MGLS | 25014cd92098Szrj /*RADEON_CG_SUPPORT_GFX_CGCG |*/ 25024cd92098Szrj RADEON_CG_SUPPORT_GFX_CGLS | 25034cd92098Szrj RADEON_CG_SUPPORT_GFX_CGTS | 25044cd92098Szrj RADEON_CG_SUPPORT_GFX_CP_LS | 25054cd92098Szrj RADEON_CG_SUPPORT_GFX_RLC_LS | 25064cd92098Szrj RADEON_CG_SUPPORT_MC_LS | 25074cd92098Szrj RADEON_CG_SUPPORT_MC_MGCG | 25084cd92098Szrj RADEON_CG_SUPPORT_SDMA_MGCG | 25094cd92098Szrj RADEON_CG_SUPPORT_BIF_LS | 25104cd92098Szrj RADEON_CG_SUPPORT_VCE_MGCG | 25114cd92098Szrj RADEON_CG_SUPPORT_UVD_MGCG | 25124cd92098Szrj RADEON_CG_SUPPORT_HDP_LS | 25134cd92098Szrj RADEON_CG_SUPPORT_HDP_MGCG; 25144cd92098Szrj rdev->pg_flags = 0; 25154cd92098Szrj break; 25164cd92098Szrj case CHIP_VERDE: 25174cd92098Szrj rdev->cg_flags = 25184cd92098Szrj RADEON_CG_SUPPORT_GFX_MGCG | 25194cd92098Szrj RADEON_CG_SUPPORT_GFX_MGLS | 25204cd92098Szrj /*RADEON_CG_SUPPORT_GFX_CGCG |*/ 25214cd92098Szrj RADEON_CG_SUPPORT_GFX_CGLS | 25224cd92098Szrj RADEON_CG_SUPPORT_GFX_CGTS | 25234cd92098Szrj RADEON_CG_SUPPORT_GFX_CP_LS | 25244cd92098Szrj RADEON_CG_SUPPORT_GFX_RLC_LS | 25254cd92098Szrj RADEON_CG_SUPPORT_MC_LS | 25264cd92098Szrj RADEON_CG_SUPPORT_MC_MGCG | 25274cd92098Szrj RADEON_CG_SUPPORT_SDMA_MGCG | 25284cd92098Szrj RADEON_CG_SUPPORT_BIF_LS | 25294cd92098Szrj RADEON_CG_SUPPORT_VCE_MGCG | 25304cd92098Szrj RADEON_CG_SUPPORT_UVD_MGCG | 25314cd92098Szrj RADEON_CG_SUPPORT_HDP_LS | 25324cd92098Szrj RADEON_CG_SUPPORT_HDP_MGCG; 25334cd92098Szrj rdev->pg_flags = 0 | 25344cd92098Szrj /*RADEON_PG_SUPPORT_GFX_PG | */ 25354cd92098Szrj RADEON_PG_SUPPORT_SDMA; 25364cd92098Szrj break; 25374cd92098Szrj case CHIP_OLAND: 25384cd92098Szrj rdev->cg_flags = 25394cd92098Szrj RADEON_CG_SUPPORT_GFX_MGCG | 25404cd92098Szrj RADEON_CG_SUPPORT_GFX_MGLS | 25414cd92098Szrj /*RADEON_CG_SUPPORT_GFX_CGCG |*/ 25424cd92098Szrj RADEON_CG_SUPPORT_GFX_CGLS | 25434cd92098Szrj RADEON_CG_SUPPORT_GFX_CGTS | 25444cd92098Szrj RADEON_CG_SUPPORT_GFX_CP_LS | 25454cd92098Szrj RADEON_CG_SUPPORT_GFX_RLC_LS | 25464cd92098Szrj RADEON_CG_SUPPORT_MC_LS | 25474cd92098Szrj RADEON_CG_SUPPORT_MC_MGCG | 25484cd92098Szrj RADEON_CG_SUPPORT_SDMA_MGCG | 25494cd92098Szrj RADEON_CG_SUPPORT_BIF_LS | 25504cd92098Szrj RADEON_CG_SUPPORT_UVD_MGCG | 25514cd92098Szrj RADEON_CG_SUPPORT_HDP_LS | 25524cd92098Szrj RADEON_CG_SUPPORT_HDP_MGCG; 25534cd92098Szrj rdev->pg_flags = 0; 25544cd92098Szrj break; 25554cd92098Szrj case CHIP_HAINAN: 25564cd92098Szrj rdev->cg_flags = 25574cd92098Szrj RADEON_CG_SUPPORT_GFX_MGCG | 25584cd92098Szrj RADEON_CG_SUPPORT_GFX_MGLS | 25594cd92098Szrj /*RADEON_CG_SUPPORT_GFX_CGCG |*/ 25604cd92098Szrj RADEON_CG_SUPPORT_GFX_CGLS | 25614cd92098Szrj RADEON_CG_SUPPORT_GFX_CGTS | 25624cd92098Szrj RADEON_CG_SUPPORT_GFX_CP_LS | 25634cd92098Szrj RADEON_CG_SUPPORT_GFX_RLC_LS | 25644cd92098Szrj RADEON_CG_SUPPORT_MC_LS | 25654cd92098Szrj RADEON_CG_SUPPORT_MC_MGCG | 25664cd92098Szrj RADEON_CG_SUPPORT_SDMA_MGCG | 25674cd92098Szrj RADEON_CG_SUPPORT_BIF_LS | 25684cd92098Szrj RADEON_CG_SUPPORT_HDP_LS | 25694cd92098Szrj RADEON_CG_SUPPORT_HDP_MGCG; 25704cd92098Szrj rdev->pg_flags = 0; 25714cd92098Szrj break; 25724cd92098Szrj default: 25734cd92098Szrj rdev->cg_flags = 0; 25744cd92098Szrj rdev->pg_flags = 0; 25754cd92098Szrj break; 25764cd92098Szrj } 2577926deccbSFrançois Tigeot break; 257857e252bfSMichael Neumann case CHIP_BONAIRE: 2579c6f73aabSFrançois Tigeot case CHIP_HAWAII: 258057e252bfSMichael Neumann rdev->asic = &ci_asic; 258157e252bfSMichael Neumann rdev->num_crtc = 6; 25824cd92098Szrj rdev->has_uvd = true; 2583c6f73aabSFrançois Tigeot if (rdev->family == CHIP_BONAIRE) { 25844cd92098Szrj rdev->cg_flags = 25854cd92098Szrj RADEON_CG_SUPPORT_GFX_MGCG | 25864cd92098Szrj RADEON_CG_SUPPORT_GFX_MGLS | 25874cd92098Szrj /*RADEON_CG_SUPPORT_GFX_CGCG |*/ 25884cd92098Szrj RADEON_CG_SUPPORT_GFX_CGLS | 25894cd92098Szrj RADEON_CG_SUPPORT_GFX_CGTS | 25904cd92098Szrj RADEON_CG_SUPPORT_GFX_CGTS_LS | 25914cd92098Szrj RADEON_CG_SUPPORT_GFX_CP_LS | 25924cd92098Szrj RADEON_CG_SUPPORT_MC_LS | 25934cd92098Szrj RADEON_CG_SUPPORT_MC_MGCG | 25944cd92098Szrj RADEON_CG_SUPPORT_SDMA_MGCG | 25954cd92098Szrj RADEON_CG_SUPPORT_SDMA_LS | 25964cd92098Szrj RADEON_CG_SUPPORT_BIF_LS | 25974cd92098Szrj RADEON_CG_SUPPORT_VCE_MGCG | 25984cd92098Szrj RADEON_CG_SUPPORT_UVD_MGCG | 25994cd92098Szrj RADEON_CG_SUPPORT_HDP_LS | 26004cd92098Szrj RADEON_CG_SUPPORT_HDP_MGCG; 26014cd92098Szrj rdev->pg_flags = 0; 2602c6f73aabSFrançois Tigeot } else { 2603c6f73aabSFrançois Tigeot rdev->cg_flags = 2604c6f73aabSFrançois Tigeot RADEON_CG_SUPPORT_GFX_MGCG | 2605c6f73aabSFrançois Tigeot RADEON_CG_SUPPORT_GFX_MGLS | 2606c6f73aabSFrançois Tigeot /*RADEON_CG_SUPPORT_GFX_CGCG |*/ 2607c6f73aabSFrançois Tigeot RADEON_CG_SUPPORT_GFX_CGLS | 2608c6f73aabSFrançois Tigeot RADEON_CG_SUPPORT_GFX_CGTS | 2609c6f73aabSFrançois Tigeot RADEON_CG_SUPPORT_GFX_CP_LS | 2610c6f73aabSFrançois Tigeot RADEON_CG_SUPPORT_MC_LS | 2611c6f73aabSFrançois Tigeot RADEON_CG_SUPPORT_MC_MGCG | 2612c6f73aabSFrançois Tigeot RADEON_CG_SUPPORT_SDMA_MGCG | 2613c6f73aabSFrançois Tigeot RADEON_CG_SUPPORT_SDMA_LS | 2614c6f73aabSFrançois Tigeot RADEON_CG_SUPPORT_BIF_LS | 2615c6f73aabSFrançois Tigeot RADEON_CG_SUPPORT_VCE_MGCG | 2616c6f73aabSFrançois Tigeot RADEON_CG_SUPPORT_UVD_MGCG | 2617c6f73aabSFrançois Tigeot RADEON_CG_SUPPORT_HDP_LS | 2618c6f73aabSFrançois Tigeot RADEON_CG_SUPPORT_HDP_MGCG; 2619c6f73aabSFrançois Tigeot rdev->pg_flags = 0; 2620c6f73aabSFrançois Tigeot } 262157e252bfSMichael Neumann break; 262257e252bfSMichael Neumann case CHIP_KAVERI: 262357e252bfSMichael Neumann case CHIP_KABINI: 2624c6f73aabSFrançois Tigeot case CHIP_MULLINS: 262557e252bfSMichael Neumann rdev->asic = &kv_asic; 262657e252bfSMichael Neumann /* set num crtcs */ 26274cd92098Szrj if (rdev->family == CHIP_KAVERI) { 262857e252bfSMichael Neumann rdev->num_crtc = 4; 26294cd92098Szrj rdev->cg_flags = 26304cd92098Szrj RADEON_CG_SUPPORT_GFX_MGCG | 26314cd92098Szrj RADEON_CG_SUPPORT_GFX_MGLS | 26324cd92098Szrj /*RADEON_CG_SUPPORT_GFX_CGCG |*/ 26334cd92098Szrj RADEON_CG_SUPPORT_GFX_CGLS | 26344cd92098Szrj RADEON_CG_SUPPORT_GFX_CGTS | 26354cd92098Szrj RADEON_CG_SUPPORT_GFX_CGTS_LS | 26364cd92098Szrj RADEON_CG_SUPPORT_GFX_CP_LS | 26374cd92098Szrj RADEON_CG_SUPPORT_SDMA_MGCG | 26384cd92098Szrj RADEON_CG_SUPPORT_SDMA_LS | 26394cd92098Szrj RADEON_CG_SUPPORT_BIF_LS | 26404cd92098Szrj RADEON_CG_SUPPORT_VCE_MGCG | 26414cd92098Szrj RADEON_CG_SUPPORT_UVD_MGCG | 26424cd92098Szrj RADEON_CG_SUPPORT_HDP_LS | 26434cd92098Szrj RADEON_CG_SUPPORT_HDP_MGCG; 26444cd92098Szrj rdev->pg_flags = 0; 26454cd92098Szrj /*RADEON_PG_SUPPORT_GFX_PG | 26464cd92098Szrj RADEON_PG_SUPPORT_GFX_SMG | 26474cd92098Szrj RADEON_PG_SUPPORT_GFX_DMG | 26484cd92098Szrj RADEON_PG_SUPPORT_UVD | 26494cd92098Szrj RADEON_PG_SUPPORT_VCE | 26504cd92098Szrj RADEON_PG_SUPPORT_CP | 26514cd92098Szrj RADEON_PG_SUPPORT_GDS | 26524cd92098Szrj RADEON_PG_SUPPORT_RLC_SMU_HS | 26534cd92098Szrj RADEON_PG_SUPPORT_ACP | 26544cd92098Szrj RADEON_PG_SUPPORT_SAMU;*/ 26554cd92098Szrj } else { 265657e252bfSMichael Neumann rdev->num_crtc = 2; 26574cd92098Szrj rdev->cg_flags = 26584cd92098Szrj RADEON_CG_SUPPORT_GFX_MGCG | 26594cd92098Szrj RADEON_CG_SUPPORT_GFX_MGLS | 26604cd92098Szrj /*RADEON_CG_SUPPORT_GFX_CGCG |*/ 26614cd92098Szrj RADEON_CG_SUPPORT_GFX_CGLS | 26624cd92098Szrj RADEON_CG_SUPPORT_GFX_CGTS | 26634cd92098Szrj RADEON_CG_SUPPORT_GFX_CGTS_LS | 26644cd92098Szrj RADEON_CG_SUPPORT_GFX_CP_LS | 26654cd92098Szrj RADEON_CG_SUPPORT_SDMA_MGCG | 26664cd92098Szrj RADEON_CG_SUPPORT_SDMA_LS | 26674cd92098Szrj RADEON_CG_SUPPORT_BIF_LS | 26684cd92098Szrj RADEON_CG_SUPPORT_VCE_MGCG | 26694cd92098Szrj RADEON_CG_SUPPORT_UVD_MGCG | 26704cd92098Szrj RADEON_CG_SUPPORT_HDP_LS | 26714cd92098Szrj RADEON_CG_SUPPORT_HDP_MGCG; 26724cd92098Szrj rdev->pg_flags = 0; 26734cd92098Szrj /*RADEON_PG_SUPPORT_GFX_PG | 26744cd92098Szrj RADEON_PG_SUPPORT_GFX_SMG | 26754cd92098Szrj RADEON_PG_SUPPORT_UVD | 26764cd92098Szrj RADEON_PG_SUPPORT_VCE | 26774cd92098Szrj RADEON_PG_SUPPORT_CP | 26784cd92098Szrj RADEON_PG_SUPPORT_GDS | 26794cd92098Szrj RADEON_PG_SUPPORT_RLC_SMU_HS | 26804cd92098Szrj RADEON_PG_SUPPORT_SAMU;*/ 26814cd92098Szrj } 26824cd92098Szrj rdev->has_uvd = true; 268357e252bfSMichael Neumann break; 2684926deccbSFrançois Tigeot default: 2685926deccbSFrançois Tigeot /* FIXME: not supported yet */ 2686926deccbSFrançois Tigeot return -EINVAL; 2687926deccbSFrançois Tigeot } 2688926deccbSFrançois Tigeot 2689926deccbSFrançois Tigeot if (rdev->flags & RADEON_IS_IGP) { 2690926deccbSFrançois Tigeot rdev->asic->pm.get_memory_clock = NULL; 2691926deccbSFrançois Tigeot rdev->asic->pm.set_memory_clock = NULL; 2692926deccbSFrançois Tigeot } 2693926deccbSFrançois Tigeot 2694926deccbSFrançois Tigeot return 0; 2695926deccbSFrançois Tigeot } 2696926deccbSFrançois Tigeot 2697