xref: /dflybsd-src/sys/dev/drm/radeon/radeon_asic.h (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 #ifndef __RADEON_ASIC_H__
29926deccbSFrançois Tigeot #define __RADEON_ASIC_H__
30926deccbSFrançois Tigeot 
31926deccbSFrançois Tigeot /*
32926deccbSFrançois Tigeot  * common functions
33926deccbSFrançois Tigeot  */
34926deccbSFrançois Tigeot uint32_t radeon_legacy_get_engine_clock(struct radeon_device *rdev);
35926deccbSFrançois Tigeot void radeon_legacy_set_engine_clock(struct radeon_device *rdev, uint32_t eng_clock);
36926deccbSFrançois Tigeot uint32_t radeon_legacy_get_memory_clock(struct radeon_device *rdev);
37926deccbSFrançois Tigeot void radeon_legacy_set_clock_gating(struct radeon_device *rdev, int enable);
38926deccbSFrançois Tigeot 
39926deccbSFrançois Tigeot uint32_t radeon_atom_get_engine_clock(struct radeon_device *rdev);
40926deccbSFrançois Tigeot void radeon_atom_set_engine_clock(struct radeon_device *rdev, uint32_t eng_clock);
41926deccbSFrançois Tigeot uint32_t radeon_atom_get_memory_clock(struct radeon_device *rdev);
42926deccbSFrançois Tigeot void radeon_atom_set_memory_clock(struct radeon_device *rdev, uint32_t mem_clock);
43926deccbSFrançois Tigeot void radeon_atom_set_clock_gating(struct radeon_device *rdev, int enable);
44926deccbSFrançois Tigeot 
45926deccbSFrançois Tigeot void atombios_set_backlight_level(struct radeon_encoder *radeon_encoder, u8 level);
46926deccbSFrançois Tigeot u8 atombios_get_backlight_level(struct radeon_encoder *radeon_encoder);
47926deccbSFrançois Tigeot void radeon_legacy_set_backlight_level(struct radeon_encoder *radeon_encoder, u8 level);
48926deccbSFrançois Tigeot u8 radeon_legacy_get_backlight_level(struct radeon_encoder *radeon_encoder);
49926deccbSFrançois Tigeot 
50926deccbSFrançois Tigeot /*
51926deccbSFrançois Tigeot  * r100,rv100,rs100,rv200,rs200
52926deccbSFrançois Tigeot  */
53926deccbSFrançois Tigeot struct r100_mc_save {
54926deccbSFrançois Tigeot 	u32	GENMO_WT;
55926deccbSFrançois Tigeot 	u32	CRTC_EXT_CNTL;
56926deccbSFrançois Tigeot 	u32	CRTC_GEN_CNTL;
57926deccbSFrançois Tigeot 	u32	CRTC2_GEN_CNTL;
58926deccbSFrançois Tigeot 	u32	CUR_OFFSET;
59926deccbSFrançois Tigeot 	u32	CUR2_OFFSET;
60926deccbSFrançois Tigeot };
61926deccbSFrançois Tigeot int r100_init(struct radeon_device *rdev);
62926deccbSFrançois Tigeot void r100_fini(struct radeon_device *rdev);
63926deccbSFrançois Tigeot int r100_suspend(struct radeon_device *rdev);
64926deccbSFrançois Tigeot int r100_resume(struct radeon_device *rdev);
65926deccbSFrançois Tigeot void r100_vga_set_state(struct radeon_device *rdev, bool state);
66926deccbSFrançois Tigeot bool r100_gpu_is_lockup(struct radeon_device *rdev, struct radeon_ring *cp);
67*d78d3a22SFrançois Tigeot int r100_asic_reset(struct radeon_device *rdev, bool hard);
68926deccbSFrançois Tigeot u32 r100_get_vblank_counter(struct radeon_device *rdev, int crtc);
69926deccbSFrançois Tigeot void r100_pci_gart_tlb_flush(struct radeon_device *rdev);
707dcf36dcSFrançois Tigeot uint64_t r100_pci_gart_get_page_entry(uint64_t addr, uint32_t flags);
71c6f73aabSFrançois Tigeot void r100_pci_gart_set_page(struct radeon_device *rdev, unsigned i,
727dcf36dcSFrançois Tigeot 			    uint64_t entry);
73926deccbSFrançois Tigeot void r100_ring_start(struct radeon_device *rdev, struct radeon_ring *ring);
74926deccbSFrançois Tigeot int r100_irq_set(struct radeon_device *rdev);
75926deccbSFrançois Tigeot irqreturn_t r100_irq_process(struct radeon_device *rdev);
76926deccbSFrançois Tigeot void r100_fence_ring_emit(struct radeon_device *rdev,
77926deccbSFrançois Tigeot 			  struct radeon_fence *fence);
78c6f73aabSFrançois Tigeot bool r100_semaphore_ring_emit(struct radeon_device *rdev,
79926deccbSFrançois Tigeot 			      struct radeon_ring *cp,
80926deccbSFrançois Tigeot 			      struct radeon_semaphore *semaphore,
81926deccbSFrançois Tigeot 			      bool emit_wait);
82926deccbSFrançois Tigeot int r100_cs_parse(struct radeon_cs_parser *p);
83926deccbSFrançois Tigeot void r100_pll_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
84926deccbSFrançois Tigeot uint32_t r100_pll_rreg(struct radeon_device *rdev, uint32_t reg);
851cfef1a5SFrançois Tigeot struct radeon_fence *r100_copy_blit(struct radeon_device *rdev,
86926deccbSFrançois Tigeot 				    uint64_t src_offset,
87926deccbSFrançois Tigeot 				    uint64_t dst_offset,
88926deccbSFrançois Tigeot 				    unsigned num_gpu_pages,
891cfef1a5SFrançois Tigeot 				    struct reservation_object *resv);
90926deccbSFrançois Tigeot int r100_set_surface_reg(struct radeon_device *rdev, int reg,
91926deccbSFrançois Tigeot 			 uint32_t tiling_flags, uint32_t pitch,
92926deccbSFrançois Tigeot 			 uint32_t offset, uint32_t obj_size);
93926deccbSFrançois Tigeot void r100_clear_surface_reg(struct radeon_device *rdev, int reg);
94926deccbSFrançois Tigeot void r100_bandwidth_update(struct radeon_device *rdev);
95926deccbSFrançois Tigeot void r100_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
96926deccbSFrançois Tigeot int r100_ring_test(struct radeon_device *rdev, struct radeon_ring *cp);
97926deccbSFrançois Tigeot void r100_hpd_init(struct radeon_device *rdev);
98926deccbSFrançois Tigeot void r100_hpd_fini(struct radeon_device *rdev);
99926deccbSFrançois Tigeot bool r100_hpd_sense(struct radeon_device *rdev, enum radeon_hpd_id hpd);
100926deccbSFrançois Tigeot void r100_hpd_set_polarity(struct radeon_device *rdev,
101926deccbSFrançois Tigeot 			   enum radeon_hpd_id hpd);
102926deccbSFrançois Tigeot int r100_debugfs_rbbm_init(struct radeon_device *rdev);
103926deccbSFrançois Tigeot int r100_debugfs_cp_init(struct radeon_device *rdev);
104926deccbSFrançois Tigeot void r100_cp_disable(struct radeon_device *rdev);
105926deccbSFrançois Tigeot int r100_cp_init(struct radeon_device *rdev, unsigned ring_size);
106926deccbSFrançois Tigeot void r100_cp_fini(struct radeon_device *rdev);
107926deccbSFrançois Tigeot int r100_pci_gart_init(struct radeon_device *rdev);
108926deccbSFrançois Tigeot void r100_pci_gart_fini(struct radeon_device *rdev);
109926deccbSFrançois Tigeot int r100_pci_gart_enable(struct radeon_device *rdev);
110926deccbSFrançois Tigeot void r100_pci_gart_disable(struct radeon_device *rdev);
111926deccbSFrançois Tigeot int r100_debugfs_mc_info_init(struct radeon_device *rdev);
112926deccbSFrançois Tigeot int r100_gui_wait_for_idle(struct radeon_device *rdev);
113926deccbSFrançois Tigeot int r100_ib_test(struct radeon_device *rdev, struct radeon_ring *ring);
114926deccbSFrançois Tigeot void r100_irq_disable(struct radeon_device *rdev);
115926deccbSFrançois Tigeot void r100_mc_stop(struct radeon_device *rdev, struct r100_mc_save *save);
116926deccbSFrançois Tigeot void r100_mc_resume(struct radeon_device *rdev, struct r100_mc_save *save);
117926deccbSFrançois Tigeot void r100_vram_init_sizes(struct radeon_device *rdev);
118926deccbSFrançois Tigeot int r100_cp_reset(struct radeon_device *rdev);
119926deccbSFrançois Tigeot void r100_vga_render_disable(struct radeon_device *rdev);
120926deccbSFrançois Tigeot void r100_restore_sanity(struct radeon_device *rdev);
121926deccbSFrançois Tigeot int r100_cs_track_check_pkt3_indx_buffer(struct radeon_cs_parser *p,
122926deccbSFrançois Tigeot 					 struct radeon_cs_packet *pkt,
123926deccbSFrançois Tigeot 					 struct radeon_bo *robj);
124926deccbSFrançois Tigeot int r100_cs_parse_packet0(struct radeon_cs_parser *p,
125926deccbSFrançois Tigeot 			  struct radeon_cs_packet *pkt,
126926deccbSFrançois Tigeot 			  const unsigned *auth, unsigned n,
127926deccbSFrançois Tigeot 			  radeon_packet0_check_t check);
128926deccbSFrançois Tigeot int r100_cs_packet_parse(struct radeon_cs_parser *p,
129926deccbSFrançois Tigeot 			 struct radeon_cs_packet *pkt,
130926deccbSFrançois Tigeot 			 unsigned idx);
131926deccbSFrançois Tigeot void r100_enable_bm(struct radeon_device *rdev);
132926deccbSFrançois Tigeot void r100_set_common_regs(struct radeon_device *rdev);
133926deccbSFrançois Tigeot void r100_bm_disable(struct radeon_device *rdev);
134926deccbSFrançois Tigeot extern bool r100_gui_idle(struct radeon_device *rdev);
135926deccbSFrançois Tigeot extern void r100_pm_misc(struct radeon_device *rdev);
136926deccbSFrançois Tigeot extern void r100_pm_prepare(struct radeon_device *rdev);
137926deccbSFrançois Tigeot extern void r100_pm_finish(struct radeon_device *rdev);
138926deccbSFrançois Tigeot extern void r100_pm_init_profile(struct radeon_device *rdev);
139926deccbSFrançois Tigeot extern void r100_pm_get_dynpm_state(struct radeon_device *rdev);
140c6f73aabSFrançois Tigeot extern void r100_page_flip(struct radeon_device *rdev, int crtc,
141*d78d3a22SFrançois Tigeot 			   u64 crtc_base, bool async);
142c6f73aabSFrançois Tigeot extern bool r100_page_flip_pending(struct radeon_device *rdev, int crtc);
143926deccbSFrançois Tigeot extern void r100_wait_for_vblank(struct radeon_device *rdev, int crtc);
144926deccbSFrançois Tigeot extern int r100_mc_wait_for_idle(struct radeon_device *rdev);
145926deccbSFrançois Tigeot 
146c6f73aabSFrançois Tigeot u32 r100_gfx_get_rptr(struct radeon_device *rdev,
147c6f73aabSFrançois Tigeot 		      struct radeon_ring *ring);
148c6f73aabSFrançois Tigeot u32 r100_gfx_get_wptr(struct radeon_device *rdev,
149c6f73aabSFrançois Tigeot 		      struct radeon_ring *ring);
150c6f73aabSFrançois Tigeot void r100_gfx_set_wptr(struct radeon_device *rdev,
151c6f73aabSFrançois Tigeot 		       struct radeon_ring *ring);
152c6f73aabSFrançois Tigeot 
153926deccbSFrançois Tigeot /*
154926deccbSFrançois Tigeot  * r200,rv250,rs300,rv280
155926deccbSFrançois Tigeot  */
1561cfef1a5SFrançois Tigeot struct radeon_fence *r200_copy_dma(struct radeon_device *rdev,
157926deccbSFrançois Tigeot 				   uint64_t src_offset,
158926deccbSFrançois Tigeot 				   uint64_t dst_offset,
159926deccbSFrançois Tigeot 				   unsigned num_gpu_pages,
1601cfef1a5SFrançois Tigeot 				   struct reservation_object *resv);
161926deccbSFrançois Tigeot void r200_set_safe_registers(struct radeon_device *rdev);
162926deccbSFrançois Tigeot 
163926deccbSFrançois Tigeot /*
164926deccbSFrançois Tigeot  * r300,r350,rv350,rv380
165926deccbSFrançois Tigeot  */
166926deccbSFrançois Tigeot extern int r300_init(struct radeon_device *rdev);
167926deccbSFrançois Tigeot extern void r300_fini(struct radeon_device *rdev);
168926deccbSFrançois Tigeot extern int r300_suspend(struct radeon_device *rdev);
169926deccbSFrançois Tigeot extern int r300_resume(struct radeon_device *rdev);
170*d78d3a22SFrançois Tigeot extern int r300_asic_reset(struct radeon_device *rdev, bool hard);
171926deccbSFrançois Tigeot extern void r300_ring_start(struct radeon_device *rdev, struct radeon_ring *ring);
172926deccbSFrançois Tigeot extern void r300_fence_ring_emit(struct radeon_device *rdev,
173926deccbSFrançois Tigeot 				struct radeon_fence *fence);
174926deccbSFrançois Tigeot extern int r300_cs_parse(struct radeon_cs_parser *p);
175926deccbSFrançois Tigeot extern void rv370_pcie_gart_tlb_flush(struct radeon_device *rdev);
1767dcf36dcSFrançois Tigeot extern uint64_t rv370_pcie_gart_get_page_entry(uint64_t addr, uint32_t flags);
177c6f73aabSFrançois Tigeot extern void rv370_pcie_gart_set_page(struct radeon_device *rdev, unsigned i,
1787dcf36dcSFrançois Tigeot 				     uint64_t entry);
179926deccbSFrançois Tigeot extern void rv370_set_pcie_lanes(struct radeon_device *rdev, int lanes);
180926deccbSFrançois Tigeot extern int rv370_get_pcie_lanes(struct radeon_device *rdev);
181926deccbSFrançois Tigeot extern void r300_set_reg_safe(struct radeon_device *rdev);
182926deccbSFrançois Tigeot extern void r300_mc_program(struct radeon_device *rdev);
183926deccbSFrançois Tigeot extern void r300_mc_init(struct radeon_device *rdev);
184926deccbSFrançois Tigeot extern void r300_clock_startup(struct radeon_device *rdev);
185926deccbSFrançois Tigeot extern int r300_mc_wait_for_idle(struct radeon_device *rdev);
186926deccbSFrançois Tigeot extern int rv370_pcie_gart_init(struct radeon_device *rdev);
187926deccbSFrançois Tigeot extern void rv370_pcie_gart_fini(struct radeon_device *rdev);
188926deccbSFrançois Tigeot extern int rv370_pcie_gart_enable(struct radeon_device *rdev);
189926deccbSFrançois Tigeot extern void rv370_pcie_gart_disable(struct radeon_device *rdev);
190926deccbSFrançois Tigeot 
191926deccbSFrançois Tigeot /*
192926deccbSFrançois Tigeot  * r420,r423,rv410
193926deccbSFrançois Tigeot  */
194926deccbSFrançois Tigeot extern int r420_init(struct radeon_device *rdev);
195926deccbSFrançois Tigeot extern void r420_fini(struct radeon_device *rdev);
196926deccbSFrançois Tigeot extern int r420_suspend(struct radeon_device *rdev);
197926deccbSFrançois Tigeot extern int r420_resume(struct radeon_device *rdev);
198926deccbSFrançois Tigeot extern void r420_pm_init_profile(struct radeon_device *rdev);
199926deccbSFrançois Tigeot extern u32 r420_mc_rreg(struct radeon_device *rdev, u32 reg);
200926deccbSFrançois Tigeot extern void r420_mc_wreg(struct radeon_device *rdev, u32 reg, u32 v);
201926deccbSFrançois Tigeot extern int r420_debugfs_pipes_info_init(struct radeon_device *rdev);
202926deccbSFrançois Tigeot extern void r420_pipes_init(struct radeon_device *rdev);
203926deccbSFrançois Tigeot 
204926deccbSFrançois Tigeot /*
205926deccbSFrançois Tigeot  * rs400,rs480
206926deccbSFrançois Tigeot  */
207926deccbSFrançois Tigeot extern int rs400_init(struct radeon_device *rdev);
208926deccbSFrançois Tigeot extern void rs400_fini(struct radeon_device *rdev);
209926deccbSFrançois Tigeot extern int rs400_suspend(struct radeon_device *rdev);
210926deccbSFrançois Tigeot extern int rs400_resume(struct radeon_device *rdev);
211926deccbSFrançois Tigeot void rs400_gart_tlb_flush(struct radeon_device *rdev);
2127dcf36dcSFrançois Tigeot uint64_t rs400_gart_get_page_entry(uint64_t addr, uint32_t flags);
213c6f73aabSFrançois Tigeot void rs400_gart_set_page(struct radeon_device *rdev, unsigned i,
2147dcf36dcSFrançois Tigeot 			 uint64_t entry);
215926deccbSFrançois Tigeot uint32_t rs400_mc_rreg(struct radeon_device *rdev, uint32_t reg);
216926deccbSFrançois Tigeot void rs400_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
217926deccbSFrançois Tigeot int rs400_gart_init(struct radeon_device *rdev);
218926deccbSFrançois Tigeot int rs400_gart_enable(struct radeon_device *rdev);
219926deccbSFrançois Tigeot void rs400_gart_adjust_size(struct radeon_device *rdev);
220926deccbSFrançois Tigeot void rs400_gart_disable(struct radeon_device *rdev);
221926deccbSFrançois Tigeot void rs400_gart_fini(struct radeon_device *rdev);
222926deccbSFrançois Tigeot extern int rs400_mc_wait_for_idle(struct radeon_device *rdev);
223926deccbSFrançois Tigeot 
224926deccbSFrançois Tigeot /*
225926deccbSFrançois Tigeot  * rs600.
226926deccbSFrançois Tigeot  */
227*d78d3a22SFrançois Tigeot extern int rs600_asic_reset(struct radeon_device *rdev, bool hard);
228926deccbSFrançois Tigeot extern int rs600_init(struct radeon_device *rdev);
229926deccbSFrançois Tigeot extern void rs600_fini(struct radeon_device *rdev);
230926deccbSFrançois Tigeot extern int rs600_suspend(struct radeon_device *rdev);
231926deccbSFrançois Tigeot extern int rs600_resume(struct radeon_device *rdev);
232926deccbSFrançois Tigeot int rs600_irq_set(struct radeon_device *rdev);
233926deccbSFrançois Tigeot irqreturn_t rs600_irq_process(struct radeon_device *rdev);
234926deccbSFrançois Tigeot void rs600_irq_disable(struct radeon_device *rdev);
235926deccbSFrançois Tigeot u32 rs600_get_vblank_counter(struct radeon_device *rdev, int crtc);
236926deccbSFrançois Tigeot void rs600_gart_tlb_flush(struct radeon_device *rdev);
2377dcf36dcSFrançois Tigeot uint64_t rs600_gart_get_page_entry(uint64_t addr, uint32_t flags);
238c6f73aabSFrançois Tigeot void rs600_gart_set_page(struct radeon_device *rdev, unsigned i,
2397dcf36dcSFrançois Tigeot 			 uint64_t entry);
240926deccbSFrançois Tigeot uint32_t rs600_mc_rreg(struct radeon_device *rdev, uint32_t reg);
241926deccbSFrançois Tigeot void rs600_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
242926deccbSFrançois Tigeot void rs600_bandwidth_update(struct radeon_device *rdev);
243926deccbSFrançois Tigeot void rs600_hpd_init(struct radeon_device *rdev);
244926deccbSFrançois Tigeot void rs600_hpd_fini(struct radeon_device *rdev);
245926deccbSFrançois Tigeot bool rs600_hpd_sense(struct radeon_device *rdev, enum radeon_hpd_id hpd);
246926deccbSFrançois Tigeot void rs600_hpd_set_polarity(struct radeon_device *rdev,
247926deccbSFrançois Tigeot 			    enum radeon_hpd_id hpd);
248926deccbSFrançois Tigeot extern void rs600_pm_misc(struct radeon_device *rdev);
249926deccbSFrançois Tigeot extern void rs600_pm_prepare(struct radeon_device *rdev);
250926deccbSFrançois Tigeot extern void rs600_pm_finish(struct radeon_device *rdev);
251c6f73aabSFrançois Tigeot extern void rs600_page_flip(struct radeon_device *rdev, int crtc,
252*d78d3a22SFrançois Tigeot 			    u64 crtc_base, bool async);
253c6f73aabSFrançois Tigeot extern bool rs600_page_flip_pending(struct radeon_device *rdev, int crtc);
254926deccbSFrançois Tigeot void rs600_set_safe_registers(struct radeon_device *rdev);
255926deccbSFrançois Tigeot extern void avivo_wait_for_vblank(struct radeon_device *rdev, int crtc);
256926deccbSFrançois Tigeot extern int rs600_mc_wait_for_idle(struct radeon_device *rdev);
257926deccbSFrançois Tigeot 
258926deccbSFrançois Tigeot /*
259926deccbSFrançois Tigeot  * rs690,rs740
260926deccbSFrançois Tigeot  */
261926deccbSFrançois Tigeot int rs690_init(struct radeon_device *rdev);
262926deccbSFrançois Tigeot void rs690_fini(struct radeon_device *rdev);
263926deccbSFrançois Tigeot int rs690_resume(struct radeon_device *rdev);
264926deccbSFrançois Tigeot int rs690_suspend(struct radeon_device *rdev);
265926deccbSFrançois Tigeot uint32_t rs690_mc_rreg(struct radeon_device *rdev, uint32_t reg);
266926deccbSFrançois Tigeot void rs690_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
267926deccbSFrançois Tigeot void rs690_bandwidth_update(struct radeon_device *rdev);
268926deccbSFrançois Tigeot void rs690_line_buffer_adjust(struct radeon_device *rdev,
269926deccbSFrançois Tigeot 					struct drm_display_mode *mode1,
270926deccbSFrançois Tigeot 					struct drm_display_mode *mode2);
271926deccbSFrançois Tigeot extern int rs690_mc_wait_for_idle(struct radeon_device *rdev);
272926deccbSFrançois Tigeot 
273926deccbSFrançois Tigeot /*
274926deccbSFrançois Tigeot  * rv515
275926deccbSFrançois Tigeot  */
276926deccbSFrançois Tigeot struct rv515_mc_save {
277926deccbSFrançois Tigeot 	u32 vga_render_control;
278926deccbSFrançois Tigeot 	u32 vga_hdp_control;
279926deccbSFrançois Tigeot 	bool crtc_enabled[2];
280926deccbSFrançois Tigeot };
281926deccbSFrançois Tigeot 
282926deccbSFrançois Tigeot int rv515_init(struct radeon_device *rdev);
283926deccbSFrançois Tigeot void rv515_fini(struct radeon_device *rdev);
284926deccbSFrançois Tigeot uint32_t rv515_mc_rreg(struct radeon_device *rdev, uint32_t reg);
285926deccbSFrançois Tigeot void rv515_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
286926deccbSFrançois Tigeot void rv515_ring_start(struct radeon_device *rdev, struct radeon_ring *ring);
287926deccbSFrançois Tigeot void rv515_bandwidth_update(struct radeon_device *rdev);
288926deccbSFrançois Tigeot int rv515_resume(struct radeon_device *rdev);
289926deccbSFrançois Tigeot int rv515_suspend(struct radeon_device *rdev);
290926deccbSFrançois Tigeot void rv515_bandwidth_avivo_update(struct radeon_device *rdev);
291926deccbSFrançois Tigeot void rv515_vga_render_disable(struct radeon_device *rdev);
292926deccbSFrançois Tigeot void rv515_set_safe_registers(struct radeon_device *rdev);
293926deccbSFrançois Tigeot void rv515_mc_stop(struct radeon_device *rdev, struct rv515_mc_save *save);
294926deccbSFrançois Tigeot void rv515_mc_resume(struct radeon_device *rdev, struct rv515_mc_save *save);
295926deccbSFrançois Tigeot void rv515_clock_startup(struct radeon_device *rdev);
296926deccbSFrançois Tigeot void rv515_debugfs(struct radeon_device *rdev);
297926deccbSFrançois Tigeot int rv515_mc_wait_for_idle(struct radeon_device *rdev);
298926deccbSFrançois Tigeot 
299926deccbSFrançois Tigeot /*
300926deccbSFrançois Tigeot  * r520,rv530,rv560,rv570,r580
301926deccbSFrançois Tigeot  */
302926deccbSFrançois Tigeot int r520_init(struct radeon_device *rdev);
303926deccbSFrançois Tigeot int r520_resume(struct radeon_device *rdev);
304926deccbSFrançois Tigeot int r520_mc_wait_for_idle(struct radeon_device *rdev);
305926deccbSFrançois Tigeot 
306926deccbSFrançois Tigeot /*
307926deccbSFrançois Tigeot  * r600,rv610,rv630,rv620,rv635,rv670,rs780,rs880
308926deccbSFrançois Tigeot  */
309926deccbSFrançois Tigeot int r600_init(struct radeon_device *rdev);
310926deccbSFrançois Tigeot void r600_fini(struct radeon_device *rdev);
311926deccbSFrançois Tigeot int r600_suspend(struct radeon_device *rdev);
312926deccbSFrançois Tigeot int r600_resume(struct radeon_device *rdev);
313926deccbSFrançois Tigeot void r600_vga_set_state(struct radeon_device *rdev, bool state);
314926deccbSFrançois Tigeot int r600_wb_init(struct radeon_device *rdev);
315926deccbSFrançois Tigeot void r600_wb_fini(struct radeon_device *rdev);
316926deccbSFrançois Tigeot void r600_pcie_gart_tlb_flush(struct radeon_device *rdev);
317926deccbSFrançois Tigeot uint32_t r600_pciep_rreg(struct radeon_device *rdev, uint32_t reg);
318926deccbSFrançois Tigeot void r600_pciep_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
319926deccbSFrançois Tigeot int r600_cs_parse(struct radeon_cs_parser *p);
320926deccbSFrançois Tigeot int r600_dma_cs_parse(struct radeon_cs_parser *p);
3213398c03dSzrj int r600_dma_cs_next_reloc(struct radeon_cs_parser *p,
3227dcf36dcSFrançois Tigeot 			   struct radeon_bo_list **cs_reloc);
3234cd92098Szrj u32 r600_gpu_check_soft_reset(struct radeon_device *rdev);
324926deccbSFrançois Tigeot void r600_fence_ring_emit(struct radeon_device *rdev,
325926deccbSFrançois Tigeot 			  struct radeon_fence *fence);
326c6f73aabSFrançois Tigeot bool r600_semaphore_ring_emit(struct radeon_device *rdev,
327926deccbSFrançois Tigeot 			      struct radeon_ring *cp,
328926deccbSFrançois Tigeot 			      struct radeon_semaphore *semaphore,
329926deccbSFrançois Tigeot 			      bool emit_wait);
330926deccbSFrançois Tigeot void r600_dma_fence_ring_emit(struct radeon_device *rdev,
331926deccbSFrançois Tigeot 			      struct radeon_fence *fence);
332c6f73aabSFrançois Tigeot bool r600_dma_semaphore_ring_emit(struct radeon_device *rdev,
333926deccbSFrançois Tigeot 				  struct radeon_ring *ring,
334926deccbSFrançois Tigeot 				  struct radeon_semaphore *semaphore,
335926deccbSFrançois Tigeot 				  bool emit_wait);
336926deccbSFrançois Tigeot void r600_dma_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
337926deccbSFrançois Tigeot bool r600_dma_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring);
338b403bed8SMichael Neumann bool r600_gfx_is_lockup(struct radeon_device *rdev, struct radeon_ring *cp);
339*d78d3a22SFrançois Tigeot int r600_asic_reset(struct radeon_device *rdev, bool hard);
340926deccbSFrançois Tigeot int r600_set_surface_reg(struct radeon_device *rdev, int reg,
341926deccbSFrançois Tigeot 			 uint32_t tiling_flags, uint32_t pitch,
342926deccbSFrançois Tigeot 			 uint32_t offset, uint32_t obj_size);
343926deccbSFrançois Tigeot void r600_clear_surface_reg(struct radeon_device *rdev, int reg);
344926deccbSFrançois Tigeot int r600_ib_test(struct radeon_device *rdev, struct radeon_ring *ring);
345926deccbSFrançois Tigeot int r600_dma_ib_test(struct radeon_device *rdev, struct radeon_ring *ring);
346926deccbSFrançois Tigeot void r600_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
347926deccbSFrançois Tigeot int r600_ring_test(struct radeon_device *rdev, struct radeon_ring *cp);
348926deccbSFrançois Tigeot int r600_dma_ring_test(struct radeon_device *rdev, struct radeon_ring *cp);
3491cfef1a5SFrançois Tigeot struct radeon_fence *r600_copy_cpdma(struct radeon_device *rdev,
35057e252bfSMichael Neumann 				     uint64_t src_offset, uint64_t dst_offset,
3511cfef1a5SFrançois Tigeot 				     unsigned num_gpu_pages,
3521cfef1a5SFrançois Tigeot 				     struct reservation_object *resv);
3531cfef1a5SFrançois Tigeot struct radeon_fence *r600_copy_dma(struct radeon_device *rdev,
354926deccbSFrançois Tigeot 				   uint64_t src_offset, uint64_t dst_offset,
3551cfef1a5SFrançois Tigeot 				   unsigned num_gpu_pages,
3561cfef1a5SFrançois Tigeot 				   struct reservation_object *resv);
357926deccbSFrançois Tigeot void r600_hpd_init(struct radeon_device *rdev);
358926deccbSFrançois Tigeot void r600_hpd_fini(struct radeon_device *rdev);
359926deccbSFrançois Tigeot bool r600_hpd_sense(struct radeon_device *rdev, enum radeon_hpd_id hpd);
360926deccbSFrançois Tigeot void r600_hpd_set_polarity(struct radeon_device *rdev,
361926deccbSFrançois Tigeot 			   enum radeon_hpd_id hpd);
362c6f73aabSFrançois Tigeot extern void r600_mmio_hdp_flush(struct radeon_device *rdev);
363926deccbSFrançois Tigeot extern bool r600_gui_idle(struct radeon_device *rdev);
364926deccbSFrançois Tigeot extern void r600_pm_misc(struct radeon_device *rdev);
365926deccbSFrançois Tigeot extern void r600_pm_init_profile(struct radeon_device *rdev);
366926deccbSFrançois Tigeot extern void rs780_pm_init_profile(struct radeon_device *rdev);
367f43cf1b1SMichael Neumann extern uint32_t rs780_mc_rreg(struct radeon_device *rdev, uint32_t reg);
368f43cf1b1SMichael Neumann extern void rs780_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
369926deccbSFrançois Tigeot extern void r600_pm_get_dynpm_state(struct radeon_device *rdev);
370926deccbSFrançois Tigeot extern void r600_set_pcie_lanes(struct radeon_device *rdev, int lanes);
371926deccbSFrançois Tigeot extern int r600_get_pcie_lanes(struct radeon_device *rdev);
372926deccbSFrançois Tigeot bool r600_card_posted(struct radeon_device *rdev);
373926deccbSFrançois Tigeot void r600_cp_stop(struct radeon_device *rdev);
374926deccbSFrançois Tigeot int r600_cp_start(struct radeon_device *rdev);
375926deccbSFrançois Tigeot void r600_ring_init(struct radeon_device *rdev, struct radeon_ring *cp, unsigned ring_size);
376926deccbSFrançois Tigeot int r600_cp_resume(struct radeon_device *rdev);
377926deccbSFrançois Tigeot void r600_cp_fini(struct radeon_device *rdev);
378926deccbSFrançois Tigeot int r600_count_pipe_bits(uint32_t val);
379926deccbSFrançois Tigeot int r600_mc_wait_for_idle(struct radeon_device *rdev);
380926deccbSFrançois Tigeot int r600_pcie_gart_init(struct radeon_device *rdev);
381926deccbSFrançois Tigeot void r600_scratch_init(struct radeon_device *rdev);
382926deccbSFrançois Tigeot int r600_init_microcode(struct radeon_device *rdev);
383c6f73aabSFrançois Tigeot u32 r600_gfx_get_rptr(struct radeon_device *rdev,
384c6f73aabSFrançois Tigeot 		      struct radeon_ring *ring);
385c6f73aabSFrançois Tigeot u32 r600_gfx_get_wptr(struct radeon_device *rdev,
386c6f73aabSFrançois Tigeot 		      struct radeon_ring *ring);
387c6f73aabSFrançois Tigeot void r600_gfx_set_wptr(struct radeon_device *rdev,
388c6f73aabSFrançois Tigeot 		       struct radeon_ring *ring);
389c59a5c48SFrançois Tigeot int r600_get_allowed_info_register(struct radeon_device *rdev,
390c59a5c48SFrançois Tigeot 				   u32 reg, u32 *val);
391926deccbSFrançois Tigeot void r600_fini_microcode(struct radeon_device *rdev);
392926deccbSFrançois Tigeot /* r600 irq */
393926deccbSFrançois Tigeot irqreturn_t r600_irq_process(struct radeon_device *rdev);
394926deccbSFrançois Tigeot int r600_irq_init(struct radeon_device *rdev);
395926deccbSFrançois Tigeot void r600_irq_fini(struct radeon_device *rdev);
396926deccbSFrançois Tigeot void r600_ih_ring_init(struct radeon_device *rdev, unsigned ring_size);
397926deccbSFrançois Tigeot int r600_irq_set(struct radeon_device *rdev);
398926deccbSFrançois Tigeot void r600_irq_suspend(struct radeon_device *rdev);
399926deccbSFrançois Tigeot void r600_disable_interrupts(struct radeon_device *rdev);
400926deccbSFrançois Tigeot void r600_rlc_stop(struct radeon_device *rdev);
401926deccbSFrançois Tigeot /* r600 audio */
402926deccbSFrançois Tigeot void r600_audio_fini(struct radeon_device *rdev);
403f43cf1b1SMichael Neumann void r600_audio_set_dto(struct drm_encoder *encoder, u32 clock);
404c6f73aabSFrançois Tigeot void r600_hdmi_update_avi_infoframe(struct drm_encoder *encoder, void *buffer,
405c6f73aabSFrançois Tigeot 				    size_t size);
406c6f73aabSFrançois Tigeot void r600_hdmi_update_ACR(struct drm_encoder *encoder, uint32_t clock);
407c6f73aabSFrançois Tigeot void r600_hdmi_audio_workaround(struct drm_encoder *encoder);
408926deccbSFrançois Tigeot int r600_hdmi_buffer_status_changed(struct drm_encoder *encoder);
409926deccbSFrançois Tigeot void r600_hdmi_update_audio_settings(struct drm_encoder *encoder);
410b403bed8SMichael Neumann u32 r600_get_xclk(struct radeon_device *rdev);
411b403bed8SMichael Neumann uint64_t r600_get_gpu_clock_counter(struct radeon_device *rdev);
41257e252bfSMichael Neumann int rv6xx_get_temp(struct radeon_device *rdev);
4134cd92098Szrj int r600_set_uvd_clocks(struct radeon_device *rdev, u32 vclk, u32 dclk);
41457e252bfSMichael Neumann int r600_dpm_pre_set_power_state(struct radeon_device *rdev);
41557e252bfSMichael Neumann void r600_dpm_post_set_power_state(struct radeon_device *rdev);
416c6f73aabSFrançois Tigeot int r600_dpm_late_enable(struct radeon_device *rdev);
4174cd92098Szrj /* r600 dma */
4184cd92098Szrj uint32_t r600_dma_get_rptr(struct radeon_device *rdev,
4194cd92098Szrj 			   struct radeon_ring *ring);
4204cd92098Szrj uint32_t r600_dma_get_wptr(struct radeon_device *rdev,
4214cd92098Szrj 			   struct radeon_ring *ring);
4224cd92098Szrj void r600_dma_set_wptr(struct radeon_device *rdev,
4234cd92098Szrj 		       struct radeon_ring *ring);
42457e252bfSMichael Neumann /* rv6xx dpm */
42557e252bfSMichael Neumann int rv6xx_dpm_init(struct radeon_device *rdev);
42657e252bfSMichael Neumann int rv6xx_dpm_enable(struct radeon_device *rdev);
42757e252bfSMichael Neumann void rv6xx_dpm_disable(struct radeon_device *rdev);
42857e252bfSMichael Neumann int rv6xx_dpm_set_power_state(struct radeon_device *rdev);
42957e252bfSMichael Neumann void rv6xx_setup_asic(struct radeon_device *rdev);
43057e252bfSMichael Neumann void rv6xx_dpm_display_configuration_changed(struct radeon_device *rdev);
43157e252bfSMichael Neumann void rv6xx_dpm_fini(struct radeon_device *rdev);
43257e252bfSMichael Neumann u32 rv6xx_dpm_get_sclk(struct radeon_device *rdev, bool low);
43357e252bfSMichael Neumann u32 rv6xx_dpm_get_mclk(struct radeon_device *rdev, bool low);
43457e252bfSMichael Neumann void rv6xx_dpm_print_power_state(struct radeon_device *rdev,
43557e252bfSMichael Neumann 				 struct radeon_ps *ps);
43657e252bfSMichael Neumann void rv6xx_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
43757e252bfSMichael Neumann 						       struct seq_file *m);
43857e252bfSMichael Neumann int rv6xx_dpm_force_performance_level(struct radeon_device *rdev,
43957e252bfSMichael Neumann 				      enum radeon_dpm_forced_level level);
440c59a5c48SFrançois Tigeot u32 rv6xx_dpm_get_current_sclk(struct radeon_device *rdev);
441c59a5c48SFrançois Tigeot u32 rv6xx_dpm_get_current_mclk(struct radeon_device *rdev);
44257e252bfSMichael Neumann /* rs780 dpm */
44357e252bfSMichael Neumann int rs780_dpm_init(struct radeon_device *rdev);
44457e252bfSMichael Neumann int rs780_dpm_enable(struct radeon_device *rdev);
44557e252bfSMichael Neumann void rs780_dpm_disable(struct radeon_device *rdev);
44657e252bfSMichael Neumann int rs780_dpm_set_power_state(struct radeon_device *rdev);
44757e252bfSMichael Neumann void rs780_dpm_setup_asic(struct radeon_device *rdev);
44857e252bfSMichael Neumann void rs780_dpm_display_configuration_changed(struct radeon_device *rdev);
44957e252bfSMichael Neumann void rs780_dpm_fini(struct radeon_device *rdev);
45057e252bfSMichael Neumann u32 rs780_dpm_get_sclk(struct radeon_device *rdev, bool low);
45157e252bfSMichael Neumann u32 rs780_dpm_get_mclk(struct radeon_device *rdev, bool low);
45257e252bfSMichael Neumann void rs780_dpm_print_power_state(struct radeon_device *rdev,
45357e252bfSMichael Neumann 				 struct radeon_ps *ps);
45457e252bfSMichael Neumann void rs780_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
45557e252bfSMichael Neumann 						       struct seq_file *m);
4564cd92098Szrj int rs780_dpm_force_performance_level(struct radeon_device *rdev,
4574cd92098Szrj 				      enum radeon_dpm_forced_level level);
458c59a5c48SFrançois Tigeot u32 rs780_dpm_get_current_sclk(struct radeon_device *rdev);
459c59a5c48SFrançois Tigeot u32 rs780_dpm_get_current_mclk(struct radeon_device *rdev);
460f43cf1b1SMichael Neumann 
461926deccbSFrançois Tigeot /*
462926deccbSFrançois Tigeot  * rv770,rv730,rv710,rv740
463926deccbSFrançois Tigeot  */
464926deccbSFrançois Tigeot int rv770_init(struct radeon_device *rdev);
465926deccbSFrançois Tigeot void rv770_fini(struct radeon_device *rdev);
466926deccbSFrançois Tigeot int rv770_suspend(struct radeon_device *rdev);
467926deccbSFrançois Tigeot int rv770_resume(struct radeon_device *rdev);
468926deccbSFrançois Tigeot void rv770_pm_misc(struct radeon_device *rdev);
469*d78d3a22SFrançois Tigeot void rv770_page_flip(struct radeon_device *rdev, int crtc, u64 crtc_base,
470*d78d3a22SFrançois Tigeot 		     bool async);
471c6f73aabSFrançois Tigeot bool rv770_page_flip_pending(struct radeon_device *rdev, int crtc);
472926deccbSFrançois Tigeot void r700_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc);
473926deccbSFrançois Tigeot void r700_cp_stop(struct radeon_device *rdev);
474926deccbSFrançois Tigeot void r700_cp_fini(struct radeon_device *rdev);
4751cfef1a5SFrançois Tigeot struct radeon_fence *rv770_copy_dma(struct radeon_device *rdev,
476926deccbSFrançois Tigeot 				    uint64_t src_offset, uint64_t dst_offset,
477926deccbSFrançois Tigeot 				    unsigned num_gpu_pages,
4781cfef1a5SFrançois Tigeot 				    struct reservation_object *resv);
479b403bed8SMichael Neumann u32 rv770_get_xclk(struct radeon_device *rdev);
480f43cf1b1SMichael Neumann int rv770_set_uvd_clocks(struct radeon_device *rdev, u32 vclk, u32 dclk);
48157e252bfSMichael Neumann int rv770_get_temp(struct radeon_device *rdev);
48257e252bfSMichael Neumann /* rv7xx pm */
48357e252bfSMichael Neumann int rv770_dpm_init(struct radeon_device *rdev);
48457e252bfSMichael Neumann int rv770_dpm_enable(struct radeon_device *rdev);
485c6f73aabSFrançois Tigeot int rv770_dpm_late_enable(struct radeon_device *rdev);
48657e252bfSMichael Neumann void rv770_dpm_disable(struct radeon_device *rdev);
48757e252bfSMichael Neumann int rv770_dpm_set_power_state(struct radeon_device *rdev);
48857e252bfSMichael Neumann void rv770_dpm_setup_asic(struct radeon_device *rdev);
48957e252bfSMichael Neumann void rv770_dpm_display_configuration_changed(struct radeon_device *rdev);
49057e252bfSMichael Neumann void rv770_dpm_fini(struct radeon_device *rdev);
49157e252bfSMichael Neumann u32 rv770_dpm_get_sclk(struct radeon_device *rdev, bool low);
49257e252bfSMichael Neumann u32 rv770_dpm_get_mclk(struct radeon_device *rdev, bool low);
49357e252bfSMichael Neumann void rv770_dpm_print_power_state(struct radeon_device *rdev,
49457e252bfSMichael Neumann 				 struct radeon_ps *ps);
49557e252bfSMichael Neumann void rv770_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
49657e252bfSMichael Neumann 						       struct seq_file *m);
49757e252bfSMichael Neumann bool rv770_dpm_vblank_too_short(struct radeon_device *rdev);
498c6f73aabSFrançois Tigeot void rv770_set_clk_bypass_mode(struct radeon_device *rdev);
499c59a5c48SFrançois Tigeot u32 rv770_dpm_get_current_sclk(struct radeon_device *rdev);
500c59a5c48SFrançois Tigeot u32 rv770_dpm_get_current_mclk(struct radeon_device *rdev);
501926deccbSFrançois Tigeot 
502926deccbSFrançois Tigeot /*
503926deccbSFrançois Tigeot  * evergreen
504926deccbSFrançois Tigeot  */
505926deccbSFrançois Tigeot struct evergreen_mc_save {
506926deccbSFrançois Tigeot 	u32 vga_render_control;
507926deccbSFrançois Tigeot 	u32 vga_hdp_control;
508926deccbSFrançois Tigeot 	bool crtc_enabled[RADEON_MAX_CRTCS];
509926deccbSFrançois Tigeot };
510926deccbSFrançois Tigeot 
511926deccbSFrançois Tigeot void evergreen_pcie_gart_tlb_flush(struct radeon_device *rdev);
512926deccbSFrançois Tigeot int evergreen_init(struct radeon_device *rdev);
513926deccbSFrançois Tigeot void evergreen_fini(struct radeon_device *rdev);
514926deccbSFrançois Tigeot int evergreen_suspend(struct radeon_device *rdev);
515926deccbSFrançois Tigeot int evergreen_resume(struct radeon_device *rdev);
516b403bed8SMichael Neumann bool evergreen_gfx_is_lockup(struct radeon_device *rdev, struct radeon_ring *cp);
517b403bed8SMichael Neumann bool evergreen_dma_is_lockup(struct radeon_device *rdev, struct radeon_ring *cp);
518*d78d3a22SFrançois Tigeot int evergreen_asic_reset(struct radeon_device *rdev, bool hard);
519926deccbSFrançois Tigeot void evergreen_bandwidth_update(struct radeon_device *rdev);
520926deccbSFrançois Tigeot void evergreen_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
521926deccbSFrançois Tigeot void evergreen_hpd_init(struct radeon_device *rdev);
522926deccbSFrançois Tigeot void evergreen_hpd_fini(struct radeon_device *rdev);
523926deccbSFrançois Tigeot bool evergreen_hpd_sense(struct radeon_device *rdev, enum radeon_hpd_id hpd);
524926deccbSFrançois Tigeot void evergreen_hpd_set_polarity(struct radeon_device *rdev,
525926deccbSFrançois Tigeot 				enum radeon_hpd_id hpd);
526926deccbSFrançois Tigeot u32 evergreen_get_vblank_counter(struct radeon_device *rdev, int crtc);
527926deccbSFrançois Tigeot int evergreen_irq_set(struct radeon_device *rdev);
528926deccbSFrançois Tigeot irqreturn_t evergreen_irq_process(struct radeon_device *rdev);
529926deccbSFrançois Tigeot extern int evergreen_cs_parse(struct radeon_cs_parser *p);
530926deccbSFrançois Tigeot extern int evergreen_dma_cs_parse(struct radeon_cs_parser *p);
531926deccbSFrançois Tigeot extern void evergreen_pm_misc(struct radeon_device *rdev);
532926deccbSFrançois Tigeot extern void evergreen_pm_prepare(struct radeon_device *rdev);
533926deccbSFrançois Tigeot extern void evergreen_pm_finish(struct radeon_device *rdev);
534926deccbSFrançois Tigeot extern void sumo_pm_init_profile(struct radeon_device *rdev);
535926deccbSFrançois Tigeot extern void btc_pm_init_profile(struct radeon_device *rdev);
536f43cf1b1SMichael Neumann int sumo_set_uvd_clocks(struct radeon_device *rdev, u32 vclk, u32 dclk);
537f43cf1b1SMichael Neumann int evergreen_set_uvd_clocks(struct radeon_device *rdev, u32 vclk, u32 dclk);
538c6f73aabSFrançois Tigeot extern void evergreen_page_flip(struct radeon_device *rdev, int crtc,
539*d78d3a22SFrançois Tigeot 				u64 crtc_base, bool async);
540c6f73aabSFrançois Tigeot extern bool evergreen_page_flip_pending(struct radeon_device *rdev, int crtc);
541926deccbSFrançois Tigeot extern void dce4_wait_for_vblank(struct radeon_device *rdev, int crtc);
542926deccbSFrançois Tigeot void evergreen_disable_interrupt_state(struct radeon_device *rdev);
543926deccbSFrançois Tigeot int evergreen_mc_wait_for_idle(struct radeon_device *rdev);
544926deccbSFrançois Tigeot void evergreen_dma_fence_ring_emit(struct radeon_device *rdev,
545926deccbSFrançois Tigeot 				   struct radeon_fence *fence);
546926deccbSFrançois Tigeot void evergreen_dma_ring_ib_execute(struct radeon_device *rdev,
547926deccbSFrançois Tigeot 				   struct radeon_ib *ib);
5481cfef1a5SFrançois Tigeot struct radeon_fence *evergreen_copy_dma(struct radeon_device *rdev,
549926deccbSFrançois Tigeot 					uint64_t src_offset, uint64_t dst_offset,
550926deccbSFrançois Tigeot 					unsigned num_gpu_pages,
5511cfef1a5SFrançois Tigeot 					struct reservation_object *resv);
5524cd92098Szrj u32 evergreen_gpu_check_soft_reset(struct radeon_device *rdev);
553c6f73aabSFrançois Tigeot void evergreen_gpu_pci_config_reset(struct radeon_device *rdev);
5543398c03dSzrj void evergreen_pcie_gen2_enable(struct radeon_device *rdev);
5553398c03dSzrj void evergreen_print_gpu_status_regs(struct radeon_device *rdev);
5563398c03dSzrj void evergreen_program_aspm(struct radeon_device *rdev);
557926deccbSFrançois Tigeot void evergreen_fix_pci_max_read_req_size(struct radeon_device *rdev);
558926deccbSFrançois Tigeot u32 evergreen_get_number_of_dram_channels(struct radeon_device *rdev);
55957e252bfSMichael Neumann void sumo_rlc_fini(struct radeon_device *rdev);
56057e252bfSMichael Neumann int sumo_rlc_init(struct radeon_device *rdev);
56157e252bfSMichael Neumann int evergreen_rlc_resume(struct radeon_device *rdev);
562926deccbSFrançois Tigeot void evergreen_mc_stop(struct radeon_device *rdev, struct evergreen_mc_save *save);
563926deccbSFrançois Tigeot void evergreen_mc_resume(struct radeon_device *rdev, struct evergreen_mc_save *save);
564926deccbSFrançois Tigeot void evergreen_mc_program(struct radeon_device *rdev);
565926deccbSFrançois Tigeot int evergreen_mc_init(struct radeon_device *rdev);
566926deccbSFrançois Tigeot void evergreen_irq_suspend(struct radeon_device *rdev);
56757e252bfSMichael Neumann bool evergreen_is_display_hung(struct radeon_device *rdev);
56857e252bfSMichael Neumann int evergreen_get_temp(struct radeon_device *rdev);
569c59a5c48SFrançois Tigeot int evergreen_get_allowed_info_register(struct radeon_device *rdev,
570c59a5c48SFrançois Tigeot 					u32 reg, u32 *val);
57157e252bfSMichael Neumann int sumo_get_temp(struct radeon_device *rdev);
57257e252bfSMichael Neumann int tn_get_temp(struct radeon_device *rdev);
57357e252bfSMichael Neumann int cypress_dpm_init(struct radeon_device *rdev);
57457e252bfSMichael Neumann void cypress_dpm_setup_asic(struct radeon_device *rdev);
57557e252bfSMichael Neumann int cypress_dpm_enable(struct radeon_device *rdev);
57657e252bfSMichael Neumann void cypress_dpm_disable(struct radeon_device *rdev);
57757e252bfSMichael Neumann int cypress_dpm_set_power_state(struct radeon_device *rdev);
57857e252bfSMichael Neumann void cypress_dpm_display_configuration_changed(struct radeon_device *rdev);
57957e252bfSMichael Neumann void cypress_dpm_fini(struct radeon_device *rdev);
58057e252bfSMichael Neumann bool cypress_dpm_vblank_too_short(struct radeon_device *rdev);
58157e252bfSMichael Neumann int btc_dpm_init(struct radeon_device *rdev);
58257e252bfSMichael Neumann void btc_dpm_setup_asic(struct radeon_device *rdev);
58357e252bfSMichael Neumann int btc_dpm_enable(struct radeon_device *rdev);
58457e252bfSMichael Neumann void btc_dpm_disable(struct radeon_device *rdev);
58557e252bfSMichael Neumann int btc_dpm_pre_set_power_state(struct radeon_device *rdev);
58657e252bfSMichael Neumann int btc_dpm_set_power_state(struct radeon_device *rdev);
58757e252bfSMichael Neumann void btc_dpm_post_set_power_state(struct radeon_device *rdev);
58857e252bfSMichael Neumann void btc_dpm_fini(struct radeon_device *rdev);
58957e252bfSMichael Neumann u32 btc_dpm_get_sclk(struct radeon_device *rdev, bool low);
59057e252bfSMichael Neumann u32 btc_dpm_get_mclk(struct radeon_device *rdev, bool low);
59157e252bfSMichael Neumann bool btc_dpm_vblank_too_short(struct radeon_device *rdev);
592c6f73aabSFrançois Tigeot void btc_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
593c6f73aabSFrançois Tigeot 						     struct seq_file *m);
594c59a5c48SFrançois Tigeot u32 btc_dpm_get_current_sclk(struct radeon_device *rdev);
595c59a5c48SFrançois Tigeot u32 btc_dpm_get_current_mclk(struct radeon_device *rdev);
59657e252bfSMichael Neumann int sumo_dpm_init(struct radeon_device *rdev);
59757e252bfSMichael Neumann int sumo_dpm_enable(struct radeon_device *rdev);
598c6f73aabSFrançois Tigeot int sumo_dpm_late_enable(struct radeon_device *rdev);
59957e252bfSMichael Neumann void sumo_dpm_disable(struct radeon_device *rdev);
60057e252bfSMichael Neumann int sumo_dpm_pre_set_power_state(struct radeon_device *rdev);
60157e252bfSMichael Neumann int sumo_dpm_set_power_state(struct radeon_device *rdev);
60257e252bfSMichael Neumann void sumo_dpm_post_set_power_state(struct radeon_device *rdev);
60357e252bfSMichael Neumann void sumo_dpm_setup_asic(struct radeon_device *rdev);
60457e252bfSMichael Neumann void sumo_dpm_display_configuration_changed(struct radeon_device *rdev);
60557e252bfSMichael Neumann void sumo_dpm_fini(struct radeon_device *rdev);
60657e252bfSMichael Neumann u32 sumo_dpm_get_sclk(struct radeon_device *rdev, bool low);
60757e252bfSMichael Neumann u32 sumo_dpm_get_mclk(struct radeon_device *rdev, bool low);
60857e252bfSMichael Neumann void sumo_dpm_print_power_state(struct radeon_device *rdev,
60957e252bfSMichael Neumann 				struct radeon_ps *ps);
61057e252bfSMichael Neumann void sumo_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
61157e252bfSMichael Neumann 						      struct seq_file *m);
61257e252bfSMichael Neumann int sumo_dpm_force_performance_level(struct radeon_device *rdev,
61357e252bfSMichael Neumann 				     enum radeon_dpm_forced_level level);
614c59a5c48SFrançois Tigeot u32 sumo_dpm_get_current_sclk(struct radeon_device *rdev);
615c59a5c48SFrançois Tigeot u32 sumo_dpm_get_current_mclk(struct radeon_device *rdev);
616926deccbSFrançois Tigeot 
617926deccbSFrançois Tigeot /*
618926deccbSFrançois Tigeot  * cayman
619926deccbSFrançois Tigeot  */
620926deccbSFrançois Tigeot void cayman_fence_ring_emit(struct radeon_device *rdev,
621926deccbSFrançois Tigeot 			    struct radeon_fence *fence);
622926deccbSFrançois Tigeot void cayman_pcie_gart_tlb_flush(struct radeon_device *rdev);
623926deccbSFrançois Tigeot int cayman_init(struct radeon_device *rdev);
624926deccbSFrançois Tigeot void cayman_fini(struct radeon_device *rdev);
625926deccbSFrançois Tigeot int cayman_suspend(struct radeon_device *rdev);
626926deccbSFrançois Tigeot int cayman_resume(struct radeon_device *rdev);
627*d78d3a22SFrançois Tigeot int cayman_asic_reset(struct radeon_device *rdev, bool hard);
628926deccbSFrançois Tigeot void cayman_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
629926deccbSFrançois Tigeot int cayman_vm_init(struct radeon_device *rdev);
630926deccbSFrançois Tigeot void cayman_vm_fini(struct radeon_device *rdev);
6317dcf36dcSFrançois Tigeot void cayman_vm_flush(struct radeon_device *rdev, struct radeon_ring *ring,
6327dcf36dcSFrançois Tigeot 		     unsigned vm_id, uint64_t pd_addr);
633926deccbSFrançois Tigeot uint32_t cayman_vm_page_flags(struct radeon_device *rdev, uint32_t flags);
63457e252bfSMichael Neumann void cayman_vm_decode_fault(struct radeon_device *rdev,
63557e252bfSMichael Neumann 				   u32 status, u32 addr);
6364cd92098Szrj u32 cayman_gpu_check_soft_reset(struct radeon_device *rdev);
637926deccbSFrançois Tigeot int evergreen_ib_parse(struct radeon_device *rdev, struct radeon_ib *ib);
638926deccbSFrançois Tigeot int evergreen_dma_ib_parse(struct radeon_device *rdev, struct radeon_ib *ib);
639926deccbSFrançois Tigeot void cayman_dma_ring_ib_execute(struct radeon_device *rdev,
640926deccbSFrançois Tigeot 				struct radeon_ib *ib);
641b403bed8SMichael Neumann bool cayman_gfx_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring);
642926deccbSFrançois Tigeot bool cayman_dma_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring);
643c6f73aabSFrançois Tigeot 
644c6f73aabSFrançois Tigeot void cayman_dma_vm_copy_pages(struct radeon_device *rdev,
645c6f73aabSFrançois Tigeot 			      struct radeon_ib *ib,
646c6f73aabSFrançois Tigeot 			      uint64_t pe, uint64_t src,
647c6f73aabSFrançois Tigeot 			      unsigned count);
648c6f73aabSFrançois Tigeot void cayman_dma_vm_write_pages(struct radeon_device *rdev,
649c6f73aabSFrançois Tigeot 			       struct radeon_ib *ib,
650c6f73aabSFrançois Tigeot 			       uint64_t pe,
651c6f73aabSFrançois Tigeot 			       uint64_t addr, unsigned count,
652c6f73aabSFrançois Tigeot 			       uint32_t incr, uint32_t flags);
653c6f73aabSFrançois Tigeot void cayman_dma_vm_set_pages(struct radeon_device *rdev,
654c6f73aabSFrançois Tigeot 			     struct radeon_ib *ib,
655c6f73aabSFrançois Tigeot 			     uint64_t pe,
656c6f73aabSFrançois Tigeot 			     uint64_t addr, unsigned count,
657c6f73aabSFrançois Tigeot 			     uint32_t incr, uint32_t flags);
658c6f73aabSFrançois Tigeot void cayman_dma_vm_pad_ib(struct radeon_ib *ib);
659c6f73aabSFrançois Tigeot 
6607dcf36dcSFrançois Tigeot void cayman_dma_vm_flush(struct radeon_device *rdev, struct radeon_ring *ring,
6617dcf36dcSFrançois Tigeot 			 unsigned vm_id, uint64_t pd_addr);
662c6f73aabSFrançois Tigeot 
663c6f73aabSFrançois Tigeot u32 cayman_gfx_get_rptr(struct radeon_device *rdev,
664c6f73aabSFrançois Tigeot 			struct radeon_ring *ring);
665c6f73aabSFrançois Tigeot u32 cayman_gfx_get_wptr(struct radeon_device *rdev,
666c6f73aabSFrançois Tigeot 			struct radeon_ring *ring);
667c6f73aabSFrançois Tigeot void cayman_gfx_set_wptr(struct radeon_device *rdev,
668c6f73aabSFrançois Tigeot 			 struct radeon_ring *ring);
669c6f73aabSFrançois Tigeot uint32_t cayman_dma_get_rptr(struct radeon_device *rdev,
670c6f73aabSFrançois Tigeot 			     struct radeon_ring *ring);
671c6f73aabSFrançois Tigeot uint32_t cayman_dma_get_wptr(struct radeon_device *rdev,
672c6f73aabSFrançois Tigeot 			     struct radeon_ring *ring);
673c6f73aabSFrançois Tigeot void cayman_dma_set_wptr(struct radeon_device *rdev,
674c6f73aabSFrançois Tigeot 			 struct radeon_ring *ring);
675c59a5c48SFrançois Tigeot int cayman_get_allowed_info_register(struct radeon_device *rdev,
676c59a5c48SFrançois Tigeot 				     u32 reg, u32 *val);
677c6f73aabSFrançois Tigeot void cayman_cp_int_cntl_setup(struct radeon_device *rdev,
678926deccbSFrançois Tigeot 			      int ring, u32 cp_int_cntl);
679926deccbSFrançois Tigeot 
68057e252bfSMichael Neumann int ni_dpm_init(struct radeon_device *rdev);
68157e252bfSMichael Neumann void ni_dpm_setup_asic(struct radeon_device *rdev);
68257e252bfSMichael Neumann int ni_dpm_enable(struct radeon_device *rdev);
68357e252bfSMichael Neumann void ni_dpm_disable(struct radeon_device *rdev);
68457e252bfSMichael Neumann int ni_dpm_pre_set_power_state(struct radeon_device *rdev);
68557e252bfSMichael Neumann int ni_dpm_set_power_state(struct radeon_device *rdev);
68657e252bfSMichael Neumann void ni_dpm_post_set_power_state(struct radeon_device *rdev);
68757e252bfSMichael Neumann void ni_dpm_fini(struct radeon_device *rdev);
68857e252bfSMichael Neumann u32 ni_dpm_get_sclk(struct radeon_device *rdev, bool low);
68957e252bfSMichael Neumann u32 ni_dpm_get_mclk(struct radeon_device *rdev, bool low);
69057e252bfSMichael Neumann void ni_dpm_print_power_state(struct radeon_device *rdev,
69157e252bfSMichael Neumann 			      struct radeon_ps *ps);
69257e252bfSMichael Neumann void ni_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
69357e252bfSMichael Neumann 						    struct seq_file *m);
69457e252bfSMichael Neumann int ni_dpm_force_performance_level(struct radeon_device *rdev,
69557e252bfSMichael Neumann 				   enum radeon_dpm_forced_level level);
69657e252bfSMichael Neumann //bool ni_dpm_vblank_too_short(struct radeon_device *rdev);
697c59a5c48SFrançois Tigeot u32 ni_dpm_get_current_sclk(struct radeon_device *rdev);
698c59a5c48SFrançois Tigeot u32 ni_dpm_get_current_mclk(struct radeon_device *rdev);
69957e252bfSMichael Neumann int trinity_dpm_init(struct radeon_device *rdev);
70057e252bfSMichael Neumann int trinity_dpm_enable(struct radeon_device *rdev);
701c6f73aabSFrançois Tigeot int trinity_dpm_late_enable(struct radeon_device *rdev);
70257e252bfSMichael Neumann void trinity_dpm_disable(struct radeon_device *rdev);
70357e252bfSMichael Neumann int trinity_dpm_pre_set_power_state(struct radeon_device *rdev);
70457e252bfSMichael Neumann int trinity_dpm_set_power_state(struct radeon_device *rdev);
70557e252bfSMichael Neumann void trinity_dpm_post_set_power_state(struct radeon_device *rdev);
70657e252bfSMichael Neumann void trinity_dpm_setup_asic(struct radeon_device *rdev);
70757e252bfSMichael Neumann void trinity_dpm_display_configuration_changed(struct radeon_device *rdev);
70857e252bfSMichael Neumann void trinity_dpm_fini(struct radeon_device *rdev);
70957e252bfSMichael Neumann u32 trinity_dpm_get_sclk(struct radeon_device *rdev, bool low);
71057e252bfSMichael Neumann u32 trinity_dpm_get_mclk(struct radeon_device *rdev, bool low);
71157e252bfSMichael Neumann void trinity_dpm_print_power_state(struct radeon_device *rdev,
71257e252bfSMichael Neumann 				   struct radeon_ps *ps);
71357e252bfSMichael Neumann void trinity_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
71457e252bfSMichael Neumann 							 struct seq_file *m);
71557e252bfSMichael Neumann int trinity_dpm_force_performance_level(struct radeon_device *rdev,
71657e252bfSMichael Neumann 					enum radeon_dpm_forced_level level);
7174cd92098Szrj void trinity_dpm_enable_bapm(struct radeon_device *rdev, bool enable);
718c59a5c48SFrançois Tigeot u32 trinity_dpm_get_current_sclk(struct radeon_device *rdev);
719c59a5c48SFrançois Tigeot u32 trinity_dpm_get_current_mclk(struct radeon_device *rdev);
720c59a5c48SFrançois Tigeot int tn_set_vce_clocks(struct radeon_device *rdev, u32 evclk, u32 ecclk);
72157e252bfSMichael Neumann 
722926deccbSFrançois Tigeot /* DCE6 - SI */
723926deccbSFrançois Tigeot void dce6_bandwidth_update(struct radeon_device *rdev);
7244cd92098Szrj void dce6_audio_fini(struct radeon_device *rdev);
7254cd92098Szrj 
726ee479021SImre Vadász void dce6_afmt_write_sad_regs(struct drm_encoder *encoder);
727926deccbSFrançois Tigeot 
728926deccbSFrançois Tigeot /*
729926deccbSFrançois Tigeot  * si
730926deccbSFrançois Tigeot  */
731926deccbSFrançois Tigeot void si_fence_ring_emit(struct radeon_device *rdev,
732926deccbSFrançois Tigeot 			struct radeon_fence *fence);
733926deccbSFrançois Tigeot void si_pcie_gart_tlb_flush(struct radeon_device *rdev);
734926deccbSFrançois Tigeot int si_init(struct radeon_device *rdev);
735926deccbSFrançois Tigeot void si_fini(struct radeon_device *rdev);
736926deccbSFrançois Tigeot int si_suspend(struct radeon_device *rdev);
737926deccbSFrançois Tigeot int si_resume(struct radeon_device *rdev);
738b403bed8SMichael Neumann bool si_gfx_is_lockup(struct radeon_device *rdev, struct radeon_ring *cp);
739b403bed8SMichael Neumann bool si_dma_is_lockup(struct radeon_device *rdev, struct radeon_ring *cp);
740*d78d3a22SFrançois Tigeot int si_asic_reset(struct radeon_device *rdev, bool hard);
741926deccbSFrançois Tigeot void si_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
742926deccbSFrançois Tigeot int si_irq_set(struct radeon_device *rdev);
743926deccbSFrançois Tigeot irqreturn_t si_irq_process(struct radeon_device *rdev);
744926deccbSFrançois Tigeot int si_vm_init(struct radeon_device *rdev);
745926deccbSFrançois Tigeot void si_vm_fini(struct radeon_device *rdev);
7467dcf36dcSFrançois Tigeot void si_vm_flush(struct radeon_device *rdev, struct radeon_ring *ring,
7477dcf36dcSFrançois Tigeot 		 unsigned vm_id, uint64_t pd_addr);
748926deccbSFrançois Tigeot int si_ib_parse(struct radeon_device *rdev, struct radeon_ib *ib);
7491cfef1a5SFrançois Tigeot struct radeon_fence *si_copy_dma(struct radeon_device *rdev,
750926deccbSFrançois Tigeot 				 uint64_t src_offset, uint64_t dst_offset,
751926deccbSFrançois Tigeot 				 unsigned num_gpu_pages,
7521cfef1a5SFrançois Tigeot 				 struct reservation_object *resv);
7531cfef1a5SFrançois Tigeot 
7544cd92098Szrj u8 si_get_mclk_frequency_ratio(u32 memory_clock, bool strobe_mode);
7554cd92098Szrj u8 si_get_ddr3_mclk_frequency_ratio(u32 memory_clock);
7564cd92098Szrj u32 si_get_csb_size(struct radeon_device *rdev);
7574cd92098Szrj void si_get_csb_buffer(struct radeon_device *rdev, volatile u32 *buffer);
7584cd92098Szrj void si_trim_voltage_table_to_fit_state_table(struct radeon_device *rdev,
7594cd92098Szrj 					      u32 max_voltage_steps,
7604cd92098Szrj 					      struct atom_voltage_table *voltage_table);
761c6f73aabSFrançois Tigeot u32 si_gpu_check_soft_reset(struct radeon_device *rdev);
762c6f73aabSFrançois Tigeot 
763c6f73aabSFrançois Tigeot void si_dma_vm_copy_pages(struct radeon_device *rdev,
764c6f73aabSFrançois Tigeot 			  struct radeon_ib *ib,
765c6f73aabSFrançois Tigeot 			  uint64_t pe, uint64_t src,
766c6f73aabSFrançois Tigeot 			  unsigned count);
767c6f73aabSFrançois Tigeot void si_dma_vm_write_pages(struct radeon_device *rdev,
7684cd92098Szrj 			   struct radeon_ib *ib,
7694cd92098Szrj 			   uint64_t pe,
7704cd92098Szrj 			   uint64_t addr, unsigned count,
7714cd92098Szrj 			   uint32_t incr, uint32_t flags);
772c6f73aabSFrançois Tigeot void si_dma_vm_set_pages(struct radeon_device *rdev,
773c6f73aabSFrançois Tigeot 			 struct radeon_ib *ib,
774c6f73aabSFrançois Tigeot 			 uint64_t pe,
775c6f73aabSFrançois Tigeot 			 uint64_t addr, unsigned count,
776c6f73aabSFrançois Tigeot 			 uint32_t incr, uint32_t flags);
777c6f73aabSFrançois Tigeot 
7787dcf36dcSFrançois Tigeot void si_dma_vm_flush(struct radeon_device *rdev, struct radeon_ring *ring,
7797dcf36dcSFrançois Tigeot 		     unsigned vm_id, uint64_t pd_addr);
780c6f73aabSFrançois Tigeot u32 si_get_xclk(struct radeon_device *rdev);
781b403bed8SMichael Neumann uint64_t si_get_gpu_clock_counter(struct radeon_device *rdev);
782f43cf1b1SMichael Neumann int si_set_uvd_clocks(struct radeon_device *rdev, u32 vclk, u32 dclk);
783c59a5c48SFrançois Tigeot int si_set_vce_clocks(struct radeon_device *rdev, u32 evclk, u32 ecclk);
78457e252bfSMichael Neumann int si_get_temp(struct radeon_device *rdev);
785c59a5c48SFrançois Tigeot int si_get_allowed_info_register(struct radeon_device *rdev,
786c59a5c48SFrançois Tigeot 				 u32 reg, u32 *val);
787926deccbSFrançois Tigeot void si_rlc_fini(struct radeon_device *rdev);
788926deccbSFrançois Tigeot int si_rlc_init(struct radeon_device *rdev);
7894cd92098Szrj void si_rlc_reset(struct radeon_device *rdev);
790c6f73aabSFrançois Tigeot int si_mc_load_microcode(struct radeon_device *rdev);
79157e252bfSMichael Neumann void si_vram_gtt_location(struct radeon_device *rdev,
79257e252bfSMichael Neumann 			  struct radeon_mc *mc);
7934cd92098Szrj void si_init_uvd_internal_cg(struct radeon_device *rdev);
79457e252bfSMichael Neumann int si_dpm_init(struct radeon_device *rdev);
79557e252bfSMichael Neumann void si_dpm_setup_asic(struct radeon_device *rdev);
79657e252bfSMichael Neumann int si_dpm_enable(struct radeon_device *rdev);
797c6f73aabSFrançois Tigeot int si_dpm_late_enable(struct radeon_device *rdev);
79857e252bfSMichael Neumann void si_dpm_disable(struct radeon_device *rdev);
79957e252bfSMichael Neumann int si_dpm_pre_set_power_state(struct radeon_device *rdev);
80057e252bfSMichael Neumann int si_dpm_set_power_state(struct radeon_device *rdev);
80157e252bfSMichael Neumann void si_dpm_post_set_power_state(struct radeon_device *rdev);
80257e252bfSMichael Neumann void si_dpm_fini(struct radeon_device *rdev);
80357e252bfSMichael Neumann void si_dpm_display_configuration_changed(struct radeon_device *rdev);
80457e252bfSMichael Neumann void si_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
80557e252bfSMichael Neumann 						    struct seq_file *m);
80657e252bfSMichael Neumann int si_dpm_force_performance_level(struct radeon_device *rdev,
80757e252bfSMichael Neumann 				   enum radeon_dpm_forced_level level);
808c59a5c48SFrançois Tigeot int si_fan_ctrl_get_fan_speed_percent(struct radeon_device *rdev,
809c59a5c48SFrançois Tigeot 						 u32 *speed);
810c59a5c48SFrançois Tigeot int si_fan_ctrl_set_fan_speed_percent(struct radeon_device *rdev,
811c59a5c48SFrançois Tigeot 						 u32 speed);
812c59a5c48SFrançois Tigeot u32 si_fan_ctrl_get_mode(struct radeon_device *rdev);
813c59a5c48SFrançois Tigeot void si_fan_ctrl_set_mode(struct radeon_device *rdev, u32 mode);
814c59a5c48SFrançois Tigeot u32 si_dpm_get_current_sclk(struct radeon_device *rdev);
815c59a5c48SFrançois Tigeot u32 si_dpm_get_current_mclk(struct radeon_device *rdev);
816926deccbSFrançois Tigeot 
81757e252bfSMichael Neumann /* DCE8 - CIK */
81857e252bfSMichael Neumann void dce8_bandwidth_update(struct radeon_device *rdev);
81957e252bfSMichael Neumann 
82057e252bfSMichael Neumann /*
82157e252bfSMichael Neumann  * cik
82257e252bfSMichael Neumann  */
8234cd92098Szrj u32 cik_get_csb_size(struct radeon_device *rdev);
8244cd92098Szrj void cik_get_csb_buffer(struct radeon_device *rdev, volatile u32 *buffer);
82557e252bfSMichael Neumann uint64_t cik_get_gpu_clock_counter(struct radeon_device *rdev);
82657e252bfSMichael Neumann u32 cik_get_xclk(struct radeon_device *rdev);
82757e252bfSMichael Neumann uint32_t cik_pciep_rreg(struct radeon_device *rdev, uint32_t reg);
82857e252bfSMichael Neumann void cik_pciep_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
82957e252bfSMichael Neumann int cik_set_uvd_clocks(struct radeon_device *rdev, u32 vclk, u32 dclk);
830c6f73aabSFrançois Tigeot int cik_set_vce_clocks(struct radeon_device *rdev, u32 evclk, u32 ecclk);
8314cd92098Szrj void cik_init_cp_pg_table(struct radeon_device *rdev);
8324cd92098Szrj void cik_update_cg(struct radeon_device *rdev,
8334cd92098Szrj 		   u32 block, bool enable);
8344cd92098Szrj void cik_enter_rlc_safe_mode(struct radeon_device *rdev);
8354cd92098Szrj void cik_exit_rlc_safe_mode(struct radeon_device *rdev);
836c6f73aabSFrançois Tigeot int ci_mc_load_microcode(struct radeon_device *rdev);
83757e252bfSMichael Neumann void cik_sdma_fence_ring_emit(struct radeon_device *rdev,
83857e252bfSMichael Neumann 			      struct radeon_fence *fence);
839c6f73aabSFrançois Tigeot bool cik_sdma_semaphore_ring_emit(struct radeon_device *rdev,
84057e252bfSMichael Neumann 				  struct radeon_ring *ring,
84157e252bfSMichael Neumann 				  struct radeon_semaphore *semaphore,
84257e252bfSMichael Neumann 				  bool emit_wait);
84357e252bfSMichael Neumann void cik_sdma_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
8441cfef1a5SFrançois Tigeot struct radeon_fence *cik_copy_dma(struct radeon_device *rdev,
84557e252bfSMichael Neumann 				  uint64_t src_offset, uint64_t dst_offset,
84657e252bfSMichael Neumann 				  unsigned num_gpu_pages,
8471cfef1a5SFrançois Tigeot 				  struct reservation_object *resv);
8481cfef1a5SFrançois Tigeot struct radeon_fence *cik_copy_cpdma(struct radeon_device *rdev,
849c6f73aabSFrançois Tigeot 				    uint64_t src_offset, uint64_t dst_offset,
850c6f73aabSFrançois Tigeot 				    unsigned num_gpu_pages,
8511cfef1a5SFrançois Tigeot 				    struct reservation_object *resv);
85257e252bfSMichael Neumann int cik_sdma_ring_test(struct radeon_device *rdev, struct radeon_ring *ring);
85357e252bfSMichael Neumann int cik_sdma_ib_test(struct radeon_device *rdev, struct radeon_ring *ring);
85457e252bfSMichael Neumann bool cik_sdma_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring);
85557e252bfSMichael Neumann void cik_fence_gfx_ring_emit(struct radeon_device *rdev,
85657e252bfSMichael Neumann 			     struct radeon_fence *fence);
85757e252bfSMichael Neumann void cik_fence_compute_ring_emit(struct radeon_device *rdev,
85857e252bfSMichael Neumann 				 struct radeon_fence *fence);
859c6f73aabSFrançois Tigeot bool cik_semaphore_ring_emit(struct radeon_device *rdev,
86057e252bfSMichael Neumann 			     struct radeon_ring *cp,
86157e252bfSMichael Neumann 			     struct radeon_semaphore *semaphore,
86257e252bfSMichael Neumann 			     bool emit_wait);
86357e252bfSMichael Neumann void cik_pcie_gart_tlb_flush(struct radeon_device *rdev);
86457e252bfSMichael Neumann int cik_init(struct radeon_device *rdev);
86557e252bfSMichael Neumann void cik_fini(struct radeon_device *rdev);
86657e252bfSMichael Neumann int cik_suspend(struct radeon_device *rdev);
86757e252bfSMichael Neumann int cik_resume(struct radeon_device *rdev);
86857e252bfSMichael Neumann bool cik_gfx_is_lockup(struct radeon_device *rdev, struct radeon_ring *cp);
869*d78d3a22SFrançois Tigeot int cik_asic_reset(struct radeon_device *rdev, bool hard);
87057e252bfSMichael Neumann void cik_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
87157e252bfSMichael Neumann int cik_ring_test(struct radeon_device *rdev, struct radeon_ring *ring);
87257e252bfSMichael Neumann int cik_ib_test(struct radeon_device *rdev, struct radeon_ring *ring);
87357e252bfSMichael Neumann int cik_irq_set(struct radeon_device *rdev);
87457e252bfSMichael Neumann irqreturn_t cik_irq_process(struct radeon_device *rdev);
87557e252bfSMichael Neumann int cik_vm_init(struct radeon_device *rdev);
87657e252bfSMichael Neumann void cik_vm_fini(struct radeon_device *rdev);
8777dcf36dcSFrançois Tigeot void cik_vm_flush(struct radeon_device *rdev, struct radeon_ring *ring,
8787dcf36dcSFrançois Tigeot 		  unsigned vm_id, uint64_t pd_addr);
879c6f73aabSFrançois Tigeot 
880c6f73aabSFrançois Tigeot void cik_sdma_vm_copy_pages(struct radeon_device *rdev,
881c6f73aabSFrançois Tigeot 			    struct radeon_ib *ib,
882c6f73aabSFrançois Tigeot 			    uint64_t pe, uint64_t src,
883c6f73aabSFrançois Tigeot 			    unsigned count);
884c6f73aabSFrançois Tigeot void cik_sdma_vm_write_pages(struct radeon_device *rdev,
88557e252bfSMichael Neumann 			     struct radeon_ib *ib,
88657e252bfSMichael Neumann 			     uint64_t pe,
88757e252bfSMichael Neumann 			     uint64_t addr, unsigned count,
88857e252bfSMichael Neumann 			     uint32_t incr, uint32_t flags);
889c6f73aabSFrançois Tigeot void cik_sdma_vm_set_pages(struct radeon_device *rdev,
890c6f73aabSFrançois Tigeot 			   struct radeon_ib *ib,
891c6f73aabSFrançois Tigeot 			   uint64_t pe,
892c6f73aabSFrançois Tigeot 			   uint64_t addr, unsigned count,
893c6f73aabSFrançois Tigeot 			   uint32_t incr, uint32_t flags);
894c6f73aabSFrançois Tigeot void cik_sdma_vm_pad_ib(struct radeon_ib *ib);
895c6f73aabSFrançois Tigeot 
8967dcf36dcSFrançois Tigeot void cik_dma_vm_flush(struct radeon_device *rdev, struct radeon_ring *ring,
8977dcf36dcSFrançois Tigeot 		      unsigned vm_id, uint64_t pd_addr);
89857e252bfSMichael Neumann int cik_ib_parse(struct radeon_device *rdev, struct radeon_ib *ib);
899c6f73aabSFrançois Tigeot u32 cik_gfx_get_rptr(struct radeon_device *rdev,
90057e252bfSMichael Neumann 		     struct radeon_ring *ring);
901c6f73aabSFrançois Tigeot u32 cik_gfx_get_wptr(struct radeon_device *rdev,
90257e252bfSMichael Neumann 		     struct radeon_ring *ring);
903c6f73aabSFrançois Tigeot void cik_gfx_set_wptr(struct radeon_device *rdev,
904c6f73aabSFrançois Tigeot 		      struct radeon_ring *ring);
905c6f73aabSFrançois Tigeot u32 cik_compute_get_rptr(struct radeon_device *rdev,
906c6f73aabSFrançois Tigeot 			 struct radeon_ring *ring);
907c6f73aabSFrançois Tigeot u32 cik_compute_get_wptr(struct radeon_device *rdev,
908c6f73aabSFrançois Tigeot 			 struct radeon_ring *ring);
909c6f73aabSFrançois Tigeot void cik_compute_set_wptr(struct radeon_device *rdev,
910c6f73aabSFrançois Tigeot 			  struct radeon_ring *ring);
911c6f73aabSFrançois Tigeot u32 cik_sdma_get_rptr(struct radeon_device *rdev,
912c6f73aabSFrançois Tigeot 		      struct radeon_ring *ring);
913c6f73aabSFrançois Tigeot u32 cik_sdma_get_wptr(struct radeon_device *rdev,
914c6f73aabSFrançois Tigeot 		      struct radeon_ring *ring);
915c6f73aabSFrançois Tigeot void cik_sdma_set_wptr(struct radeon_device *rdev,
91657e252bfSMichael Neumann 		       struct radeon_ring *ring);
91757e252bfSMichael Neumann bool cik_gpu_is_lockup(struct radeon_device *rdev, struct radeon_ring *ring);
91857e252bfSMichael Neumann void cik_fence_ring_emit(struct radeon_device *rdev,
91957e252bfSMichael Neumann 			 struct radeon_fence *fence);
9204cd92098Szrj u32 cik_gpu_check_soft_reset(struct radeon_device *rdev);
9214cd92098Szrj void cik_sdma_enable(struct radeon_device *rdev, bool enable);
9224cd92098Szrj int cik_sdma_resume(struct radeon_device *rdev);
9234cd92098Szrj void cik_sdma_fini(struct radeon_device *rdev);
9244cd92098Szrj int ci_get_temp(struct radeon_device *rdev);
9254cd92098Szrj int kv_get_temp(struct radeon_device *rdev);
926c59a5c48SFrançois Tigeot int cik_get_allowed_info_register(struct radeon_device *rdev,
927c59a5c48SFrançois Tigeot 				  u32 reg, u32 *val);
9284cd92098Szrj 
9294cd92098Szrj int ci_dpm_init(struct radeon_device *rdev);
9304cd92098Szrj int ci_dpm_enable(struct radeon_device *rdev);
931c6f73aabSFrançois Tigeot int ci_dpm_late_enable(struct radeon_device *rdev);
9324cd92098Szrj void ci_dpm_disable(struct radeon_device *rdev);
9334cd92098Szrj int ci_dpm_pre_set_power_state(struct radeon_device *rdev);
9344cd92098Szrj int ci_dpm_set_power_state(struct radeon_device *rdev);
9354cd92098Szrj void ci_dpm_post_set_power_state(struct radeon_device *rdev);
9364cd92098Szrj void ci_dpm_setup_asic(struct radeon_device *rdev);
9374cd92098Szrj void ci_dpm_display_configuration_changed(struct radeon_device *rdev);
9384cd92098Szrj void ci_dpm_fini(struct radeon_device *rdev);
9394cd92098Szrj u32 ci_dpm_get_sclk(struct radeon_device *rdev, bool low);
9404cd92098Szrj u32 ci_dpm_get_mclk(struct radeon_device *rdev, bool low);
9414cd92098Szrj void ci_dpm_print_power_state(struct radeon_device *rdev,
9424cd92098Szrj 			      struct radeon_ps *ps);
9434cd92098Szrj void ci_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
9444cd92098Szrj 						    struct seq_file *m);
9454cd92098Szrj int ci_dpm_force_performance_level(struct radeon_device *rdev,
9464cd92098Szrj 				   enum radeon_dpm_forced_level level);
9474cd92098Szrj bool ci_dpm_vblank_too_short(struct radeon_device *rdev);
9484cd92098Szrj void ci_dpm_powergate_uvd(struct radeon_device *rdev, bool gate);
949c59a5c48SFrançois Tigeot u32 ci_dpm_get_current_sclk(struct radeon_device *rdev);
950c59a5c48SFrançois Tigeot u32 ci_dpm_get_current_mclk(struct radeon_device *rdev);
951c59a5c48SFrançois Tigeot 
952c59a5c48SFrançois Tigeot int ci_fan_ctrl_get_fan_speed_percent(struct radeon_device *rdev,
953c59a5c48SFrançois Tigeot 						 u32 *speed);
954c59a5c48SFrançois Tigeot int ci_fan_ctrl_set_fan_speed_percent(struct radeon_device *rdev,
955c59a5c48SFrançois Tigeot 						 u32 speed);
956c59a5c48SFrançois Tigeot u32 ci_fan_ctrl_get_mode(struct radeon_device *rdev);
957c59a5c48SFrançois Tigeot void ci_fan_ctrl_set_mode(struct radeon_device *rdev, u32 mode);
9584cd92098Szrj 
9594cd92098Szrj int kv_dpm_init(struct radeon_device *rdev);
9604cd92098Szrj int kv_dpm_enable(struct radeon_device *rdev);
961c6f73aabSFrançois Tigeot int kv_dpm_late_enable(struct radeon_device *rdev);
9624cd92098Szrj void kv_dpm_disable(struct radeon_device *rdev);
9634cd92098Szrj int kv_dpm_pre_set_power_state(struct radeon_device *rdev);
9644cd92098Szrj int kv_dpm_set_power_state(struct radeon_device *rdev);
9654cd92098Szrj void kv_dpm_post_set_power_state(struct radeon_device *rdev);
9664cd92098Szrj void kv_dpm_setup_asic(struct radeon_device *rdev);
9674cd92098Szrj void kv_dpm_display_configuration_changed(struct radeon_device *rdev);
9684cd92098Szrj void kv_dpm_fini(struct radeon_device *rdev);
9694cd92098Szrj u32 kv_dpm_get_sclk(struct radeon_device *rdev, bool low);
9704cd92098Szrj u32 kv_dpm_get_mclk(struct radeon_device *rdev, bool low);
9714cd92098Szrj void kv_dpm_print_power_state(struct radeon_device *rdev,
9724cd92098Szrj 			      struct radeon_ps *ps);
9734cd92098Szrj void kv_dpm_debugfs_print_current_performance_level(struct radeon_device *rdev,
9744cd92098Szrj 						    struct seq_file *m);
9754cd92098Szrj int kv_dpm_force_performance_level(struct radeon_device *rdev,
9764cd92098Szrj 				   enum radeon_dpm_forced_level level);
9774cd92098Szrj void kv_dpm_powergate_uvd(struct radeon_device *rdev, bool gate);
9784cd92098Szrj void kv_dpm_enable_bapm(struct radeon_device *rdev, bool enable);
979c59a5c48SFrançois Tigeot u32 kv_dpm_get_current_sclk(struct radeon_device *rdev);
980c59a5c48SFrançois Tigeot u32 kv_dpm_get_current_mclk(struct radeon_device *rdev);
9814cd92098Szrj 
9824cd92098Szrj /* uvd v1.0 */
9834cd92098Szrj uint32_t uvd_v1_0_get_rptr(struct radeon_device *rdev,
9844cd92098Szrj                            struct radeon_ring *ring);
9854cd92098Szrj uint32_t uvd_v1_0_get_wptr(struct radeon_device *rdev,
9864cd92098Szrj                            struct radeon_ring *ring);
9874cd92098Szrj void uvd_v1_0_set_wptr(struct radeon_device *rdev,
9884cd92098Szrj                        struct radeon_ring *ring);
989591d5043SFrançois Tigeot int uvd_v1_0_resume(struct radeon_device *rdev);
9904cd92098Szrj 
9914cd92098Szrj int uvd_v1_0_init(struct radeon_device *rdev);
9924cd92098Szrj void uvd_v1_0_fini(struct radeon_device *rdev);
9934cd92098Szrj int uvd_v1_0_start(struct radeon_device *rdev);
9944cd92098Szrj void uvd_v1_0_stop(struct radeon_device *rdev);
9954cd92098Szrj 
9964cd92098Szrj int uvd_v1_0_ring_test(struct radeon_device *rdev, struct radeon_ring *ring);
997591d5043SFrançois Tigeot void uvd_v1_0_fence_emit(struct radeon_device *rdev,
998591d5043SFrançois Tigeot 			 struct radeon_fence *fence);
9994cd92098Szrj int uvd_v1_0_ib_test(struct radeon_device *rdev, struct radeon_ring *ring);
1000c6f73aabSFrançois Tigeot bool uvd_v1_0_semaphore_emit(struct radeon_device *rdev,
10014cd92098Szrj 			     struct radeon_ring *ring,
10024cd92098Szrj 			     struct radeon_semaphore *semaphore,
10034cd92098Szrj 			     bool emit_wait);
10044cd92098Szrj void uvd_v1_0_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
10054cd92098Szrj 
10064cd92098Szrj /* uvd v2.2 */
10074cd92098Szrj int uvd_v2_2_resume(struct radeon_device *rdev);
10084cd92098Szrj void uvd_v2_2_fence_emit(struct radeon_device *rdev,
10094cd92098Szrj 			 struct radeon_fence *fence);
1010c59a5c48SFrançois Tigeot bool uvd_v2_2_semaphore_emit(struct radeon_device *rdev,
1011c59a5c48SFrançois Tigeot 			     struct radeon_ring *ring,
1012c59a5c48SFrançois Tigeot 			     struct radeon_semaphore *semaphore,
1013c59a5c48SFrançois Tigeot 			     bool emit_wait);
10144cd92098Szrj 
10154cd92098Szrj /* uvd v3.1 */
1016c6f73aabSFrançois Tigeot bool uvd_v3_1_semaphore_emit(struct radeon_device *rdev,
10174cd92098Szrj 			     struct radeon_ring *ring,
10184cd92098Szrj 			     struct radeon_semaphore *semaphore,
10194cd92098Szrj 			     bool emit_wait);
10204cd92098Szrj 
10214cd92098Szrj /* uvd v4.2 */
10224cd92098Szrj int uvd_v4_2_resume(struct radeon_device *rdev);
10234cd92098Szrj 
1024c6f73aabSFrançois Tigeot /* vce v1.0 */
1025c6f73aabSFrançois Tigeot uint32_t vce_v1_0_get_rptr(struct radeon_device *rdev,
1026c6f73aabSFrançois Tigeot 			   struct radeon_ring *ring);
1027c6f73aabSFrançois Tigeot uint32_t vce_v1_0_get_wptr(struct radeon_device *rdev,
1028c6f73aabSFrançois Tigeot 			   struct radeon_ring *ring);
1029c6f73aabSFrançois Tigeot void vce_v1_0_set_wptr(struct radeon_device *rdev,
1030c6f73aabSFrançois Tigeot 		       struct radeon_ring *ring);
1031c59a5c48SFrançois Tigeot int vce_v1_0_load_fw(struct radeon_device *rdev, uint32_t *data);
1032c59a5c48SFrançois Tigeot unsigned vce_v1_0_bo_size(struct radeon_device *rdev);
1033c59a5c48SFrançois Tigeot int vce_v1_0_resume(struct radeon_device *rdev);
1034c6f73aabSFrançois Tigeot int vce_v1_0_init(struct radeon_device *rdev);
1035c6f73aabSFrançois Tigeot int vce_v1_0_start(struct radeon_device *rdev);
1036c6f73aabSFrançois Tigeot 
1037c6f73aabSFrançois Tigeot /* vce v2.0 */
1038c59a5c48SFrançois Tigeot unsigned vce_v2_0_bo_size(struct radeon_device *rdev);
1039c6f73aabSFrançois Tigeot int vce_v2_0_resume(struct radeon_device *rdev);
1040c6f73aabSFrançois Tigeot void vce_v2_0_enable_mgcg(struct radeon_device *rdev, bool enable);
1041c6f73aabSFrançois Tigeot 
1042926deccbSFrançois Tigeot #endif
1043