xref: /dflybsd-src/sys/dev/drm/radeon/radeon_asic.c (revision d78d3a2272f5ecf9e0b570e362128240417a1b85)
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  */
radeon_invalid_rreg(struct radeon_device * rdev,uint32_t reg)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  */
radeon_invalid_wreg(struct radeon_device * rdev,uint32_t reg,uint32_t v)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  */
radeon_register_accessor_init(struct radeon_device * rdev)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 
radeon_invalid_get_allowed_info_register(struct radeon_device * rdev,u32 reg,u32 * val)140c59a5c48SFrançois Tigeot static int radeon_invalid_get_allowed_info_register(struct radeon_device *rdev,
141c59a5c48SFrançois Tigeot 						    u32 reg, u32 *val)
142c59a5c48SFrançois Tigeot {
143c59a5c48SFrançois Tigeot 	return -EINVAL;
144c59a5c48SFranç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  */
radeon_agp_disable(struct radeon_device * rdev)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 
184*d78d3a22SFrançois Tigeot static const 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,
208c59a5c48SFranç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,
276c59a5c48SFranç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 
334*d78d3a22SFrançois Tigeot static const 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 
348*d78d3a22SFrançois Tigeot static const 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,
372c59a5c48SFranç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,
440c59a5c48SFranç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,
508c59a5c48SFranç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,
576c59a5c48SFranç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,
644c59a5c48SFranç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,
712c59a5c48SFranç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,
780c59a5c48SFranç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,
848c59a5c48SFranç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 
906*d78d3a22SFrançois Tigeot static const 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 
919*d78d3a22SFrançois Tigeot static const 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,
944c59a5c48SFranç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 
1004*d78d3a22SFrançois Tigeot static const 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,
1029c59a5c48SFranç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,
1101c59a5c48SFrançois Tigeot 		.get_current_sclk = &rv6xx_dpm_get_current_sclk,
1102c59a5c48SFranç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,
1122c59a5c48SFranç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,
1194c59a5c48SFrançois Tigeot 		.get_current_sclk = &rs780_dpm_get_current_sclk,
1195c59a5c48SFranç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 
1203*d78d3a22SFrançois Tigeot static const struct radeon_asic_ring rv770_uvd_ring = {
12044cd92098Szrj 	.ib_execute = &uvd_v1_0_ib_execute,
12054cd92098Szrj 	.emit_fence = &uvd_v2_2_fence_emit,
1206c59a5c48SFranç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,
1228c59a5c48SFranç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,
1301c59a5c48SFrançois Tigeot 		.get_current_sclk = &rv770_dpm_get_current_sclk,
1302c59a5c48SFranç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 
1310*d78d3a22SFrançois Tigeot static const 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 
1323*d78d3a22SFrançois Tigeot static const 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,
1348c59a5c48SFranç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,
1421c59a5c48SFrançois Tigeot 		.get_current_sclk = &rv770_dpm_get_current_sclk,
1422c59a5c48SFranç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,
1442c59a5c48SFranç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,
1514c59a5c48SFrançois Tigeot 		.get_current_sclk = &sumo_dpm_get_current_sclk,
1515c59a5c48SFranç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,
1535c59a5c48SFranç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,
1608c59a5c48SFrançois Tigeot 		.get_current_sclk = &btc_dpm_get_current_sclk,
1609c59a5c48SFranç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 
1617*d78d3a22SFrançois Tigeot static const 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 
1632*d78d3a22SFrançois Tigeot static const 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 
1647*d78d3a22SFrançois Tigeot static const 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,
1672c59a5c48SFranç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,
1756c59a5c48SFrançois Tigeot 		.get_current_sclk = &ni_dpm_get_current_sclk,
1757c59a5c48SFranç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*d78d3a22SFrançois Tigeot static const struct radeon_asic_ring trinity_vce_ring = {
1766c59a5c48SFrançois Tigeot 	.ib_execute = &radeon_vce_ib_execute,
1767c59a5c48SFrançois Tigeot 	.emit_fence = &radeon_vce_fence_emit,
1768c59a5c48SFrançois Tigeot 	.emit_semaphore = &radeon_vce_semaphore_emit,
1769c59a5c48SFrançois Tigeot 	.cs_parse = &radeon_vce_cs_parse,
1770c59a5c48SFrançois Tigeot 	.ring_test = &radeon_vce_ring_test,
1771c59a5c48SFrançois Tigeot 	.ib_test = &radeon_vce_ib_test,
1772c59a5c48SFrançois Tigeot 	.is_lockup = &radeon_ring_test_lockup,
1773c59a5c48SFrançois Tigeot 	.get_rptr = &vce_v1_0_get_rptr,
1774c59a5c48SFrançois Tigeot 	.get_wptr = &vce_v1_0_get_wptr,
1775c59a5c48SFrançois Tigeot 	.set_wptr = &vce_v1_0_set_wptr,
1776c59a5c48SFrançois Tigeot };
1777c59a5c48SFranç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,
1790c59a5c48SFranç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,
1811c59a5c48SFrançois Tigeot 		[TN_RING_TYPE_VCE1_INDEX] = &trinity_vce_ring,
1812c59a5c48SFranç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,
1857c59a5c48SFranç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,
1877c59a5c48SFrançois Tigeot 		.get_current_sclk = &trinity_dpm_get_current_sclk,
1878c59a5c48SFranç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 
1886*d78d3a22SFrançois Tigeot static const 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 
1901*d78d3a22SFrançois Tigeot static const 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,
1928c59a5c48SFranç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,
1949c59a5c48SFrançois Tigeot 		[TN_RING_TYPE_VCE1_INDEX] = &trinity_vce_ring,
1950c59a5c48SFranç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,
1995c59a5c48SFranç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,
2015c59a5c48SFrançois Tigeot 		.fan_ctrl_set_mode = &si_fan_ctrl_set_mode,
2016c59a5c48SFrançois Tigeot 		.fan_ctrl_get_mode = &si_fan_ctrl_get_mode,
2017c59a5c48SFrançois Tigeot 		.get_fan_speed_percent = &si_fan_ctrl_get_fan_speed_percent,
2018c59a5c48SFrançois Tigeot 		.set_fan_speed_percent = &si_fan_ctrl_set_fan_speed_percent,
2019c59a5c48SFrançois Tigeot 		.get_current_sclk = &si_dpm_get_current_sclk,
2020c59a5c48SFranç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 
2028*d78d3a22SFrançois Tigeot static const 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 
2043*d78d3a22SFrançois Tigeot static const 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 
2058*d78d3a22SFrançois Tigeot static const 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 
2073*d78d3a22SFrançois Tigeot static const 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,
2098c59a5c48SFranç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,
2186c59a5c48SFrançois Tigeot 		.fan_ctrl_set_mode = &ci_fan_ctrl_set_mode,
2187c59a5c48SFrançois Tigeot 		.fan_ctrl_get_mode = &ci_fan_ctrl_get_mode,
2188c59a5c48SFrançois Tigeot 		.get_fan_speed_percent = &ci_fan_ctrl_get_fan_speed_percent,
2189c59a5c48SFrançois Tigeot 		.set_fan_speed_percent = &ci_fan_ctrl_set_fan_speed_percent,
2190c59a5c48SFrançois Tigeot 		.get_current_sclk = &ci_dpm_get_current_sclk,
2191c59a5c48SFranç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,
2211c59a5c48SFranç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,
2299c59a5c48SFrançois Tigeot 		.get_current_sclk = &kv_dpm_get_current_sclk,
2300c59a5c48SFranç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  */
radeon_asic_init(struct radeon_device * rdev)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;
2329*d78d3a22SFrançois Tigeot 	rdev->has_vce = false;
2330f43cf1b1SMichael Neumann 
2331926deccbSFrançois Tigeot 	switch (rdev->family) {
2332926deccbSFrançois Tigeot 	case CHIP_R100:
2333926deccbSFrançois Tigeot 	case CHIP_RV100:
2334926deccbSFrançois Tigeot 	case CHIP_RS100:
2335926deccbSFrançois Tigeot 	case CHIP_RV200:
2336926deccbSFrançois Tigeot 	case CHIP_RS200:
2337926deccbSFrançois Tigeot 		rdev->asic = &r100_asic;
2338926deccbSFrançois Tigeot 		break;
2339926deccbSFrançois Tigeot 	case CHIP_R200:
2340926deccbSFrançois Tigeot 	case CHIP_RV250:
2341926deccbSFrançois Tigeot 	case CHIP_RS300:
2342926deccbSFrançois Tigeot 	case CHIP_RV280:
2343926deccbSFrançois Tigeot 		rdev->asic = &r200_asic;
2344926deccbSFrançois Tigeot 		break;
2345926deccbSFrançois Tigeot 	case CHIP_R300:
2346926deccbSFrançois Tigeot 	case CHIP_R350:
2347926deccbSFrançois Tigeot 	case CHIP_RV350:
2348926deccbSFrançois Tigeot 	case CHIP_RV380:
2349926deccbSFrançois Tigeot 		if (rdev->flags & RADEON_IS_PCIE)
2350926deccbSFrançois Tigeot 			rdev->asic = &r300_asic_pcie;
2351926deccbSFrançois Tigeot 		else
2352926deccbSFrançois Tigeot 			rdev->asic = &r300_asic;
2353926deccbSFrançois Tigeot 		break;
2354926deccbSFrançois Tigeot 	case CHIP_R420:
2355926deccbSFrançois Tigeot 	case CHIP_R423:
2356926deccbSFrançois Tigeot 	case CHIP_RV410:
2357926deccbSFrançois Tigeot 		rdev->asic = &r420_asic;
2358926deccbSFrançois Tigeot 		/* handle macs */
2359926deccbSFrançois Tigeot 		if (rdev->bios == NULL) {
2360926deccbSFrançois Tigeot 			rdev->asic->pm.get_engine_clock = &radeon_legacy_get_engine_clock;
2361926deccbSFrançois Tigeot 			rdev->asic->pm.set_engine_clock = &radeon_legacy_set_engine_clock;
2362926deccbSFrançois Tigeot 			rdev->asic->pm.get_memory_clock = &radeon_legacy_get_memory_clock;
2363926deccbSFrançois Tigeot 			rdev->asic->pm.set_memory_clock = NULL;
2364926deccbSFrançois Tigeot 			rdev->asic->display.set_backlight_level = &radeon_legacy_set_backlight_level;
2365926deccbSFrançois Tigeot 		}
2366926deccbSFrançois Tigeot 		break;
2367926deccbSFrançois Tigeot 	case CHIP_RS400:
2368926deccbSFrançois Tigeot 	case CHIP_RS480:
2369926deccbSFrançois Tigeot 		rdev->asic = &rs400_asic;
2370926deccbSFrançois Tigeot 		break;
2371926deccbSFrançois Tigeot 	case CHIP_RS600:
2372926deccbSFrançois Tigeot 		rdev->asic = &rs600_asic;
2373926deccbSFrançois Tigeot 		break;
2374926deccbSFrançois Tigeot 	case CHIP_RS690:
2375926deccbSFrançois Tigeot 	case CHIP_RS740:
2376926deccbSFrançois Tigeot 		rdev->asic = &rs690_asic;
2377926deccbSFrançois Tigeot 		break;
2378926deccbSFrançois Tigeot 	case CHIP_RV515:
2379926deccbSFrançois Tigeot 		rdev->asic = &rv515_asic;
2380926deccbSFrançois Tigeot 		break;
2381926deccbSFrançois Tigeot 	case CHIP_R520:
2382926deccbSFrançois Tigeot 	case CHIP_RV530:
2383926deccbSFrançois Tigeot 	case CHIP_RV560:
2384926deccbSFrançois Tigeot 	case CHIP_RV570:
2385926deccbSFrançois Tigeot 	case CHIP_R580:
2386926deccbSFrançois Tigeot 		rdev->asic = &r520_asic;
2387926deccbSFrançois Tigeot 		break;
2388926deccbSFrançois Tigeot 	case CHIP_R600:
238957e252bfSMichael Neumann 		rdev->asic = &r600_asic;
239057e252bfSMichael Neumann 		break;
2391926deccbSFrançois Tigeot 	case CHIP_RV610:
2392926deccbSFrançois Tigeot 	case CHIP_RV630:
2393926deccbSFrançois Tigeot 	case CHIP_RV620:
2394926deccbSFrançois Tigeot 	case CHIP_RV635:
2395926deccbSFrançois Tigeot 	case CHIP_RV670:
239657e252bfSMichael Neumann 		rdev->asic = &rv6xx_asic;
2397f43cf1b1SMichael Neumann 		rdev->has_uvd = true;
2398926deccbSFrançois Tigeot 		break;
2399926deccbSFrançois Tigeot 	case CHIP_RS780:
2400926deccbSFrançois Tigeot 	case CHIP_RS880:
2401926deccbSFrançois Tigeot 		rdev->asic = &rs780_asic;
2402591d5043SFrançois Tigeot 		/* 760G/780V/880V don't have UVD */
2403591d5043SFrançois Tigeot 		if ((rdev->pdev->device == 0x9616)||
2404591d5043SFrançois Tigeot 		    (rdev->pdev->device == 0x9611)||
2405591d5043SFrançois Tigeot 		    (rdev->pdev->device == 0x9613)||
2406591d5043SFrançois Tigeot 		    (rdev->pdev->device == 0x9711)||
2407591d5043SFrançois Tigeot 		    (rdev->pdev->device == 0x9713))
2408591d5043SFrançois Tigeot 			rdev->has_uvd = false;
2409591d5043SFrançois Tigeot 		else
2410f43cf1b1SMichael Neumann 			rdev->has_uvd = true;
2411926deccbSFrançois Tigeot 		break;
2412926deccbSFrançois Tigeot 	case CHIP_RV770:
2413926deccbSFrançois Tigeot 	case CHIP_RV730:
2414926deccbSFrançois Tigeot 	case CHIP_RV710:
2415926deccbSFrançois Tigeot 	case CHIP_RV740:
2416926deccbSFrançois Tigeot 		rdev->asic = &rv770_asic;
2417f43cf1b1SMichael Neumann 		rdev->has_uvd = true;
2418926deccbSFrançois Tigeot 		break;
2419926deccbSFrançois Tigeot 	case CHIP_CEDAR:
2420926deccbSFrançois Tigeot 	case CHIP_REDWOOD:
2421926deccbSFrançois Tigeot 	case CHIP_JUNIPER:
2422926deccbSFrançois Tigeot 	case CHIP_CYPRESS:
2423926deccbSFrançois Tigeot 	case CHIP_HEMLOCK:
2424926deccbSFrançois Tigeot 		/* set num crtcs */
2425926deccbSFrançois Tigeot 		if (rdev->family == CHIP_CEDAR)
2426926deccbSFrançois Tigeot 			rdev->num_crtc = 4;
2427926deccbSFrançois Tigeot 		else
2428926deccbSFrançois Tigeot 			rdev->num_crtc = 6;
2429926deccbSFrançois Tigeot 		rdev->asic = &evergreen_asic;
2430f43cf1b1SMichael Neumann 		rdev->has_uvd = true;
2431926deccbSFrançois Tigeot 		break;
2432926deccbSFrançois Tigeot 	case CHIP_PALM:
2433926deccbSFrançois Tigeot 	case CHIP_SUMO:
2434926deccbSFrançois Tigeot 	case CHIP_SUMO2:
2435926deccbSFrançois Tigeot 		rdev->asic = &sumo_asic;
2436f43cf1b1SMichael Neumann 		rdev->has_uvd = true;
2437926deccbSFrançois Tigeot 		break;
2438926deccbSFrançois Tigeot 	case CHIP_BARTS:
2439926deccbSFrançois Tigeot 	case CHIP_TURKS:
2440926deccbSFrançois Tigeot 	case CHIP_CAICOS:
2441926deccbSFrançois Tigeot 		/* set num crtcs */
2442926deccbSFrançois Tigeot 		if (rdev->family == CHIP_CAICOS)
2443926deccbSFrançois Tigeot 			rdev->num_crtc = 4;
2444926deccbSFrançois Tigeot 		else
2445926deccbSFrançois Tigeot 			rdev->num_crtc = 6;
2446926deccbSFrançois Tigeot 		rdev->asic = &btc_asic;
2447f43cf1b1SMichael Neumann 		rdev->has_uvd = true;
2448926deccbSFrançois Tigeot 		break;
2449926deccbSFrançois Tigeot 	case CHIP_CAYMAN:
2450926deccbSFrançois Tigeot 		rdev->asic = &cayman_asic;
2451926deccbSFrançois Tigeot 		/* set num crtcs */
2452926deccbSFrançois Tigeot 		rdev->num_crtc = 6;
2453f43cf1b1SMichael Neumann 		rdev->has_uvd = true;
2454926deccbSFrançois Tigeot 		break;
2455926deccbSFrançois Tigeot 	case CHIP_ARUBA:
2456926deccbSFrançois Tigeot 		rdev->asic = &trinity_asic;
2457926deccbSFrançois Tigeot 		/* set num crtcs */
2458926deccbSFrançois Tigeot 		rdev->num_crtc = 4;
2459f43cf1b1SMichael Neumann 		rdev->has_uvd = true;
2460*d78d3a22SFrançois Tigeot 		rdev->has_vce = true;
2461c59a5c48SFrançois Tigeot 		rdev->cg_flags =
2462c59a5c48SFrançois Tigeot 			RADEON_CG_SUPPORT_VCE_MGCG;
2463926deccbSFrançois Tigeot 		break;
2464926deccbSFrançois Tigeot 	case CHIP_TAHITI:
2465926deccbSFrançois Tigeot 	case CHIP_PITCAIRN:
2466926deccbSFrançois Tigeot 	case CHIP_VERDE:
2467b403bed8SMichael Neumann 	case CHIP_OLAND:
2468f43cf1b1SMichael Neumann 	case CHIP_HAINAN:
2469926deccbSFrançois Tigeot 		rdev->asic = &si_asic;
2470926deccbSFrançois Tigeot 		/* set num crtcs */
2471f43cf1b1SMichael Neumann 		if (rdev->family == CHIP_HAINAN)
2472f43cf1b1SMichael Neumann 			rdev->num_crtc = 0;
2473f43cf1b1SMichael Neumann 		else if (rdev->family == CHIP_OLAND)
2474b403bed8SMichael Neumann 			rdev->num_crtc = 2;
2475b403bed8SMichael Neumann 		else
2476926deccbSFrançois Tigeot 			rdev->num_crtc = 6;
2477*d78d3a22SFrançois Tigeot 		if (rdev->family == CHIP_HAINAN) {
2478f43cf1b1SMichael Neumann 			rdev->has_uvd = false;
2479*d78d3a22SFrançois Tigeot 			rdev->has_vce = false;
2480*d78d3a22SFrançois Tigeot 		} else {
2481f43cf1b1SMichael Neumann 			rdev->has_uvd = true;
2482*d78d3a22SFrançois Tigeot 			rdev->has_vce = true;
2483*d78d3a22SFrançois Tigeot 		}
24844cd92098Szrj 		switch (rdev->family) {
24854cd92098Szrj 		case CHIP_TAHITI:
24864cd92098Szrj 			rdev->cg_flags =
24874cd92098Szrj 				RADEON_CG_SUPPORT_GFX_MGCG |
24884cd92098Szrj 				RADEON_CG_SUPPORT_GFX_MGLS |
24894cd92098Szrj 				/*RADEON_CG_SUPPORT_GFX_CGCG |*/
24904cd92098Szrj 				RADEON_CG_SUPPORT_GFX_CGLS |
24914cd92098Szrj 				RADEON_CG_SUPPORT_GFX_CGTS |
24924cd92098Szrj 				RADEON_CG_SUPPORT_GFX_CP_LS |
24934cd92098Szrj 				RADEON_CG_SUPPORT_MC_MGCG |
24944cd92098Szrj 				RADEON_CG_SUPPORT_SDMA_MGCG |
24954cd92098Szrj 				RADEON_CG_SUPPORT_BIF_LS |
24964cd92098Szrj 				RADEON_CG_SUPPORT_VCE_MGCG |
24974cd92098Szrj 				RADEON_CG_SUPPORT_UVD_MGCG |
24984cd92098Szrj 				RADEON_CG_SUPPORT_HDP_LS |
24994cd92098Szrj 				RADEON_CG_SUPPORT_HDP_MGCG;
25004cd92098Szrj 			rdev->pg_flags = 0;
25014cd92098Szrj 			break;
25024cd92098Szrj 		case CHIP_PITCAIRN:
25034cd92098Szrj 			rdev->cg_flags =
25044cd92098Szrj 				RADEON_CG_SUPPORT_GFX_MGCG |
25054cd92098Szrj 				RADEON_CG_SUPPORT_GFX_MGLS |
25064cd92098Szrj 				/*RADEON_CG_SUPPORT_GFX_CGCG |*/
25074cd92098Szrj 				RADEON_CG_SUPPORT_GFX_CGLS |
25084cd92098Szrj 				RADEON_CG_SUPPORT_GFX_CGTS |
25094cd92098Szrj 				RADEON_CG_SUPPORT_GFX_CP_LS |
25104cd92098Szrj 				RADEON_CG_SUPPORT_GFX_RLC_LS |
25114cd92098Szrj 				RADEON_CG_SUPPORT_MC_LS |
25124cd92098Szrj 				RADEON_CG_SUPPORT_MC_MGCG |
25134cd92098Szrj 				RADEON_CG_SUPPORT_SDMA_MGCG |
25144cd92098Szrj 				RADEON_CG_SUPPORT_BIF_LS |
25154cd92098Szrj 				RADEON_CG_SUPPORT_VCE_MGCG |
25164cd92098Szrj 				RADEON_CG_SUPPORT_UVD_MGCG |
25174cd92098Szrj 				RADEON_CG_SUPPORT_HDP_LS |
25184cd92098Szrj 				RADEON_CG_SUPPORT_HDP_MGCG;
25194cd92098Szrj 			rdev->pg_flags = 0;
25204cd92098Szrj 			break;
25214cd92098Szrj 		case CHIP_VERDE:
25224cd92098Szrj 			rdev->cg_flags =
25234cd92098Szrj 				RADEON_CG_SUPPORT_GFX_MGCG |
25244cd92098Szrj 				RADEON_CG_SUPPORT_GFX_MGLS |
25254cd92098Szrj 				/*RADEON_CG_SUPPORT_GFX_CGCG |*/
25264cd92098Szrj 				RADEON_CG_SUPPORT_GFX_CGLS |
25274cd92098Szrj 				RADEON_CG_SUPPORT_GFX_CGTS |
25284cd92098Szrj 				RADEON_CG_SUPPORT_GFX_CP_LS |
25294cd92098Szrj 				RADEON_CG_SUPPORT_GFX_RLC_LS |
25304cd92098Szrj 				RADEON_CG_SUPPORT_MC_LS |
25314cd92098Szrj 				RADEON_CG_SUPPORT_MC_MGCG |
25324cd92098Szrj 				RADEON_CG_SUPPORT_SDMA_MGCG |
25334cd92098Szrj 				RADEON_CG_SUPPORT_BIF_LS |
25344cd92098Szrj 				RADEON_CG_SUPPORT_VCE_MGCG |
25354cd92098Szrj 				RADEON_CG_SUPPORT_UVD_MGCG |
25364cd92098Szrj 				RADEON_CG_SUPPORT_HDP_LS |
25374cd92098Szrj 				RADEON_CG_SUPPORT_HDP_MGCG;
25384cd92098Szrj 			rdev->pg_flags = 0 |
25394cd92098Szrj 				/*RADEON_PG_SUPPORT_GFX_PG | */
25404cd92098Szrj 				RADEON_PG_SUPPORT_SDMA;
25414cd92098Szrj 			break;
25424cd92098Szrj 		case CHIP_OLAND:
25434cd92098Szrj 			rdev->cg_flags =
25444cd92098Szrj 				RADEON_CG_SUPPORT_GFX_MGCG |
25454cd92098Szrj 				RADEON_CG_SUPPORT_GFX_MGLS |
25464cd92098Szrj 				/*RADEON_CG_SUPPORT_GFX_CGCG |*/
25474cd92098Szrj 				RADEON_CG_SUPPORT_GFX_CGLS |
25484cd92098Szrj 				RADEON_CG_SUPPORT_GFX_CGTS |
25494cd92098Szrj 				RADEON_CG_SUPPORT_GFX_CP_LS |
25504cd92098Szrj 				RADEON_CG_SUPPORT_GFX_RLC_LS |
25514cd92098Szrj 				RADEON_CG_SUPPORT_MC_LS |
25524cd92098Szrj 				RADEON_CG_SUPPORT_MC_MGCG |
25534cd92098Szrj 				RADEON_CG_SUPPORT_SDMA_MGCG |
25544cd92098Szrj 				RADEON_CG_SUPPORT_BIF_LS |
25554cd92098Szrj 				RADEON_CG_SUPPORT_UVD_MGCG |
25564cd92098Szrj 				RADEON_CG_SUPPORT_HDP_LS |
25574cd92098Szrj 				RADEON_CG_SUPPORT_HDP_MGCG;
25584cd92098Szrj 			rdev->pg_flags = 0;
25594cd92098Szrj 			break;
25604cd92098Szrj 		case CHIP_HAINAN:
25614cd92098Szrj 			rdev->cg_flags =
25624cd92098Szrj 				RADEON_CG_SUPPORT_GFX_MGCG |
25634cd92098Szrj 				RADEON_CG_SUPPORT_GFX_MGLS |
25644cd92098Szrj 				/*RADEON_CG_SUPPORT_GFX_CGCG |*/
25654cd92098Szrj 				RADEON_CG_SUPPORT_GFX_CGLS |
25664cd92098Szrj 				RADEON_CG_SUPPORT_GFX_CGTS |
25674cd92098Szrj 				RADEON_CG_SUPPORT_GFX_CP_LS |
25684cd92098Szrj 				RADEON_CG_SUPPORT_GFX_RLC_LS |
25694cd92098Szrj 				RADEON_CG_SUPPORT_MC_LS |
25704cd92098Szrj 				RADEON_CG_SUPPORT_MC_MGCG |
25714cd92098Szrj 				RADEON_CG_SUPPORT_SDMA_MGCG |
25724cd92098Szrj 				RADEON_CG_SUPPORT_BIF_LS |
25734cd92098Szrj 				RADEON_CG_SUPPORT_HDP_LS |
25744cd92098Szrj 				RADEON_CG_SUPPORT_HDP_MGCG;
25754cd92098Szrj 			rdev->pg_flags = 0;
25764cd92098Szrj 			break;
25774cd92098Szrj 		default:
25784cd92098Szrj 			rdev->cg_flags = 0;
25794cd92098Szrj 			rdev->pg_flags = 0;
25804cd92098Szrj 			break;
25814cd92098Szrj 		}
2582926deccbSFrançois Tigeot 		break;
258357e252bfSMichael Neumann 	case CHIP_BONAIRE:
2584c6f73aabSFrançois Tigeot 	case CHIP_HAWAII:
258557e252bfSMichael Neumann 		rdev->asic = &ci_asic;
258657e252bfSMichael Neumann 		rdev->num_crtc = 6;
25874cd92098Szrj 		rdev->has_uvd = true;
2588*d78d3a22SFrançois Tigeot 		rdev->has_vce = true;
2589c6f73aabSFrançois Tigeot 		if (rdev->family == CHIP_BONAIRE) {
25904cd92098Szrj 			rdev->cg_flags =
25914cd92098Szrj 				RADEON_CG_SUPPORT_GFX_MGCG |
25924cd92098Szrj 				RADEON_CG_SUPPORT_GFX_MGLS |
25934cd92098Szrj 				/*RADEON_CG_SUPPORT_GFX_CGCG |*/
25944cd92098Szrj 				RADEON_CG_SUPPORT_GFX_CGLS |
25954cd92098Szrj 				RADEON_CG_SUPPORT_GFX_CGTS |
25964cd92098Szrj 				RADEON_CG_SUPPORT_GFX_CGTS_LS |
25974cd92098Szrj 				RADEON_CG_SUPPORT_GFX_CP_LS |
25984cd92098Szrj 				RADEON_CG_SUPPORT_MC_LS |
25994cd92098Szrj 				RADEON_CG_SUPPORT_MC_MGCG |
26004cd92098Szrj 				RADEON_CG_SUPPORT_SDMA_MGCG |
26014cd92098Szrj 				RADEON_CG_SUPPORT_SDMA_LS |
26024cd92098Szrj 				RADEON_CG_SUPPORT_BIF_LS |
26034cd92098Szrj 				RADEON_CG_SUPPORT_VCE_MGCG |
26044cd92098Szrj 				RADEON_CG_SUPPORT_UVD_MGCG |
26054cd92098Szrj 				RADEON_CG_SUPPORT_HDP_LS |
26064cd92098Szrj 				RADEON_CG_SUPPORT_HDP_MGCG;
26074cd92098Szrj 			rdev->pg_flags = 0;
2608c6f73aabSFrançois Tigeot 		} else {
2609c6f73aabSFrançois Tigeot 			rdev->cg_flags =
2610c6f73aabSFrançois Tigeot 				RADEON_CG_SUPPORT_GFX_MGCG |
2611c6f73aabSFrançois Tigeot 				RADEON_CG_SUPPORT_GFX_MGLS |
2612c6f73aabSFrançois Tigeot 				/*RADEON_CG_SUPPORT_GFX_CGCG |*/
2613c6f73aabSFrançois Tigeot 				RADEON_CG_SUPPORT_GFX_CGLS |
2614c6f73aabSFrançois Tigeot 				RADEON_CG_SUPPORT_GFX_CGTS |
2615c6f73aabSFrançois Tigeot 				RADEON_CG_SUPPORT_GFX_CP_LS |
2616c6f73aabSFrançois Tigeot 				RADEON_CG_SUPPORT_MC_LS |
2617c6f73aabSFrançois Tigeot 				RADEON_CG_SUPPORT_MC_MGCG |
2618c6f73aabSFrançois Tigeot 				RADEON_CG_SUPPORT_SDMA_MGCG |
2619c6f73aabSFrançois Tigeot 				RADEON_CG_SUPPORT_SDMA_LS |
2620c6f73aabSFrançois Tigeot 				RADEON_CG_SUPPORT_BIF_LS |
2621c6f73aabSFrançois Tigeot 				RADEON_CG_SUPPORT_VCE_MGCG |
2622c6f73aabSFrançois Tigeot 				RADEON_CG_SUPPORT_UVD_MGCG |
2623c6f73aabSFrançois Tigeot 				RADEON_CG_SUPPORT_HDP_LS |
2624c6f73aabSFrançois Tigeot 				RADEON_CG_SUPPORT_HDP_MGCG;
2625c6f73aabSFrançois Tigeot 			rdev->pg_flags = 0;
2626c6f73aabSFrançois Tigeot 		}
262757e252bfSMichael Neumann 		break;
262857e252bfSMichael Neumann 	case CHIP_KAVERI:
262957e252bfSMichael Neumann 	case CHIP_KABINI:
2630c6f73aabSFrançois Tigeot 	case CHIP_MULLINS:
263157e252bfSMichael Neumann 		rdev->asic = &kv_asic;
263257e252bfSMichael Neumann 		/* set num crtcs */
26334cd92098Szrj 		if (rdev->family == CHIP_KAVERI) {
263457e252bfSMichael Neumann 			rdev->num_crtc = 4;
26354cd92098Szrj 			rdev->cg_flags =
26364cd92098Szrj 				RADEON_CG_SUPPORT_GFX_MGCG |
26374cd92098Szrj 				RADEON_CG_SUPPORT_GFX_MGLS |
26384cd92098Szrj 				/*RADEON_CG_SUPPORT_GFX_CGCG |*/
26394cd92098Szrj 				RADEON_CG_SUPPORT_GFX_CGLS |
26404cd92098Szrj 				RADEON_CG_SUPPORT_GFX_CGTS |
26414cd92098Szrj 				RADEON_CG_SUPPORT_GFX_CGTS_LS |
26424cd92098Szrj 				RADEON_CG_SUPPORT_GFX_CP_LS |
26434cd92098Szrj 				RADEON_CG_SUPPORT_SDMA_MGCG |
26444cd92098Szrj 				RADEON_CG_SUPPORT_SDMA_LS |
26454cd92098Szrj 				RADEON_CG_SUPPORT_BIF_LS |
26464cd92098Szrj 				RADEON_CG_SUPPORT_VCE_MGCG |
26474cd92098Szrj 				RADEON_CG_SUPPORT_UVD_MGCG |
26484cd92098Szrj 				RADEON_CG_SUPPORT_HDP_LS |
26494cd92098Szrj 				RADEON_CG_SUPPORT_HDP_MGCG;
26504cd92098Szrj 			rdev->pg_flags = 0;
26514cd92098Szrj 				/*RADEON_PG_SUPPORT_GFX_PG |
26524cd92098Szrj 				RADEON_PG_SUPPORT_GFX_SMG |
26534cd92098Szrj 				RADEON_PG_SUPPORT_GFX_DMG |
26544cd92098Szrj 				RADEON_PG_SUPPORT_UVD |
26554cd92098Szrj 				RADEON_PG_SUPPORT_VCE |
26564cd92098Szrj 				RADEON_PG_SUPPORT_CP |
26574cd92098Szrj 				RADEON_PG_SUPPORT_GDS |
26584cd92098Szrj 				RADEON_PG_SUPPORT_RLC_SMU_HS |
26594cd92098Szrj 				RADEON_PG_SUPPORT_ACP |
26604cd92098Szrj 				RADEON_PG_SUPPORT_SAMU;*/
26614cd92098Szrj 		} else {
266257e252bfSMichael Neumann 			rdev->num_crtc = 2;
26634cd92098Szrj 			rdev->cg_flags =
26644cd92098Szrj 				RADEON_CG_SUPPORT_GFX_MGCG |
26654cd92098Szrj 				RADEON_CG_SUPPORT_GFX_MGLS |
26664cd92098Szrj 				/*RADEON_CG_SUPPORT_GFX_CGCG |*/
26674cd92098Szrj 				RADEON_CG_SUPPORT_GFX_CGLS |
26684cd92098Szrj 				RADEON_CG_SUPPORT_GFX_CGTS |
26694cd92098Szrj 				RADEON_CG_SUPPORT_GFX_CGTS_LS |
26704cd92098Szrj 				RADEON_CG_SUPPORT_GFX_CP_LS |
26714cd92098Szrj 				RADEON_CG_SUPPORT_SDMA_MGCG |
26724cd92098Szrj 				RADEON_CG_SUPPORT_SDMA_LS |
26734cd92098Szrj 				RADEON_CG_SUPPORT_BIF_LS |
26744cd92098Szrj 				RADEON_CG_SUPPORT_VCE_MGCG |
26754cd92098Szrj 				RADEON_CG_SUPPORT_UVD_MGCG |
26764cd92098Szrj 				RADEON_CG_SUPPORT_HDP_LS |
26774cd92098Szrj 				RADEON_CG_SUPPORT_HDP_MGCG;
26784cd92098Szrj 			rdev->pg_flags = 0;
26794cd92098Szrj 				/*RADEON_PG_SUPPORT_GFX_PG |
26804cd92098Szrj 				RADEON_PG_SUPPORT_GFX_SMG |
26814cd92098Szrj 				RADEON_PG_SUPPORT_UVD |
26824cd92098Szrj 				RADEON_PG_SUPPORT_VCE |
26834cd92098Szrj 				RADEON_PG_SUPPORT_CP |
26844cd92098Szrj 				RADEON_PG_SUPPORT_GDS |
26854cd92098Szrj 				RADEON_PG_SUPPORT_RLC_SMU_HS |
26864cd92098Szrj 				RADEON_PG_SUPPORT_SAMU;*/
26874cd92098Szrj 		}
26884cd92098Szrj 		rdev->has_uvd = true;
2689*d78d3a22SFrançois Tigeot 		rdev->has_vce = true;
269057e252bfSMichael Neumann 		break;
2691926deccbSFrançois Tigeot 	default:
2692926deccbSFrançois Tigeot 		/* FIXME: not supported yet */
2693926deccbSFrançois Tigeot 		return -EINVAL;
2694926deccbSFrançois Tigeot 	}
2695926deccbSFrançois Tigeot 
2696926deccbSFrançois Tigeot 	if (rdev->flags & RADEON_IS_IGP) {
2697926deccbSFrançois Tigeot 		rdev->asic->pm.get_memory_clock = NULL;
2698926deccbSFrançois Tigeot 		rdev->asic->pm.set_memory_clock = NULL;
2699926deccbSFrançois Tigeot 	}
2700926deccbSFrançois Tigeot 
2701*d78d3a22SFrançois Tigeot 	if (!radeon_uvd)
2702*d78d3a22SFrançois Tigeot 		rdev->has_uvd = false;
2703*d78d3a22SFrançois Tigeot 	if (!radeon_vce)
2704*d78d3a22SFrançois Tigeot 		rdev->has_vce = false;
2705*d78d3a22SFrançois Tigeot 
2706926deccbSFrançois Tigeot 	return 0;
2707926deccbSFrançois Tigeot }
2708926deccbSFrançois Tigeot 
2709