Line data Source code
1 : /*
2 : * Copyright 2008 Advanced Micro Devices, Inc.
3 : * Copyright 2008 Red Hat Inc.
4 : * Copyright 2009 Jerome Glisse.
5 : *
6 : * Permission is hereby granted, free of charge, to any person obtaining a
7 : * copy of this software and associated documentation files (the "Software"),
8 : * to deal in the Software without restriction, including without limitation
9 : * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 : * and/or sell copies of the Software, and to permit persons to whom the
11 : * Software is furnished to do so, subject to the following conditions:
12 : *
13 : * The above copyright notice and this permission notice shall be included in
14 : * all copies or substantial portions of the Software.
15 : *
16 : * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 : * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 : * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 : * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
20 : * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21 : * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22 : * OTHER DEALINGS IN THE SOFTWARE.
23 : *
24 : * Authors: Dave Airlie
25 : * Alex Deucher
26 : * Jerome Glisse
27 : */
28 : #ifndef __RADEON_H__
29 : #define __RADEON_H__
30 :
31 : /* TODO: Here are things that needs to be done :
32 : * - surface allocator & initializer : (bit like scratch reg) should
33 : * initialize HDP_ stuff on RS600, R600, R700 hw, well anythings
34 : * related to surface
35 : * - WB : write back stuff (do it bit like scratch reg things)
36 : * - Vblank : look at Jesse's rework and what we should do
37 : * - r600/r700: gart & cp
38 : * - cs : clean cs ioctl use bitmap & things like that.
39 : * - power management stuff
40 : * - Barrier in gart code
41 : * - Unmappabled vram ?
42 : * - TESTING, TESTING, TESTING
43 : */
44 :
45 : /* Initialization path:
46 : * We expect that acceleration initialization might fail for various
47 : * reasons even thought we work hard to make it works on most
48 : * configurations. In order to still have a working userspace in such
49 : * situation the init path must succeed up to the memory controller
50 : * initialization point. Failure before this point are considered as
51 : * fatal error. Here is the init callchain :
52 : * radeon_device_init perform common structure, mutex initialization
53 : * asic_init setup the GPU memory layout and perform all
54 : * one time initialization (failure in this
55 : * function are considered fatal)
56 : * asic_startup setup the GPU acceleration, in order to
57 : * follow guideline the first thing this
58 : * function should do is setting the GPU
59 : * memory controller (only MC setup failure
60 : * are considered as fatal)
61 : */
62 :
63 : #include <dev/pci/drm/drm_linux.h>
64 :
65 : #include <dev/pci/drm/ttm/ttm_bo_api.h>
66 : #include <dev/pci/drm/ttm/ttm_bo_driver.h>
67 : #include <dev/pci/drm/ttm/ttm_placement.h>
68 : #include <dev/pci/drm/ttm/ttm_module.h>
69 : #include <dev/pci/drm/ttm/ttm_execbuf_util.h>
70 :
71 : #include <dev/pci/drm/drmP.h>
72 :
73 : #include <dev/wscons/wsconsio.h>
74 : #include <dev/wscons/wsdisplayvar.h>
75 : #include <dev/rasops/rasops.h>
76 :
77 : #ifdef __sparc64__
78 : #include <machine/fbvar.h>
79 : #endif
80 :
81 : #include "radeon_family.h"
82 : #include "radeon_mode.h"
83 : #include "radeon_reg.h"
84 :
85 : /*
86 : * Modules parameters.
87 : */
88 : extern int radeon_no_wb;
89 : extern int radeon_modeset;
90 : extern int radeon_dynclks;
91 : extern int radeon_r4xx_atom;
92 : extern int radeon_agpmode;
93 : extern int radeon_vram_limit;
94 : extern int radeon_gart_size;
95 : extern int radeon_benchmarking;
96 : extern int radeon_testing;
97 : extern int radeon_connector_table;
98 : extern int radeon_tv;
99 : extern int radeon_audio;
100 : extern int radeon_disp_priority;
101 : extern int radeon_hw_i2c;
102 : extern int radeon_pcie_gen2;
103 : extern int radeon_msi;
104 : extern int radeon_lockup_timeout;
105 : extern int radeon_fastfb;
106 : extern int radeon_dpm;
107 : extern int radeon_aspm;
108 : extern int radeon_runtime_pm;
109 : extern int radeon_hard_reset;
110 : extern int radeon_vm_size;
111 : extern int radeon_vm_block_size;
112 : extern int radeon_deep_color;
113 : extern int radeon_use_pflipirq;
114 : extern int radeon_bapm;
115 : extern int radeon_backlight;
116 : extern int radeon_auxch;
117 : extern int radeon_mst;
118 :
119 : /*
120 : * Copy from radeon_drv.h so we don't have to include both and have conflicting
121 : * symbol;
122 : */
123 : #define RADEON_MAX_USEC_TIMEOUT 100000 /* 100 ms */
124 : #define RADEON_FENCE_JIFFIES_TIMEOUT (HZ / 2)
125 : /* RADEON_IB_POOL_SIZE must be a power of 2 */
126 : #define RADEON_IB_POOL_SIZE 16
127 : #define RADEON_DEBUGFS_MAX_COMPONENTS 32
128 : #define RADEONFB_CONN_LIMIT 4
129 : #define RADEON_BIOS_NUM_SCRATCH 8
130 :
131 : /* internal ring indices */
132 : /* r1xx+ has gfx CP ring */
133 : #define RADEON_RING_TYPE_GFX_INDEX 0
134 :
135 : /* cayman has 2 compute CP rings */
136 : #define CAYMAN_RING_TYPE_CP1_INDEX 1
137 : #define CAYMAN_RING_TYPE_CP2_INDEX 2
138 :
139 : /* R600+ has an async dma ring */
140 : #define R600_RING_TYPE_DMA_INDEX 3
141 : /* cayman add a second async dma ring */
142 : #define CAYMAN_RING_TYPE_DMA1_INDEX 4
143 :
144 : /* R600+ */
145 : #define R600_RING_TYPE_UVD_INDEX 5
146 :
147 : /* TN+ */
148 : #define TN_RING_TYPE_VCE1_INDEX 6
149 : #define TN_RING_TYPE_VCE2_INDEX 7
150 :
151 : /* max number of rings */
152 : #define RADEON_NUM_RINGS 8
153 :
154 : /* number of hw syncs before falling back on blocking */
155 : #define RADEON_NUM_SYNCS 4
156 :
157 : /* hardcode those limit for now */
158 : #define RADEON_VA_IB_OFFSET (1 << 20)
159 : #define RADEON_VA_RESERVED_SIZE (8 << 20)
160 : #define RADEON_IB_VM_MAX_SIZE (64 << 10)
161 :
162 : /* hard reset data */
163 : #define RADEON_ASIC_RESET_DATA 0x39d5e86b
164 :
165 : /* reset flags */
166 : #define RADEON_RESET_GFX (1 << 0)
167 : #define RADEON_RESET_COMPUTE (1 << 1)
168 : #define RADEON_RESET_DMA (1 << 2)
169 : #define RADEON_RESET_CP (1 << 3)
170 : #define RADEON_RESET_GRBM (1 << 4)
171 : #define RADEON_RESET_DMA1 (1 << 5)
172 : #define RADEON_RESET_RLC (1 << 6)
173 : #define RADEON_RESET_SEM (1 << 7)
174 : #define RADEON_RESET_IH (1 << 8)
175 : #define RADEON_RESET_VMC (1 << 9)
176 : #define RADEON_RESET_MC (1 << 10)
177 : #define RADEON_RESET_DISPLAY (1 << 11)
178 :
179 : /* CG block flags */
180 : #define RADEON_CG_BLOCK_GFX (1 << 0)
181 : #define RADEON_CG_BLOCK_MC (1 << 1)
182 : #define RADEON_CG_BLOCK_SDMA (1 << 2)
183 : #define RADEON_CG_BLOCK_UVD (1 << 3)
184 : #define RADEON_CG_BLOCK_VCE (1 << 4)
185 : #define RADEON_CG_BLOCK_HDP (1 << 5)
186 : #define RADEON_CG_BLOCK_BIF (1 << 6)
187 :
188 : /* CG flags */
189 : #define RADEON_CG_SUPPORT_GFX_MGCG (1 << 0)
190 : #define RADEON_CG_SUPPORT_GFX_MGLS (1 << 1)
191 : #define RADEON_CG_SUPPORT_GFX_CGCG (1 << 2)
192 : #define RADEON_CG_SUPPORT_GFX_CGLS (1 << 3)
193 : #define RADEON_CG_SUPPORT_GFX_CGTS (1 << 4)
194 : #define RADEON_CG_SUPPORT_GFX_CGTS_LS (1 << 5)
195 : #define RADEON_CG_SUPPORT_GFX_CP_LS (1 << 6)
196 : #define RADEON_CG_SUPPORT_GFX_RLC_LS (1 << 7)
197 : #define RADEON_CG_SUPPORT_MC_LS (1 << 8)
198 : #define RADEON_CG_SUPPORT_MC_MGCG (1 << 9)
199 : #define RADEON_CG_SUPPORT_SDMA_LS (1 << 10)
200 : #define RADEON_CG_SUPPORT_SDMA_MGCG (1 << 11)
201 : #define RADEON_CG_SUPPORT_BIF_LS (1 << 12)
202 : #define RADEON_CG_SUPPORT_UVD_MGCG (1 << 13)
203 : #define RADEON_CG_SUPPORT_VCE_MGCG (1 << 14)
204 : #define RADEON_CG_SUPPORT_HDP_LS (1 << 15)
205 : #define RADEON_CG_SUPPORT_HDP_MGCG (1 << 16)
206 :
207 : /* PG flags */
208 : #define RADEON_PG_SUPPORT_GFX_PG (1 << 0)
209 : #define RADEON_PG_SUPPORT_GFX_SMG (1 << 1)
210 : #define RADEON_PG_SUPPORT_GFX_DMG (1 << 2)
211 : #define RADEON_PG_SUPPORT_UVD (1 << 3)
212 : #define RADEON_PG_SUPPORT_VCE (1 << 4)
213 : #define RADEON_PG_SUPPORT_CP (1 << 5)
214 : #define RADEON_PG_SUPPORT_GDS (1 << 6)
215 : #define RADEON_PG_SUPPORT_RLC_SMU_HS (1 << 7)
216 : #define RADEON_PG_SUPPORT_SDMA (1 << 8)
217 : #define RADEON_PG_SUPPORT_ACP (1 << 9)
218 : #define RADEON_PG_SUPPORT_SAMU (1 << 10)
219 :
220 : /* max cursor sizes (in pixels) */
221 : #define CURSOR_WIDTH 64
222 : #define CURSOR_HEIGHT 64
223 :
224 : #define CIK_CURSOR_WIDTH 128
225 : #define CIK_CURSOR_HEIGHT 128
226 :
227 : /*
228 : * Errata workarounds.
229 : */
230 : enum radeon_pll_errata {
231 : CHIP_ERRATA_R300_CG = 0x00000001,
232 : CHIP_ERRATA_PLL_DUMMYREADS = 0x00000002,
233 : CHIP_ERRATA_PLL_DELAY = 0x00000004
234 : };
235 :
236 :
237 : struct radeon_device;
238 :
239 :
240 : /*
241 : * BIOS.
242 : */
243 : bool radeon_get_bios(struct radeon_device *rdev);
244 :
245 : /*
246 : * Dummy page
247 : */
248 : struct radeon_dummy_page {
249 : uint64_t entry;
250 : struct drm_dmamem *dmah;
251 : dma_addr_t addr;
252 : };
253 : int radeon_dummy_page_init(struct radeon_device *rdev);
254 : void radeon_dummy_page_fini(struct radeon_device *rdev);
255 :
256 :
257 : /*
258 : * Clocks
259 : */
260 : struct radeon_clock {
261 : struct radeon_pll p1pll;
262 : struct radeon_pll p2pll;
263 : struct radeon_pll dcpll;
264 : struct radeon_pll spll;
265 : struct radeon_pll mpll;
266 : /* 10 Khz units */
267 : uint32_t default_mclk;
268 : uint32_t default_sclk;
269 : uint32_t default_dispclk;
270 : uint32_t current_dispclk;
271 : uint32_t dp_extclk;
272 : uint32_t max_pixel_clock;
273 : uint32_t vco_freq;
274 : };
275 :
276 : /*
277 : * Power management
278 : */
279 : int radeon_pm_init(struct radeon_device *rdev);
280 : int radeon_pm_late_init(struct radeon_device *rdev);
281 : void radeon_pm_fini(struct radeon_device *rdev);
282 : void radeon_pm_compute_clocks(struct radeon_device *rdev);
283 : void radeon_pm_suspend(struct radeon_device *rdev);
284 : void radeon_pm_resume(struct radeon_device *rdev);
285 : void radeon_combios_get_power_modes(struct radeon_device *rdev);
286 : void radeon_atombios_get_power_modes(struct radeon_device *rdev);
287 : int radeon_atom_get_clock_dividers(struct radeon_device *rdev,
288 : u8 clock_type,
289 : u32 clock,
290 : bool strobe_mode,
291 : struct atom_clock_dividers *dividers);
292 : int radeon_atom_get_memory_pll_dividers(struct radeon_device *rdev,
293 : u32 clock,
294 : bool strobe_mode,
295 : struct atom_mpll_param *mpll_param);
296 : void radeon_atom_set_voltage(struct radeon_device *rdev, u16 voltage_level, u8 voltage_type);
297 : int radeon_atom_get_voltage_gpio_settings(struct radeon_device *rdev,
298 : u16 voltage_level, u8 voltage_type,
299 : u32 *gpio_value, u32 *gpio_mask);
300 : void radeon_atom_set_engine_dram_timings(struct radeon_device *rdev,
301 : u32 eng_clock, u32 mem_clock);
302 : int radeon_atom_get_voltage_step(struct radeon_device *rdev,
303 : u8 voltage_type, u16 *voltage_step);
304 : int radeon_atom_get_max_vddc(struct radeon_device *rdev, u8 voltage_type,
305 : u16 voltage_id, u16 *voltage);
306 : int radeon_atom_get_leakage_vddc_based_on_leakage_idx(struct radeon_device *rdev,
307 : u16 *voltage,
308 : u16 leakage_idx);
309 : int radeon_atom_get_leakage_id_from_vbios(struct radeon_device *rdev,
310 : u16 *leakage_id);
311 : int radeon_atom_get_leakage_vddc_based_on_leakage_params(struct radeon_device *rdev,
312 : u16 *vddc, u16 *vddci,
313 : u16 virtual_voltage_id,
314 : u16 vbios_voltage_id);
315 : int radeon_atom_get_voltage_evv(struct radeon_device *rdev,
316 : u16 virtual_voltage_id,
317 : u16 *voltage);
318 : int radeon_atom_round_to_true_voltage(struct radeon_device *rdev,
319 : u8 voltage_type,
320 : u16 nominal_voltage,
321 : u16 *true_voltage);
322 : int radeon_atom_get_min_voltage(struct radeon_device *rdev,
323 : u8 voltage_type, u16 *min_voltage);
324 : int radeon_atom_get_max_voltage(struct radeon_device *rdev,
325 : u8 voltage_type, u16 *max_voltage);
326 : int radeon_atom_get_voltage_table(struct radeon_device *rdev,
327 : u8 voltage_type, u8 voltage_mode,
328 : struct atom_voltage_table *voltage_table);
329 : bool radeon_atom_is_voltage_gpio(struct radeon_device *rdev,
330 : u8 voltage_type, u8 voltage_mode);
331 : int radeon_atom_get_svi2_info(struct radeon_device *rdev,
332 : u8 voltage_type,
333 : u8 *svd_gpio_id, u8 *svc_gpio_id);
334 : void radeon_atom_update_memory_dll(struct radeon_device *rdev,
335 : u32 mem_clock);
336 : void radeon_atom_set_ac_timing(struct radeon_device *rdev,
337 : u32 mem_clock);
338 : int radeon_atom_init_mc_reg_table(struct radeon_device *rdev,
339 : u8 module_index,
340 : struct atom_mc_reg_table *reg_table);
341 : int radeon_atom_get_memory_info(struct radeon_device *rdev,
342 : u8 module_index, struct atom_memory_info *mem_info);
343 : int radeon_atom_get_mclk_range_table(struct radeon_device *rdev,
344 : bool gddr5, u8 module_index,
345 : struct atom_memory_clock_range_table *mclk_range_table);
346 : int radeon_atom_get_max_vddc(struct radeon_device *rdev, u8 voltage_type,
347 : u16 voltage_id, u16 *voltage);
348 : void rs690_pm_info(struct radeon_device *rdev);
349 : extern void evergreen_tiling_fields(unsigned tiling_flags, unsigned *bankw,
350 : unsigned *bankh, unsigned *mtaspect,
351 : unsigned *tile_split);
352 :
353 : /*
354 : * Fences.
355 : */
356 : struct radeon_fence_driver {
357 : struct radeon_device *rdev;
358 : uint32_t scratch_reg;
359 : uint64_t gpu_addr;
360 : volatile uint32_t *cpu_addr;
361 : /* sync_seq is protected by ring emission lock */
362 : uint64_t sync_seq[RADEON_NUM_RINGS];
363 : atomic64_t last_seq;
364 : bool initialized, delayed_irq;
365 : struct delayed_work lockup_work;
366 : };
367 :
368 : struct radeon_fence {
369 : struct fence base;
370 :
371 : struct radeon_device *rdev;
372 : uint64_t seq;
373 : /* RB, DMA, etc. */
374 : unsigned ring;
375 : bool is_vm_update;
376 :
377 : wait_queue_t fence_wake;
378 : };
379 :
380 : int radeon_fence_driver_start_ring(struct radeon_device *rdev, int ring);
381 : int radeon_fence_driver_init(struct radeon_device *rdev);
382 : void radeon_fence_driver_fini(struct radeon_device *rdev);
383 : void radeon_fence_driver_force_completion(struct radeon_device *rdev, int ring);
384 : int radeon_fence_emit(struct radeon_device *rdev, struct radeon_fence **fence, int ring);
385 : void radeon_fence_process(struct radeon_device *rdev, int ring);
386 : bool radeon_fence_signaled(struct radeon_fence *fence);
387 : int radeon_fence_wait(struct radeon_fence *fence, bool interruptible);
388 : int radeon_fence_wait_next(struct radeon_device *rdev, int ring);
389 : int radeon_fence_wait_empty(struct radeon_device *rdev, int ring);
390 : int radeon_fence_wait_any(struct radeon_device *rdev,
391 : struct radeon_fence **fences,
392 : bool intr);
393 : struct radeon_fence *radeon_fence_ref(struct radeon_fence *fence);
394 : void radeon_fence_unref(struct radeon_fence **fence);
395 : unsigned radeon_fence_count_emitted(struct radeon_device *rdev, int ring);
396 : bool radeon_fence_need_sync(struct radeon_fence *fence, int ring);
397 : void radeon_fence_note_sync(struct radeon_fence *fence, int ring);
398 0 : static inline struct radeon_fence *radeon_fence_later(struct radeon_fence *a,
399 : struct radeon_fence *b)
400 : {
401 0 : if (!a) {
402 0 : return b;
403 : }
404 :
405 0 : if (!b) {
406 0 : return a;
407 : }
408 :
409 0 : BUG_ON(a->ring != b->ring);
410 :
411 0 : if (a->seq > b->seq) {
412 0 : return a;
413 : } else {
414 0 : return b;
415 : }
416 0 : }
417 :
418 0 : static inline bool radeon_fence_is_earlier(struct radeon_fence *a,
419 : struct radeon_fence *b)
420 : {
421 0 : if (!a) {
422 0 : return false;
423 : }
424 :
425 0 : if (!b) {
426 0 : return true;
427 : }
428 :
429 0 : BUG_ON(a->ring != b->ring);
430 :
431 0 : return a->seq < b->seq;
432 0 : }
433 :
434 : /*
435 : * Tiling registers
436 : */
437 : struct radeon_surface_reg {
438 : struct radeon_bo *bo;
439 : };
440 :
441 : #define RADEON_GEM_MAX_SURFACES 8
442 :
443 : /*
444 : * TTM.
445 : */
446 : struct radeon_mman {
447 : struct ttm_bo_global_ref bo_global_ref;
448 : struct drm_global_reference mem_global_ref;
449 : struct ttm_bo_device bdev;
450 : bool mem_global_referenced;
451 : bool initialized;
452 :
453 : #if defined(CONFIG_DEBUG_FS)
454 : struct dentry *vram;
455 : struct dentry *gtt;
456 : #endif
457 : };
458 :
459 : struct radeon_bo_list {
460 : struct radeon_bo *robj;
461 : struct ttm_validate_buffer tv;
462 : uint64_t gpu_offset;
463 : unsigned prefered_domains;
464 : unsigned allowed_domains;
465 : uint32_t tiling_flags;
466 : };
467 :
468 : /* bo virtual address in a specific vm */
469 : struct radeon_bo_va {
470 : /* protected by bo being reserved */
471 : struct list_head bo_list;
472 : uint32_t flags;
473 : struct radeon_fence *last_pt_update;
474 : unsigned ref_count;
475 :
476 : /* protected by vm mutex */
477 : struct interval_tree_node it;
478 : struct list_head vm_status;
479 :
480 : /* constant after initialization */
481 : struct radeon_vm *vm;
482 : struct radeon_bo *bo;
483 : };
484 :
485 : struct radeon_bo {
486 : /* Protected by gem.mutex */
487 : struct list_head list;
488 : /* Protected by tbo.reserved */
489 : u32 initial_domain;
490 : struct ttm_place placements[4];
491 : struct ttm_placement placement;
492 : struct ttm_buffer_object tbo;
493 : struct ttm_bo_kmap_obj kmap;
494 : u32 flags;
495 : unsigned pin_count;
496 : void *kptr;
497 : u32 tiling_flags;
498 : u32 pitch;
499 : int surface_reg;
500 : /* list of all virtual address to which this bo
501 : * is associated to
502 : */
503 : struct list_head va;
504 : /* Constant after initialization */
505 : struct radeon_device *rdev;
506 : struct drm_gem_object gem_base;
507 :
508 : struct ttm_bo_kmap_obj dma_buf_vmap;
509 : pid_t pid;
510 :
511 : struct radeon_mn *mn;
512 : struct list_head mn_list;
513 : };
514 : #define gem_to_radeon_bo(gobj) container_of((gobj), struct radeon_bo, gem_base)
515 :
516 : int radeon_gem_debugfs_init(struct radeon_device *rdev);
517 :
518 : /* sub-allocation manager, it has to be protected by another lock.
519 : * By conception this is an helper for other part of the driver
520 : * like the indirect buffer or semaphore, which both have their
521 : * locking.
522 : *
523 : * Principe is simple, we keep a list of sub allocation in offset
524 : * order (first entry has offset == 0, last entry has the highest
525 : * offset).
526 : *
527 : * When allocating new object we first check if there is room at
528 : * the end total_size - (last_object_offset + last_object_size) >=
529 : * alloc_size. If so we allocate new object there.
530 : *
531 : * When there is not enough room at the end, we start waiting for
532 : * each sub object until we reach object_offset+object_size >=
533 : * alloc_size, this object then become the sub object we return.
534 : *
535 : * Alignment can't be bigger than page size.
536 : *
537 : * Hole are not considered for allocation to keep things simple.
538 : * Assumption is that there won't be hole (all object on same
539 : * alignment).
540 : */
541 : struct radeon_sa_manager {
542 : wait_queue_head_t wq;
543 : struct radeon_bo *bo;
544 : struct list_head *hole;
545 : struct list_head flist[RADEON_NUM_RINGS];
546 : struct list_head olist;
547 : unsigned size;
548 : uint64_t gpu_addr;
549 : void *cpu_ptr;
550 : uint32_t domain;
551 : uint32_t align;
552 : };
553 :
554 : struct radeon_sa_bo;
555 :
556 : /* sub-allocation buffer */
557 : struct radeon_sa_bo {
558 : struct list_head olist;
559 : struct list_head flist;
560 : struct radeon_sa_manager *manager;
561 : unsigned soffset;
562 : unsigned eoffset;
563 : struct radeon_fence *fence;
564 : };
565 :
566 : /*
567 : * GEM objects.
568 : */
569 : struct radeon_gem {
570 : struct rwlock mutex;
571 : struct list_head objects;
572 : };
573 :
574 : int radeon_gem_init(struct radeon_device *rdev);
575 : void radeon_gem_fini(struct radeon_device *rdev);
576 : int radeon_gem_object_create(struct radeon_device *rdev, unsigned long size,
577 : int alignment, int initial_domain,
578 : u32 flags, bool kernel,
579 : struct drm_gem_object **obj);
580 :
581 : int radeon_mode_dumb_create(struct drm_file *file_priv,
582 : struct drm_device *dev,
583 : struct drm_mode_create_dumb *args);
584 : int radeon_mode_dumb_mmap(struct drm_file *filp,
585 : struct drm_device *dev,
586 : uint32_t handle, uint64_t *offset_p);
587 :
588 : /*
589 : * Semaphores.
590 : */
591 : struct radeon_semaphore {
592 : struct radeon_sa_bo *sa_bo;
593 : signed waiters;
594 : uint64_t gpu_addr;
595 : };
596 :
597 : int radeon_semaphore_create(struct radeon_device *rdev,
598 : struct radeon_semaphore **semaphore);
599 : bool radeon_semaphore_emit_signal(struct radeon_device *rdev, int ring,
600 : struct radeon_semaphore *semaphore);
601 : bool radeon_semaphore_emit_wait(struct radeon_device *rdev, int ring,
602 : struct radeon_semaphore *semaphore);
603 : void radeon_semaphore_free(struct radeon_device *rdev,
604 : struct radeon_semaphore **semaphore,
605 : struct radeon_fence *fence);
606 :
607 : /*
608 : * Synchronization
609 : */
610 : struct radeon_sync {
611 : struct radeon_semaphore *semaphores[RADEON_NUM_SYNCS];
612 : struct radeon_fence *sync_to[RADEON_NUM_RINGS];
613 : struct radeon_fence *last_vm_update;
614 : };
615 :
616 : void radeon_sync_create(struct radeon_sync *sync);
617 : void radeon_sync_fence(struct radeon_sync *sync,
618 : struct radeon_fence *fence);
619 : int radeon_sync_resv(struct radeon_device *rdev,
620 : struct radeon_sync *sync,
621 : struct reservation_object *resv,
622 : bool shared);
623 : int radeon_sync_rings(struct radeon_device *rdev,
624 : struct radeon_sync *sync,
625 : int waiting_ring);
626 : void radeon_sync_free(struct radeon_device *rdev, struct radeon_sync *sync,
627 : struct radeon_fence *fence);
628 :
629 : /*
630 : * GART structures, functions & helpers
631 : */
632 : struct radeon_mc;
633 :
634 : #define RADEON_GPU_PAGE_SIZE 4096
635 : #define RADEON_GPU_PAGE_MASK (RADEON_GPU_PAGE_SIZE - 1)
636 : #define RADEON_GPU_PAGE_SHIFT 12
637 : #define RADEON_GPU_PAGE_ALIGN(a) (((a) + RADEON_GPU_PAGE_MASK) & ~RADEON_GPU_PAGE_MASK)
638 :
639 : #define RADEON_GART_PAGE_DUMMY 0
640 : #define RADEON_GART_PAGE_VALID (1 << 0)
641 : #define RADEON_GART_PAGE_READ (1 << 1)
642 : #define RADEON_GART_PAGE_WRITE (1 << 2)
643 : #define RADEON_GART_PAGE_SNOOP (1 << 3)
644 :
645 : struct radeon_gart {
646 : dma_addr_t table_addr;
647 : struct drm_dmamem *dmah;
648 : struct radeon_bo *robj;
649 : void *ptr;
650 : unsigned num_gpu_pages;
651 : unsigned num_cpu_pages;
652 : unsigned table_size;
653 : struct vm_page **pages;
654 : uint64_t *pages_entry;
655 : bool ready;
656 : };
657 :
658 : int radeon_gart_table_ram_alloc(struct radeon_device *rdev);
659 : void radeon_gart_table_ram_free(struct radeon_device *rdev);
660 : int radeon_gart_table_vram_alloc(struct radeon_device *rdev);
661 : void radeon_gart_table_vram_free(struct radeon_device *rdev);
662 : int radeon_gart_table_vram_pin(struct radeon_device *rdev);
663 : void radeon_gart_table_vram_unpin(struct radeon_device *rdev);
664 : int radeon_gart_init(struct radeon_device *rdev);
665 : void radeon_gart_fini(struct radeon_device *rdev);
666 : void radeon_gart_unbind(struct radeon_device *rdev, unsigned offset,
667 : int pages);
668 : int radeon_gart_bind(struct radeon_device *rdev, unsigned offset,
669 : int pages, struct vm_page **pagelist,
670 : dma_addr_t *dma_addr, uint32_t flags);
671 :
672 :
673 : /*
674 : * GPU MC structures, functions & helpers
675 : */
676 : struct radeon_mc {
677 : resource_size_t aper_size;
678 : resource_size_t aper_base;
679 : resource_size_t agp_base;
680 : /* for some chips with <= 32MB we need to lie
681 : * about vram size near mc fb location */
682 : u64 mc_vram_size;
683 : u64 visible_vram_size;
684 : u64 gtt_size;
685 : u64 gtt_start;
686 : u64 gtt_end;
687 : u64 vram_start;
688 : u64 vram_end;
689 : unsigned vram_width;
690 : u64 real_vram_size;
691 : int vram_mtrr;
692 : bool vram_is_ddr;
693 : bool igp_sideport_enabled;
694 : u64 gtt_base_align;
695 : u64 mc_mask;
696 : };
697 :
698 : bool radeon_combios_sideport_present(struct radeon_device *rdev);
699 : bool radeon_atombios_sideport_present(struct radeon_device *rdev);
700 :
701 : /*
702 : * GPU scratch registers structures, functions & helpers
703 : */
704 : struct radeon_scratch {
705 : unsigned num_reg;
706 : uint32_t reg_base;
707 : bool free[32];
708 : uint32_t reg[32];
709 : };
710 :
711 : int radeon_scratch_get(struct radeon_device *rdev, uint32_t *reg);
712 : void radeon_scratch_free(struct radeon_device *rdev, uint32_t reg);
713 :
714 : /*
715 : * GPU doorbell structures, functions & helpers
716 : */
717 : #define RADEON_MAX_DOORBELLS 1024 /* Reserve at most 1024 doorbell slots for radeon-owned rings. */
718 :
719 : struct radeon_doorbell {
720 : /* doorbell mmio */
721 : resource_size_t base;
722 : resource_size_t size;
723 : bus_space_handle_t bsh;
724 : u32 num_doorbells; /* Number of doorbells actually reserved for radeon. */
725 : DECLARE_BITMAP(used, RADEON_MAX_DOORBELLS);
726 : };
727 :
728 : int radeon_doorbell_get(struct radeon_device *rdev, u32 *page);
729 : void radeon_doorbell_free(struct radeon_device *rdev, u32 doorbell);
730 : void radeon_doorbell_get_kfd_info(struct radeon_device *rdev,
731 : phys_addr_t *aperture_base,
732 : size_t *aperture_size,
733 : size_t *start_offset);
734 :
735 : /*
736 : * IRQS.
737 : */
738 :
739 : struct radeon_flip_work {
740 : struct work_struct flip_work;
741 : struct work_struct unpin_work;
742 : struct radeon_device *rdev;
743 : int crtc_id;
744 : uint64_t base;
745 : struct drm_pending_vblank_event *event;
746 : struct radeon_bo *old_rbo;
747 : struct fence *fence;
748 : };
749 :
750 : struct r500_irq_stat_regs {
751 : u32 disp_int;
752 : u32 hdmi0_status;
753 : };
754 :
755 : struct r600_irq_stat_regs {
756 : u32 disp_int;
757 : u32 disp_int_cont;
758 : u32 disp_int_cont2;
759 : u32 d1grph_int;
760 : u32 d2grph_int;
761 : u32 hdmi0_status;
762 : u32 hdmi1_status;
763 : };
764 :
765 : struct evergreen_irq_stat_regs {
766 : u32 disp_int;
767 : u32 disp_int_cont;
768 : u32 disp_int_cont2;
769 : u32 disp_int_cont3;
770 : u32 disp_int_cont4;
771 : u32 disp_int_cont5;
772 : u32 d1grph_int;
773 : u32 d2grph_int;
774 : u32 d3grph_int;
775 : u32 d4grph_int;
776 : u32 d5grph_int;
777 : u32 d6grph_int;
778 : u32 afmt_status1;
779 : u32 afmt_status2;
780 : u32 afmt_status3;
781 : u32 afmt_status4;
782 : u32 afmt_status5;
783 : u32 afmt_status6;
784 : };
785 :
786 : struct cik_irq_stat_regs {
787 : u32 disp_int;
788 : u32 disp_int_cont;
789 : u32 disp_int_cont2;
790 : u32 disp_int_cont3;
791 : u32 disp_int_cont4;
792 : u32 disp_int_cont5;
793 : u32 disp_int_cont6;
794 : u32 d1grph_int;
795 : u32 d2grph_int;
796 : u32 d3grph_int;
797 : u32 d4grph_int;
798 : u32 d5grph_int;
799 : u32 d6grph_int;
800 : };
801 :
802 : union radeon_irq_stat_regs {
803 : struct r500_irq_stat_regs r500;
804 : struct r600_irq_stat_regs r600;
805 : struct evergreen_irq_stat_regs evergreen;
806 : struct cik_irq_stat_regs cik;
807 : };
808 :
809 : struct radeon_irq {
810 : bool installed;
811 : spinlock_t lock;
812 : atomic_t ring_int[RADEON_NUM_RINGS];
813 : bool crtc_vblank_int[RADEON_MAX_CRTCS];
814 : atomic_t pflip[RADEON_MAX_CRTCS];
815 : wait_queue_head_t vblank_queue;
816 : bool hpd[RADEON_MAX_HPD_PINS];
817 : bool afmt[RADEON_MAX_AFMT_BLOCKS];
818 : union radeon_irq_stat_regs stat_regs;
819 : bool dpm_thermal;
820 : };
821 :
822 : int radeon_irq_kms_init(struct radeon_device *rdev);
823 : void radeon_irq_kms_fini(struct radeon_device *rdev);
824 : void radeon_irq_kms_sw_irq_get(struct radeon_device *rdev, int ring);
825 : bool radeon_irq_kms_sw_irq_get_delayed(struct radeon_device *rdev, int ring);
826 : void radeon_irq_kms_sw_irq_put(struct radeon_device *rdev, int ring);
827 : void radeon_irq_kms_pflip_irq_get(struct radeon_device *rdev, int crtc);
828 : void radeon_irq_kms_pflip_irq_put(struct radeon_device *rdev, int crtc);
829 : void radeon_irq_kms_enable_afmt(struct radeon_device *rdev, int block);
830 : void radeon_irq_kms_disable_afmt(struct radeon_device *rdev, int block);
831 : void radeon_irq_kms_enable_hpd(struct radeon_device *rdev, unsigned hpd_mask);
832 : void radeon_irq_kms_disable_hpd(struct radeon_device *rdev, unsigned hpd_mask);
833 :
834 : /*
835 : * CP & rings.
836 : */
837 :
838 : struct radeon_ib {
839 : struct radeon_sa_bo *sa_bo;
840 : uint32_t length_dw;
841 : uint64_t gpu_addr;
842 : uint32_t *ptr;
843 : int ring;
844 : struct radeon_fence *fence;
845 : struct radeon_vm *vm;
846 : bool is_const_ib;
847 : struct radeon_sync sync;
848 : };
849 :
850 : struct radeon_ring {
851 : struct radeon_bo *ring_obj;
852 : volatile uint32_t *ring;
853 : unsigned rptr_offs;
854 : unsigned rptr_save_reg;
855 : u64 next_rptr_gpu_addr;
856 : volatile u32 *next_rptr_cpu_addr;
857 : unsigned wptr;
858 : unsigned wptr_old;
859 : unsigned ring_size;
860 : unsigned ring_free_dw;
861 : int count_dw;
862 : atomic_t last_rptr;
863 : atomic64_t last_activity;
864 : uint64_t gpu_addr;
865 : uint32_t align_mask;
866 : uint32_t ptr_mask;
867 : bool ready;
868 : u32 nop;
869 : u32 idx;
870 : u64 last_semaphore_signal_addr;
871 : u64 last_semaphore_wait_addr;
872 : /* for CIK queues */
873 : u32 me;
874 : u32 pipe;
875 : u32 queue;
876 : struct radeon_bo *mqd_obj;
877 : u32 doorbell_index;
878 : unsigned wptr_offs;
879 : };
880 :
881 : struct radeon_mec {
882 : struct radeon_bo *hpd_eop_obj;
883 : u64 hpd_eop_gpu_addr;
884 : u32 num_pipe;
885 : u32 num_mec;
886 : u32 num_queue;
887 : };
888 :
889 : /*
890 : * VM
891 : */
892 :
893 : /* maximum number of VMIDs */
894 : #define RADEON_NUM_VM 16
895 :
896 : /* number of entries in page table */
897 : #define RADEON_VM_PTE_COUNT (1 << radeon_vm_block_size)
898 :
899 : /* PTBs (Page Table Blocks) need to be aligned to 32K */
900 : #define RADEON_VM_PTB_ALIGN_SIZE 32768
901 : #define RADEON_VM_PTB_ALIGN_MASK (RADEON_VM_PTB_ALIGN_SIZE - 1)
902 : #define RADEON_VM_PTB_ALIGN(a) (((a) + RADEON_VM_PTB_ALIGN_MASK) & ~RADEON_VM_PTB_ALIGN_MASK)
903 :
904 : #define R600_PTE_VALID (1 << 0)
905 : #define R600_PTE_SYSTEM (1 << 1)
906 : #define R600_PTE_SNOOPED (1 << 2)
907 : #define R600_PTE_READABLE (1 << 5)
908 : #define R600_PTE_WRITEABLE (1 << 6)
909 :
910 : /* PTE (Page Table Entry) fragment field for different page sizes */
911 : #define R600_PTE_FRAG_4KB (0 << 7)
912 : #define R600_PTE_FRAG_64KB (4 << 7)
913 : #define R600_PTE_FRAG_256KB (6 << 7)
914 :
915 : /* flags needed to be set so we can copy directly from the GART table */
916 : #define R600_PTE_GART_MASK ( R600_PTE_READABLE | R600_PTE_WRITEABLE | \
917 : R600_PTE_SYSTEM | R600_PTE_VALID )
918 :
919 : struct radeon_vm_pt {
920 : struct radeon_bo *bo;
921 : uint64_t addr;
922 : };
923 :
924 : struct radeon_vm_id {
925 : unsigned id;
926 : uint64_t pd_gpu_addr;
927 : /* last flushed PD/PT update */
928 : struct radeon_fence *flushed_updates;
929 : /* last use of vmid */
930 : struct radeon_fence *last_id_use;
931 : };
932 :
933 : struct radeon_vm {
934 : struct rwlock mutex;
935 :
936 : struct rb_root va;
937 :
938 : /* protecting invalidated and freed */
939 : spinlock_t status_lock;
940 :
941 : /* BOs moved, but not yet updated in the PT */
942 : struct list_head invalidated;
943 :
944 : /* BOs freed, but not yet updated in the PT */
945 : struct list_head freed;
946 :
947 : /* BOs cleared in the PT */
948 : struct list_head cleared;
949 :
950 : /* contains the page directory */
951 : struct radeon_bo *page_directory;
952 : unsigned max_pde_used;
953 :
954 : /* array of page tables, one for each page directory entry */
955 : struct radeon_vm_pt *page_tables;
956 :
957 : struct radeon_bo_va *ib_bo_va;
958 :
959 : /* for id and flush management per ring */
960 : struct radeon_vm_id ids[RADEON_NUM_RINGS];
961 : };
962 :
963 : struct radeon_vm_manager {
964 : struct radeon_fence *active[RADEON_NUM_VM];
965 : uint32_t max_pfn;
966 : /* number of VMIDs */
967 : unsigned nvm;
968 : /* vram base address for page table entry */
969 : u64 vram_base_offset;
970 : /* is vm enabled? */
971 : bool enabled;
972 : /* for hw to save the PD addr on suspend/resume */
973 : uint32_t saved_table_addr[RADEON_NUM_VM];
974 : };
975 :
976 : /*
977 : * file private structure
978 : */
979 : struct radeon_fpriv {
980 : struct radeon_vm vm;
981 : };
982 :
983 : /*
984 : * R6xx+ IH ring
985 : */
986 : struct r600_ih {
987 : struct radeon_bo *ring_obj;
988 : volatile uint32_t *ring;
989 : unsigned rptr;
990 : unsigned ring_size;
991 : uint64_t gpu_addr;
992 : uint32_t ptr_mask;
993 : atomic_t lock;
994 : bool enabled;
995 : };
996 :
997 : /*
998 : * RLC stuff
999 : */
1000 : #include "clearstate_defs.h"
1001 :
1002 : struct radeon_rlc {
1003 : /* for power gating */
1004 : struct radeon_bo *save_restore_obj;
1005 : uint64_t save_restore_gpu_addr;
1006 : volatile uint32_t *sr_ptr;
1007 : const u32 *reg_list;
1008 : u32 reg_list_size;
1009 : /* for clear state */
1010 : struct radeon_bo *clear_state_obj;
1011 : uint64_t clear_state_gpu_addr;
1012 : volatile uint32_t *cs_ptr;
1013 : const struct cs_section_def *cs_data;
1014 : u32 clear_state_size;
1015 : /* for cp tables */
1016 : struct radeon_bo *cp_table_obj;
1017 : uint64_t cp_table_gpu_addr;
1018 : volatile uint32_t *cp_table_ptr;
1019 : u32 cp_table_size;
1020 : };
1021 :
1022 : int radeon_ib_get(struct radeon_device *rdev, int ring,
1023 : struct radeon_ib *ib, struct radeon_vm *vm,
1024 : unsigned size);
1025 : void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib *ib);
1026 : int radeon_ib_schedule(struct radeon_device *rdev, struct radeon_ib *ib,
1027 : struct radeon_ib *const_ib, bool hdp_flush);
1028 : int radeon_ib_pool_init(struct radeon_device *rdev);
1029 : void radeon_ib_pool_fini(struct radeon_device *rdev);
1030 : int radeon_ib_ring_tests(struct radeon_device *rdev);
1031 : /* Ring access between begin & end cannot sleep */
1032 : bool radeon_ring_supports_scratch_reg(struct radeon_device *rdev,
1033 : struct radeon_ring *ring);
1034 : void radeon_ring_free_size(struct radeon_device *rdev, struct radeon_ring *cp);
1035 : int radeon_ring_alloc(struct radeon_device *rdev, struct radeon_ring *cp, unsigned ndw);
1036 : int radeon_ring_lock(struct radeon_device *rdev, struct radeon_ring *cp, unsigned ndw);
1037 : void radeon_ring_commit(struct radeon_device *rdev, struct radeon_ring *cp,
1038 : bool hdp_flush);
1039 : void radeon_ring_unlock_commit(struct radeon_device *rdev, struct radeon_ring *cp,
1040 : bool hdp_flush);
1041 : void radeon_ring_undo(struct radeon_ring *ring);
1042 : void radeon_ring_unlock_undo(struct radeon_device *rdev, struct radeon_ring *cp);
1043 : int radeon_ring_test(struct radeon_device *rdev, struct radeon_ring *cp);
1044 : void radeon_ring_lockup_update(struct radeon_device *rdev,
1045 : struct radeon_ring *ring);
1046 : bool radeon_ring_test_lockup(struct radeon_device *rdev, struct radeon_ring *ring);
1047 : unsigned radeon_ring_backup(struct radeon_device *rdev, struct radeon_ring *ring,
1048 : uint32_t **data);
1049 : int radeon_ring_restore(struct radeon_device *rdev, struct radeon_ring *ring,
1050 : unsigned size, uint32_t *data);
1051 : int radeon_ring_init(struct radeon_device *rdev, struct radeon_ring *cp, unsigned ring_size,
1052 : unsigned rptr_offs, u32 nop);
1053 : void radeon_ring_fini(struct radeon_device *rdev, struct radeon_ring *cp);
1054 :
1055 :
1056 : /* r600 async dma */
1057 : void r600_dma_stop(struct radeon_device *rdev);
1058 : int r600_dma_resume(struct radeon_device *rdev);
1059 : void r600_dma_fini(struct radeon_device *rdev);
1060 :
1061 : void cayman_dma_stop(struct radeon_device *rdev);
1062 : int cayman_dma_resume(struct radeon_device *rdev);
1063 : void cayman_dma_fini(struct radeon_device *rdev);
1064 :
1065 : /*
1066 : * CS.
1067 : */
1068 : struct radeon_cs_chunk {
1069 : uint32_t length_dw;
1070 : uint32_t *kdata;
1071 : void __user *user_ptr;
1072 : };
1073 :
1074 : struct radeon_cs_parser {
1075 : struct device *dev;
1076 : struct radeon_device *rdev;
1077 : struct drm_file *filp;
1078 : /* chunks */
1079 : unsigned nchunks;
1080 : struct radeon_cs_chunk *chunks;
1081 : uint64_t *chunks_array;
1082 : /* IB */
1083 : unsigned idx;
1084 : /* relocations */
1085 : unsigned nrelocs;
1086 : struct radeon_bo_list *relocs;
1087 : struct radeon_bo_list *vm_bos;
1088 : struct list_head validated;
1089 : unsigned dma_reloc_idx;
1090 : /* indices of various chunks */
1091 : struct radeon_cs_chunk *chunk_ib;
1092 : struct radeon_cs_chunk *chunk_relocs;
1093 : struct radeon_cs_chunk *chunk_flags;
1094 : struct radeon_cs_chunk *chunk_const_ib;
1095 : struct radeon_ib ib;
1096 : struct radeon_ib const_ib;
1097 : void *track;
1098 : unsigned family;
1099 : int parser_error;
1100 : u32 cs_flags;
1101 : u32 ring;
1102 : s32 priority;
1103 : struct ww_acquire_ctx ticket;
1104 : };
1105 :
1106 0 : static inline u32 radeon_get_ib_value(struct radeon_cs_parser *p, int idx)
1107 : {
1108 0 : struct radeon_cs_chunk *ibc = p->chunk_ib;
1109 :
1110 0 : if (ibc->kdata)
1111 0 : return ibc->kdata[idx];
1112 0 : return p->ib.ptr[idx];
1113 0 : }
1114 :
1115 :
1116 : struct radeon_cs_packet {
1117 : unsigned idx;
1118 : unsigned type;
1119 : unsigned reg;
1120 : unsigned opcode;
1121 : int count;
1122 : unsigned one_reg_wr;
1123 : };
1124 :
1125 : typedef int (*radeon_packet0_check_t)(struct radeon_cs_parser *p,
1126 : struct radeon_cs_packet *pkt,
1127 : unsigned idx, unsigned reg);
1128 : typedef int (*radeon_packet3_check_t)(struct radeon_cs_parser *p,
1129 : struct radeon_cs_packet *pkt);
1130 :
1131 :
1132 : /*
1133 : * AGP
1134 : */
1135 : int radeon_agp_init(struct radeon_device *rdev);
1136 : void radeon_agp_resume(struct radeon_device *rdev);
1137 : void radeon_agp_suspend(struct radeon_device *rdev);
1138 : void radeon_agp_fini(struct radeon_device *rdev);
1139 :
1140 :
1141 : /*
1142 : * Writeback
1143 : */
1144 : struct radeon_wb {
1145 : struct radeon_bo *wb_obj;
1146 : volatile uint32_t *wb;
1147 : uint64_t gpu_addr;
1148 : bool enabled;
1149 : bool use_event;
1150 : };
1151 :
1152 : #define RADEON_WB_SCRATCH_OFFSET 0
1153 : #define RADEON_WB_RING0_NEXT_RPTR 256
1154 : #define RADEON_WB_CP_RPTR_OFFSET 1024
1155 : #define RADEON_WB_CP1_RPTR_OFFSET 1280
1156 : #define RADEON_WB_CP2_RPTR_OFFSET 1536
1157 : #define R600_WB_DMA_RPTR_OFFSET 1792
1158 : #define R600_WB_IH_WPTR_OFFSET 2048
1159 : #define CAYMAN_WB_DMA1_RPTR_OFFSET 2304
1160 : #define R600_WB_EVENT_OFFSET 3072
1161 : #define CIK_WB_CP1_WPTR_OFFSET 3328
1162 : #define CIK_WB_CP2_WPTR_OFFSET 3584
1163 : #define R600_WB_DMA_RING_TEST_OFFSET 3588
1164 : #define CAYMAN_WB_DMA1_RING_TEST_OFFSET 3592
1165 :
1166 : /**
1167 : * struct radeon_pm - power management datas
1168 : * @max_bandwidth: maximum bandwidth the gpu has (MByte/s)
1169 : * @igp_sideport_mclk: sideport memory clock Mhz (rs690,rs740,rs780,rs880)
1170 : * @igp_system_mclk: system clock Mhz (rs690,rs740,rs780,rs880)
1171 : * @igp_ht_link_clk: ht link clock Mhz (rs690,rs740,rs780,rs880)
1172 : * @igp_ht_link_width: ht link width in bits (rs690,rs740,rs780,rs880)
1173 : * @k8_bandwidth: k8 bandwidth the gpu has (MByte/s) (IGP)
1174 : * @sideport_bandwidth: sideport bandwidth the gpu has (MByte/s) (IGP)
1175 : * @ht_bandwidth: ht bandwidth the gpu has (MByte/s) (IGP)
1176 : * @core_bandwidth: core GPU bandwidth the gpu has (MByte/s) (IGP)
1177 : * @sclk: GPU clock Mhz (core bandwidth depends of this clock)
1178 : * @needed_bandwidth: current bandwidth needs
1179 : *
1180 : * It keeps track of various data needed to take powermanagement decision.
1181 : * Bandwidth need is used to determine minimun clock of the GPU and memory.
1182 : * Equation between gpu/memory clock and available bandwidth is hw dependent
1183 : * (type of memory, bus size, efficiency, ...)
1184 : */
1185 :
1186 : enum radeon_pm_method {
1187 : PM_METHOD_PROFILE,
1188 : PM_METHOD_DYNPM,
1189 : PM_METHOD_DPM,
1190 : };
1191 :
1192 : enum radeon_dynpm_state {
1193 : DYNPM_STATE_DISABLED,
1194 : DYNPM_STATE_MINIMUM,
1195 : DYNPM_STATE_PAUSED,
1196 : DYNPM_STATE_ACTIVE,
1197 : DYNPM_STATE_SUSPENDED,
1198 : };
1199 : enum radeon_dynpm_action {
1200 : DYNPM_ACTION_NONE,
1201 : DYNPM_ACTION_MINIMUM,
1202 : DYNPM_ACTION_DOWNCLOCK,
1203 : DYNPM_ACTION_UPCLOCK,
1204 : DYNPM_ACTION_DEFAULT
1205 : };
1206 :
1207 : enum radeon_voltage_type {
1208 : VOLTAGE_NONE = 0,
1209 : VOLTAGE_GPIO,
1210 : VOLTAGE_VDDC,
1211 : VOLTAGE_SW
1212 : };
1213 :
1214 : enum radeon_pm_state_type {
1215 : /* not used for dpm */
1216 : POWER_STATE_TYPE_DEFAULT,
1217 : POWER_STATE_TYPE_POWERSAVE,
1218 : /* user selectable states */
1219 : POWER_STATE_TYPE_BATTERY,
1220 : POWER_STATE_TYPE_BALANCED,
1221 : POWER_STATE_TYPE_PERFORMANCE,
1222 : /* internal states */
1223 : POWER_STATE_TYPE_INTERNAL_UVD,
1224 : POWER_STATE_TYPE_INTERNAL_UVD_SD,
1225 : POWER_STATE_TYPE_INTERNAL_UVD_HD,
1226 : POWER_STATE_TYPE_INTERNAL_UVD_HD2,
1227 : POWER_STATE_TYPE_INTERNAL_UVD_MVC,
1228 : POWER_STATE_TYPE_INTERNAL_BOOT,
1229 : POWER_STATE_TYPE_INTERNAL_THERMAL,
1230 : POWER_STATE_TYPE_INTERNAL_ACPI,
1231 : POWER_STATE_TYPE_INTERNAL_ULV,
1232 : POWER_STATE_TYPE_INTERNAL_3DPERF,
1233 : };
1234 :
1235 : enum radeon_pm_profile_type {
1236 : PM_PROFILE_DEFAULT,
1237 : PM_PROFILE_AUTO,
1238 : PM_PROFILE_LOW,
1239 : PM_PROFILE_MID,
1240 : PM_PROFILE_HIGH,
1241 : };
1242 :
1243 : #define PM_PROFILE_DEFAULT_IDX 0
1244 : #define PM_PROFILE_LOW_SH_IDX 1
1245 : #define PM_PROFILE_MID_SH_IDX 2
1246 : #define PM_PROFILE_HIGH_SH_IDX 3
1247 : #define PM_PROFILE_LOW_MH_IDX 4
1248 : #define PM_PROFILE_MID_MH_IDX 5
1249 : #define PM_PROFILE_HIGH_MH_IDX 6
1250 : #define PM_PROFILE_MAX 7
1251 :
1252 : struct radeon_pm_profile {
1253 : int dpms_off_ps_idx;
1254 : int dpms_on_ps_idx;
1255 : int dpms_off_cm_idx;
1256 : int dpms_on_cm_idx;
1257 : };
1258 :
1259 : enum radeon_int_thermal_type {
1260 : THERMAL_TYPE_NONE,
1261 : THERMAL_TYPE_EXTERNAL,
1262 : THERMAL_TYPE_EXTERNAL_GPIO,
1263 : THERMAL_TYPE_RV6XX,
1264 : THERMAL_TYPE_RV770,
1265 : THERMAL_TYPE_ADT7473_WITH_INTERNAL,
1266 : THERMAL_TYPE_EVERGREEN,
1267 : THERMAL_TYPE_SUMO,
1268 : THERMAL_TYPE_NI,
1269 : THERMAL_TYPE_SI,
1270 : THERMAL_TYPE_EMC2103_WITH_INTERNAL,
1271 : THERMAL_TYPE_CI,
1272 : THERMAL_TYPE_KV,
1273 : };
1274 :
1275 : struct radeon_voltage {
1276 : enum radeon_voltage_type type;
1277 : /* gpio voltage */
1278 : struct radeon_gpio_rec gpio;
1279 : u32 delay; /* delay in usec from voltage drop to sclk change */
1280 : bool active_high; /* voltage drop is active when bit is high */
1281 : /* VDDC voltage */
1282 : u8 vddc_id; /* index into vddc voltage table */
1283 : u8 vddci_id; /* index into vddci voltage table */
1284 : bool vddci_enabled;
1285 : /* r6xx+ sw */
1286 : u16 voltage;
1287 : /* evergreen+ vddci */
1288 : u16 vddci;
1289 : };
1290 :
1291 : /* clock mode flags */
1292 : #define RADEON_PM_MODE_NO_DISPLAY (1 << 0)
1293 :
1294 : struct radeon_pm_clock_info {
1295 : /* memory clock */
1296 : u32 mclk;
1297 : /* engine clock */
1298 : u32 sclk;
1299 : /* voltage info */
1300 : struct radeon_voltage voltage;
1301 : /* standardized clock flags */
1302 : u32 flags;
1303 : };
1304 :
1305 : /* state flags */
1306 : #define RADEON_PM_STATE_SINGLE_DISPLAY_ONLY (1 << 0)
1307 :
1308 : struct radeon_power_state {
1309 : enum radeon_pm_state_type type;
1310 : struct radeon_pm_clock_info *clock_info;
1311 : /* number of valid clock modes in this power state */
1312 : int num_clock_modes;
1313 : struct radeon_pm_clock_info *default_clock_mode;
1314 : /* standardized state flags */
1315 : u32 flags;
1316 : u32 misc; /* vbios specific flags */
1317 : u32 misc2; /* vbios specific flags */
1318 : int pcie_lanes; /* pcie lanes */
1319 : };
1320 :
1321 : /*
1322 : * Some modes are overclocked by very low value, accept them
1323 : */
1324 : #define RADEON_MODE_OVERCLOCK_MARGIN 500 /* 5 MHz */
1325 :
1326 : enum radeon_dpm_auto_throttle_src {
1327 : RADEON_DPM_AUTO_THROTTLE_SRC_THERMAL,
1328 : RADEON_DPM_AUTO_THROTTLE_SRC_EXTERNAL
1329 : };
1330 :
1331 : enum radeon_dpm_event_src {
1332 : RADEON_DPM_EVENT_SRC_ANALOG = 0,
1333 : RADEON_DPM_EVENT_SRC_EXTERNAL = 1,
1334 : RADEON_DPM_EVENT_SRC_DIGITAL = 2,
1335 : RADEON_DPM_EVENT_SRC_ANALOG_OR_EXTERNAL = 3,
1336 : RADEON_DPM_EVENT_SRC_DIGIAL_OR_EXTERNAL = 4
1337 : };
1338 :
1339 : #define RADEON_MAX_VCE_LEVELS 6
1340 :
1341 : enum radeon_vce_level {
1342 : RADEON_VCE_LEVEL_AC_ALL = 0, /* AC, All cases */
1343 : RADEON_VCE_LEVEL_DC_EE = 1, /* DC, entropy encoding */
1344 : RADEON_VCE_LEVEL_DC_LL_LOW = 2, /* DC, low latency queue, res <= 720 */
1345 : RADEON_VCE_LEVEL_DC_LL_HIGH = 3, /* DC, low latency queue, 1080 >= res > 720 */
1346 : RADEON_VCE_LEVEL_DC_GP_LOW = 4, /* DC, general purpose queue, res <= 720 */
1347 : RADEON_VCE_LEVEL_DC_GP_HIGH = 5, /* DC, general purpose queue, 1080 >= res > 720 */
1348 : };
1349 :
1350 : struct radeon_ps {
1351 : u32 caps; /* vbios flags */
1352 : u32 class; /* vbios flags */
1353 : u32 class2; /* vbios flags */
1354 : /* UVD clocks */
1355 : u32 vclk;
1356 : u32 dclk;
1357 : /* VCE clocks */
1358 : u32 evclk;
1359 : u32 ecclk;
1360 : bool vce_active;
1361 : enum radeon_vce_level vce_level;
1362 : /* asic priv */
1363 : void *ps_priv;
1364 : };
1365 :
1366 : struct radeon_dpm_thermal {
1367 : /* thermal interrupt work */
1368 : struct work_struct work;
1369 : /* low temperature threshold */
1370 : int min_temp;
1371 : /* high temperature threshold */
1372 : int max_temp;
1373 : /* was interrupt low to high or high to low */
1374 : bool high_to_low;
1375 : };
1376 :
1377 : enum radeon_clk_action
1378 : {
1379 : RADEON_SCLK_UP = 1,
1380 : RADEON_SCLK_DOWN
1381 : };
1382 :
1383 : struct radeon_blacklist_clocks
1384 : {
1385 : u32 sclk;
1386 : u32 mclk;
1387 : enum radeon_clk_action action;
1388 : };
1389 :
1390 : struct radeon_clock_and_voltage_limits {
1391 : u32 sclk;
1392 : u32 mclk;
1393 : u16 vddc;
1394 : u16 vddci;
1395 : };
1396 :
1397 : struct radeon_clock_array {
1398 : u32 count;
1399 : u32 *values;
1400 : };
1401 :
1402 : struct radeon_clock_voltage_dependency_entry {
1403 : u32 clk;
1404 : u16 v;
1405 : };
1406 :
1407 : struct radeon_clock_voltage_dependency_table {
1408 : u32 count;
1409 : struct radeon_clock_voltage_dependency_entry *entries;
1410 : };
1411 :
1412 : union radeon_cac_leakage_entry {
1413 : struct {
1414 : u16 vddc;
1415 : u32 leakage;
1416 : };
1417 : struct {
1418 : u16 vddc1;
1419 : u16 vddc2;
1420 : u16 vddc3;
1421 : };
1422 : };
1423 :
1424 : struct radeon_cac_leakage_table {
1425 : u32 count;
1426 : union radeon_cac_leakage_entry *entries;
1427 : };
1428 :
1429 : struct radeon_phase_shedding_limits_entry {
1430 : u16 voltage;
1431 : u32 sclk;
1432 : u32 mclk;
1433 : };
1434 :
1435 : struct radeon_phase_shedding_limits_table {
1436 : u32 count;
1437 : struct radeon_phase_shedding_limits_entry *entries;
1438 : };
1439 :
1440 : struct radeon_uvd_clock_voltage_dependency_entry {
1441 : u32 vclk;
1442 : u32 dclk;
1443 : u16 v;
1444 : };
1445 :
1446 : struct radeon_uvd_clock_voltage_dependency_table {
1447 : u8 count;
1448 : struct radeon_uvd_clock_voltage_dependency_entry *entries;
1449 : };
1450 :
1451 : struct radeon_vce_clock_voltage_dependency_entry {
1452 : u32 ecclk;
1453 : u32 evclk;
1454 : u16 v;
1455 : };
1456 :
1457 : struct radeon_vce_clock_voltage_dependency_table {
1458 : u8 count;
1459 : struct radeon_vce_clock_voltage_dependency_entry *entries;
1460 : };
1461 :
1462 : struct radeon_ppm_table {
1463 : u8 ppm_design;
1464 : u16 cpu_core_number;
1465 : u32 platform_tdp;
1466 : u32 small_ac_platform_tdp;
1467 : u32 platform_tdc;
1468 : u32 small_ac_platform_tdc;
1469 : u32 apu_tdp;
1470 : u32 dgpu_tdp;
1471 : u32 dgpu_ulv_power;
1472 : u32 tj_max;
1473 : };
1474 :
1475 : struct radeon_cac_tdp_table {
1476 : u16 tdp;
1477 : u16 configurable_tdp;
1478 : u16 tdc;
1479 : u16 battery_power_limit;
1480 : u16 small_power_limit;
1481 : u16 low_cac_leakage;
1482 : u16 high_cac_leakage;
1483 : u16 maximum_power_delivery_limit;
1484 : };
1485 :
1486 : struct radeon_dpm_dynamic_state {
1487 : struct radeon_clock_voltage_dependency_table vddc_dependency_on_sclk;
1488 : struct radeon_clock_voltage_dependency_table vddci_dependency_on_mclk;
1489 : struct radeon_clock_voltage_dependency_table vddc_dependency_on_mclk;
1490 : struct radeon_clock_voltage_dependency_table mvdd_dependency_on_mclk;
1491 : struct radeon_clock_voltage_dependency_table vddc_dependency_on_dispclk;
1492 : struct radeon_uvd_clock_voltage_dependency_table uvd_clock_voltage_dependency_table;
1493 : struct radeon_vce_clock_voltage_dependency_table vce_clock_voltage_dependency_table;
1494 : struct radeon_clock_voltage_dependency_table samu_clock_voltage_dependency_table;
1495 : struct radeon_clock_voltage_dependency_table acp_clock_voltage_dependency_table;
1496 : struct radeon_clock_array valid_sclk_values;
1497 : struct radeon_clock_array valid_mclk_values;
1498 : struct radeon_clock_and_voltage_limits max_clock_voltage_on_dc;
1499 : struct radeon_clock_and_voltage_limits max_clock_voltage_on_ac;
1500 : u32 mclk_sclk_ratio;
1501 : u32 sclk_mclk_delta;
1502 : u16 vddc_vddci_delta;
1503 : u16 min_vddc_for_pcie_gen2;
1504 : struct radeon_cac_leakage_table cac_leakage_table;
1505 : struct radeon_phase_shedding_limits_table phase_shedding_limits_table;
1506 : struct radeon_ppm_table *ppm_table;
1507 : struct radeon_cac_tdp_table *cac_tdp_table;
1508 : };
1509 :
1510 : struct radeon_dpm_fan {
1511 : u16 t_min;
1512 : u16 t_med;
1513 : u16 t_high;
1514 : u16 pwm_min;
1515 : u16 pwm_med;
1516 : u16 pwm_high;
1517 : u8 t_hyst;
1518 : u32 cycle_delay;
1519 : u16 t_max;
1520 : u8 control_mode;
1521 : u16 default_max_fan_pwm;
1522 : u16 default_fan_output_sensitivity;
1523 : u16 fan_output_sensitivity;
1524 : bool ucode_fan_control;
1525 : };
1526 :
1527 : enum radeon_pcie_gen {
1528 : RADEON_PCIE_GEN1 = 0,
1529 : RADEON_PCIE_GEN2 = 1,
1530 : RADEON_PCIE_GEN3 = 2,
1531 : RADEON_PCIE_GEN_INVALID = 0xffff
1532 : };
1533 :
1534 : enum radeon_dpm_forced_level {
1535 : RADEON_DPM_FORCED_LEVEL_AUTO = 0,
1536 : RADEON_DPM_FORCED_LEVEL_LOW = 1,
1537 : RADEON_DPM_FORCED_LEVEL_HIGH = 2,
1538 : };
1539 :
1540 : struct radeon_vce_state {
1541 : /* vce clocks */
1542 : u32 evclk;
1543 : u32 ecclk;
1544 : /* gpu clocks */
1545 : u32 sclk;
1546 : u32 mclk;
1547 : u8 clk_idx;
1548 : u8 pstate;
1549 : };
1550 :
1551 : struct radeon_dpm {
1552 : struct radeon_ps *ps;
1553 : /* number of valid power states */
1554 : int num_ps;
1555 : /* current power state that is active */
1556 : struct radeon_ps *current_ps;
1557 : /* requested power state */
1558 : struct radeon_ps *requested_ps;
1559 : /* boot up power state */
1560 : struct radeon_ps *boot_ps;
1561 : /* default uvd power state */
1562 : struct radeon_ps *uvd_ps;
1563 : /* vce requirements */
1564 : struct radeon_vce_state vce_states[RADEON_MAX_VCE_LEVELS];
1565 : enum radeon_vce_level vce_level;
1566 : enum radeon_pm_state_type state;
1567 : enum radeon_pm_state_type user_state;
1568 : u32 platform_caps;
1569 : u32 voltage_response_time;
1570 : u32 backbias_response_time;
1571 : void *priv;
1572 : u32 new_active_crtcs;
1573 : int new_active_crtc_count;
1574 : u32 current_active_crtcs;
1575 : int current_active_crtc_count;
1576 : bool single_display;
1577 : struct radeon_dpm_dynamic_state dyn_state;
1578 : struct radeon_dpm_fan fan;
1579 : u32 tdp_limit;
1580 : u32 near_tdp_limit;
1581 : u32 near_tdp_limit_adjusted;
1582 : u32 sq_ramping_threshold;
1583 : u32 cac_leakage;
1584 : u16 tdp_od_limit;
1585 : u32 tdp_adjustment;
1586 : u16 load_line_slope;
1587 : bool power_control;
1588 : bool ac_power;
1589 : /* special states active */
1590 : bool thermal_active;
1591 : bool uvd_active;
1592 : bool vce_active;
1593 : /* thermal handling */
1594 : struct radeon_dpm_thermal thermal;
1595 : /* forced levels */
1596 : enum radeon_dpm_forced_level forced_level;
1597 : /* track UVD streams */
1598 : unsigned sd;
1599 : unsigned hd;
1600 : };
1601 :
1602 : void radeon_dpm_enable_uvd(struct radeon_device *rdev, bool enable);
1603 : void radeon_dpm_enable_vce(struct radeon_device *rdev, bool enable);
1604 :
1605 : struct radeon_pm {
1606 : struct rwlock mutex;
1607 : /* write locked while reprogramming mclk */
1608 : struct rwlock mclk_lock;
1609 : u32 active_crtcs;
1610 : int active_crtc_count;
1611 : int req_vblank;
1612 : bool vblank_sync;
1613 : fixed20_12 max_bandwidth;
1614 : fixed20_12 igp_sideport_mclk;
1615 : fixed20_12 igp_system_mclk;
1616 : fixed20_12 igp_ht_link_clk;
1617 : fixed20_12 igp_ht_link_width;
1618 : fixed20_12 k8_bandwidth;
1619 : fixed20_12 sideport_bandwidth;
1620 : fixed20_12 ht_bandwidth;
1621 : fixed20_12 core_bandwidth;
1622 : fixed20_12 sclk;
1623 : fixed20_12 mclk;
1624 : fixed20_12 needed_bandwidth;
1625 : struct radeon_power_state *power_state;
1626 : /* number of valid power states */
1627 : int num_power_states;
1628 : int current_power_state_index;
1629 : int current_clock_mode_index;
1630 : int requested_power_state_index;
1631 : int requested_clock_mode_index;
1632 : int default_power_state_index;
1633 : u32 current_sclk;
1634 : u32 current_mclk;
1635 : u16 current_vddc;
1636 : u16 current_vddci;
1637 : u32 default_sclk;
1638 : u32 default_mclk;
1639 : u16 default_vddc;
1640 : u16 default_vddci;
1641 : struct radeon_i2c_chan *i2c_bus;
1642 : /* selected pm method */
1643 : enum radeon_pm_method pm_method;
1644 : /* dynpm power management */
1645 : struct delayed_work dynpm_idle_work;
1646 : enum radeon_dynpm_state dynpm_state;
1647 : enum radeon_dynpm_action dynpm_planned_action;
1648 : unsigned long dynpm_action_timeout;
1649 : bool dynpm_can_upclock;
1650 : bool dynpm_can_downclock;
1651 : /* profile-based power management */
1652 : enum radeon_pm_profile_type profile;
1653 : int profile_index;
1654 : struct radeon_pm_profile profiles[PM_PROFILE_MAX];
1655 : /* internal thermal controller on rv6xx+ */
1656 : enum radeon_int_thermal_type int_thermal_type;
1657 : struct device *int_hwmon_dev;
1658 : /* fan control parameters */
1659 : bool no_fan;
1660 : u8 fan_pulses_per_revolution;
1661 : u8 fan_min_rpm;
1662 : u8 fan_max_rpm;
1663 : /* dpm */
1664 : bool dpm_enabled;
1665 : bool sysfs_initialized;
1666 : struct radeon_dpm dpm;
1667 : };
1668 :
1669 : int radeon_pm_get_type_index(struct radeon_device *rdev,
1670 : enum radeon_pm_state_type ps_type,
1671 : int instance);
1672 : /*
1673 : * UVD
1674 : */
1675 : #define RADEON_MAX_UVD_HANDLES 10
1676 : #define RADEON_UVD_STACK_SIZE (1024*1024)
1677 : #define RADEON_UVD_HEAP_SIZE (1024*1024)
1678 :
1679 : struct radeon_uvd {
1680 : struct radeon_bo *vcpu_bo;
1681 : void *cpu_addr;
1682 : uint64_t gpu_addr;
1683 : atomic_t handles[RADEON_MAX_UVD_HANDLES];
1684 : struct drm_file *filp[RADEON_MAX_UVD_HANDLES];
1685 : unsigned img_size[RADEON_MAX_UVD_HANDLES];
1686 : struct delayed_work idle_work;
1687 : };
1688 :
1689 : int radeon_uvd_init(struct radeon_device *rdev);
1690 : void radeon_uvd_fini(struct radeon_device *rdev);
1691 : int radeon_uvd_suspend(struct radeon_device *rdev);
1692 : int radeon_uvd_resume(struct radeon_device *rdev);
1693 : int radeon_uvd_get_create_msg(struct radeon_device *rdev, int ring,
1694 : uint32_t handle, struct radeon_fence **fence);
1695 : int radeon_uvd_get_destroy_msg(struct radeon_device *rdev, int ring,
1696 : uint32_t handle, struct radeon_fence **fence);
1697 : void radeon_uvd_force_into_uvd_segment(struct radeon_bo *rbo,
1698 : uint32_t allowed_domains);
1699 : void radeon_uvd_free_handles(struct radeon_device *rdev,
1700 : struct drm_file *filp);
1701 : int radeon_uvd_cs_parse(struct radeon_cs_parser *parser);
1702 : void radeon_uvd_note_usage(struct radeon_device *rdev);
1703 : int radeon_uvd_calc_upll_dividers(struct radeon_device *rdev,
1704 : unsigned vclk, unsigned dclk,
1705 : unsigned vco_min, unsigned vco_max,
1706 : unsigned fb_factor, unsigned fb_mask,
1707 : unsigned pd_min, unsigned pd_max,
1708 : unsigned pd_even,
1709 : unsigned *optimal_fb_div,
1710 : unsigned *optimal_vclk_div,
1711 : unsigned *optimal_dclk_div);
1712 : int radeon_uvd_send_upll_ctlreq(struct radeon_device *rdev,
1713 : unsigned cg_upll_func_cntl);
1714 :
1715 : /*
1716 : * VCE
1717 : */
1718 : #define RADEON_MAX_VCE_HANDLES 16
1719 :
1720 : struct radeon_vce {
1721 : struct radeon_bo *vcpu_bo;
1722 : uint64_t gpu_addr;
1723 : unsigned fw_version;
1724 : unsigned fb_version;
1725 : atomic_t handles[RADEON_MAX_VCE_HANDLES];
1726 : struct drm_file *filp[RADEON_MAX_VCE_HANDLES];
1727 : unsigned img_size[RADEON_MAX_VCE_HANDLES];
1728 : struct delayed_work idle_work;
1729 : uint32_t keyselect;
1730 : };
1731 :
1732 : int radeon_vce_init(struct radeon_device *rdev);
1733 : void radeon_vce_fini(struct radeon_device *rdev);
1734 : int radeon_vce_suspend(struct radeon_device *rdev);
1735 : int radeon_vce_resume(struct radeon_device *rdev);
1736 : int radeon_vce_get_create_msg(struct radeon_device *rdev, int ring,
1737 : uint32_t handle, struct radeon_fence **fence);
1738 : int radeon_vce_get_destroy_msg(struct radeon_device *rdev, int ring,
1739 : uint32_t handle, struct radeon_fence **fence);
1740 : void radeon_vce_free_handles(struct radeon_device *rdev, struct drm_file *filp);
1741 : void radeon_vce_note_usage(struct radeon_device *rdev);
1742 : int radeon_vce_cs_reloc(struct radeon_cs_parser *p, int lo, int hi, unsigned size);
1743 : int radeon_vce_cs_parse(struct radeon_cs_parser *p);
1744 : bool radeon_vce_semaphore_emit(struct radeon_device *rdev,
1745 : struct radeon_ring *ring,
1746 : struct radeon_semaphore *semaphore,
1747 : bool emit_wait);
1748 : void radeon_vce_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
1749 : void radeon_vce_fence_emit(struct radeon_device *rdev,
1750 : struct radeon_fence *fence);
1751 : int radeon_vce_ring_test(struct radeon_device *rdev, struct radeon_ring *ring);
1752 : int radeon_vce_ib_test(struct radeon_device *rdev, struct radeon_ring *ring);
1753 :
1754 : struct r600_audio_pin {
1755 : int channels;
1756 : int rate;
1757 : int bits_per_sample;
1758 : u8 status_bits;
1759 : u8 category_code;
1760 : u32 offset;
1761 : bool connected;
1762 : u32 id;
1763 : };
1764 :
1765 : struct r600_audio {
1766 : bool enabled;
1767 : struct r600_audio_pin pin[RADEON_MAX_AFMT_BLOCKS];
1768 : int num_pins;
1769 : struct radeon_audio_funcs *hdmi_funcs;
1770 : struct radeon_audio_funcs *dp_funcs;
1771 : struct radeon_audio_basic_funcs *funcs;
1772 : };
1773 :
1774 : /*
1775 : * Benchmarking
1776 : */
1777 : void radeon_benchmark(struct radeon_device *rdev, int test_number);
1778 :
1779 :
1780 : /*
1781 : * Testing
1782 : */
1783 : void radeon_test_moves(struct radeon_device *rdev);
1784 : void radeon_test_ring_sync(struct radeon_device *rdev,
1785 : struct radeon_ring *cpA,
1786 : struct radeon_ring *cpB);
1787 : void radeon_test_syncing(struct radeon_device *rdev);
1788 :
1789 : /*
1790 : * MMU Notifier
1791 : */
1792 : #if defined(CONFIG_MMU_NOTIFIER)
1793 : int radeon_mn_register(struct radeon_bo *bo, unsigned long addr);
1794 : void radeon_mn_unregister(struct radeon_bo *bo);
1795 : #else
1796 : static inline int radeon_mn_register(struct radeon_bo *bo, unsigned long addr)
1797 : {
1798 : return -ENODEV;
1799 : }
1800 0 : static inline void radeon_mn_unregister(struct radeon_bo *bo) {}
1801 : #endif
1802 :
1803 : /*
1804 : * Debugfs
1805 : */
1806 : struct radeon_debugfs {
1807 : struct drm_info_list *files;
1808 : unsigned num_files;
1809 : };
1810 :
1811 : int radeon_debugfs_add_files(struct radeon_device *rdev,
1812 : struct drm_info_list *files,
1813 : unsigned nfiles);
1814 : int radeon_debugfs_fence_init(struct radeon_device *rdev);
1815 :
1816 : /*
1817 : * ASIC ring specific functions.
1818 : */
1819 : struct radeon_asic_ring {
1820 : /* ring read/write ptr handling */
1821 : u32 (*get_rptr)(struct radeon_device *rdev, struct radeon_ring *ring);
1822 : u32 (*get_wptr)(struct radeon_device *rdev, struct radeon_ring *ring);
1823 : void (*set_wptr)(struct radeon_device *rdev, struct radeon_ring *ring);
1824 :
1825 : /* validating and patching of IBs */
1826 : int (*ib_parse)(struct radeon_device *rdev, struct radeon_ib *ib);
1827 : int (*cs_parse)(struct radeon_cs_parser *p);
1828 :
1829 : /* command emmit functions */
1830 : void (*ib_execute)(struct radeon_device *rdev, struct radeon_ib *ib);
1831 : void (*emit_fence)(struct radeon_device *rdev, struct radeon_fence *fence);
1832 : void (*hdp_flush)(struct radeon_device *rdev, struct radeon_ring *ring);
1833 : bool (*emit_semaphore)(struct radeon_device *rdev, struct radeon_ring *cp,
1834 : struct radeon_semaphore *semaphore, bool emit_wait);
1835 : void (*vm_flush)(struct radeon_device *rdev, struct radeon_ring *ring,
1836 : unsigned vm_id, uint64_t pd_addr);
1837 :
1838 : /* testing functions */
1839 : int (*ring_test)(struct radeon_device *rdev, struct radeon_ring *cp);
1840 : int (*ib_test)(struct radeon_device *rdev, struct radeon_ring *cp);
1841 : bool (*is_lockup)(struct radeon_device *rdev, struct radeon_ring *cp);
1842 :
1843 : /* deprecated */
1844 : void (*ring_start)(struct radeon_device *rdev, struct radeon_ring *cp);
1845 : };
1846 :
1847 : /*
1848 : * ASIC specific functions.
1849 : */
1850 : struct radeon_asic {
1851 : int (*init)(struct radeon_device *rdev);
1852 : void (*fini)(struct radeon_device *rdev);
1853 : int (*resume)(struct radeon_device *rdev);
1854 : int (*suspend)(struct radeon_device *rdev);
1855 : void (*vga_set_state)(struct radeon_device *rdev, bool state);
1856 : int (*asic_reset)(struct radeon_device *rdev);
1857 : /* Flush the HDP cache via MMIO */
1858 : void (*mmio_hdp_flush)(struct radeon_device *rdev);
1859 : /* check if 3D engine is idle */
1860 : bool (*gui_idle)(struct radeon_device *rdev);
1861 : /* wait for mc_idle */
1862 : int (*mc_wait_for_idle)(struct radeon_device *rdev);
1863 : /* get the reference clock */
1864 : u32 (*get_xclk)(struct radeon_device *rdev);
1865 : /* get the gpu clock counter */
1866 : uint64_t (*get_gpu_clock_counter)(struct radeon_device *rdev);
1867 : /* get register for info ioctl */
1868 : int (*get_allowed_info_register)(struct radeon_device *rdev, u32 reg, u32 *val);
1869 : /* gart */
1870 : struct {
1871 : void (*tlb_flush)(struct radeon_device *rdev);
1872 : uint64_t (*get_page_entry)(uint64_t addr, uint32_t flags);
1873 : void (*set_page)(struct radeon_device *rdev, unsigned i,
1874 : uint64_t entry);
1875 : } gart;
1876 : struct {
1877 : int (*init)(struct radeon_device *rdev);
1878 : void (*fini)(struct radeon_device *rdev);
1879 : void (*copy_pages)(struct radeon_device *rdev,
1880 : struct radeon_ib *ib,
1881 : uint64_t pe, uint64_t src,
1882 : unsigned count);
1883 : void (*write_pages)(struct radeon_device *rdev,
1884 : struct radeon_ib *ib,
1885 : uint64_t pe,
1886 : uint64_t addr, unsigned count,
1887 : uint32_t incr, uint32_t flags);
1888 : void (*set_pages)(struct radeon_device *rdev,
1889 : struct radeon_ib *ib,
1890 : uint64_t pe,
1891 : uint64_t addr, unsigned count,
1892 : uint32_t incr, uint32_t flags);
1893 : void (*pad_ib)(struct radeon_ib *ib);
1894 : } vm;
1895 : /* ring specific callbacks */
1896 : struct radeon_asic_ring *ring[RADEON_NUM_RINGS];
1897 : /* irqs */
1898 : struct {
1899 : int (*set)(struct radeon_device *rdev);
1900 : int (*process)(struct radeon_device *rdev);
1901 : } irq;
1902 : /* displays */
1903 : struct {
1904 : /* display watermarks */
1905 : void (*bandwidth_update)(struct radeon_device *rdev);
1906 : /* get frame count */
1907 : u32 (*get_vblank_counter)(struct radeon_device *rdev, int crtc);
1908 : /* wait for vblank */
1909 : void (*wait_for_vblank)(struct radeon_device *rdev, int crtc);
1910 : /* set backlight level */
1911 : void (*set_backlight_level)(struct radeon_encoder *radeon_encoder, u8 level);
1912 : /* get backlight level */
1913 : u8 (*get_backlight_level)(struct radeon_encoder *radeon_encoder);
1914 : /* audio callbacks */
1915 : void (*hdmi_enable)(struct drm_encoder *encoder, bool enable);
1916 : void (*hdmi_setmode)(struct drm_encoder *encoder, struct drm_display_mode *mode);
1917 : } display;
1918 : /* copy functions for bo handling */
1919 : struct {
1920 : struct radeon_fence *(*blit)(struct radeon_device *rdev,
1921 : uint64_t src_offset,
1922 : uint64_t dst_offset,
1923 : unsigned num_gpu_pages,
1924 : struct reservation_object *resv);
1925 : u32 blit_ring_index;
1926 : struct radeon_fence *(*dma)(struct radeon_device *rdev,
1927 : uint64_t src_offset,
1928 : uint64_t dst_offset,
1929 : unsigned num_gpu_pages,
1930 : struct reservation_object *resv);
1931 : u32 dma_ring_index;
1932 : /* method used for bo copy */
1933 : struct radeon_fence *(*copy)(struct radeon_device *rdev,
1934 : uint64_t src_offset,
1935 : uint64_t dst_offset,
1936 : unsigned num_gpu_pages,
1937 : struct reservation_object *resv);
1938 : /* ring used for bo copies */
1939 : u32 copy_ring_index;
1940 : } copy;
1941 : /* surfaces */
1942 : struct {
1943 : int (*set_reg)(struct radeon_device *rdev, int reg,
1944 : uint32_t tiling_flags, uint32_t pitch,
1945 : uint32_t offset, uint32_t obj_size);
1946 : void (*clear_reg)(struct radeon_device *rdev, int reg);
1947 : } surface;
1948 : /* hotplug detect */
1949 : struct {
1950 : void (*init)(struct radeon_device *rdev);
1951 : void (*fini)(struct radeon_device *rdev);
1952 : bool (*sense)(struct radeon_device *rdev, enum radeon_hpd_id hpd);
1953 : void (*set_polarity)(struct radeon_device *rdev, enum radeon_hpd_id hpd);
1954 : } hpd;
1955 : /* static power management */
1956 : struct {
1957 : void (*misc)(struct radeon_device *rdev);
1958 : void (*prepare)(struct radeon_device *rdev);
1959 : void (*finish)(struct radeon_device *rdev);
1960 : void (*init_profile)(struct radeon_device *rdev);
1961 : void (*get_dynpm_state)(struct radeon_device *rdev);
1962 : uint32_t (*get_engine_clock)(struct radeon_device *rdev);
1963 : void (*set_engine_clock)(struct radeon_device *rdev, uint32_t eng_clock);
1964 : uint32_t (*get_memory_clock)(struct radeon_device *rdev);
1965 : void (*set_memory_clock)(struct radeon_device *rdev, uint32_t mem_clock);
1966 : int (*get_pcie_lanes)(struct radeon_device *rdev);
1967 : void (*set_pcie_lanes)(struct radeon_device *rdev, int lanes);
1968 : void (*set_clock_gating)(struct radeon_device *rdev, int enable);
1969 : int (*set_uvd_clocks)(struct radeon_device *rdev, u32 vclk, u32 dclk);
1970 : int (*set_vce_clocks)(struct radeon_device *rdev, u32 evclk, u32 ecclk);
1971 : int (*get_temperature)(struct radeon_device *rdev);
1972 : } pm;
1973 : /* dynamic power management */
1974 : struct {
1975 : int (*init)(struct radeon_device *rdev);
1976 : void (*setup_asic)(struct radeon_device *rdev);
1977 : int (*enable)(struct radeon_device *rdev);
1978 : int (*late_enable)(struct radeon_device *rdev);
1979 : void (*disable)(struct radeon_device *rdev);
1980 : int (*pre_set_power_state)(struct radeon_device *rdev);
1981 : int (*set_power_state)(struct radeon_device *rdev);
1982 : void (*post_set_power_state)(struct radeon_device *rdev);
1983 : void (*display_configuration_changed)(struct radeon_device *rdev);
1984 : void (*fini)(struct radeon_device *rdev);
1985 : u32 (*get_sclk)(struct radeon_device *rdev, bool low);
1986 : u32 (*get_mclk)(struct radeon_device *rdev, bool low);
1987 : void (*print_power_state)(struct radeon_device *rdev, struct radeon_ps *ps);
1988 : void (*debugfs_print_current_performance_level)(struct radeon_device *rdev, struct seq_file *m);
1989 : int (*force_performance_level)(struct radeon_device *rdev, enum radeon_dpm_forced_level level);
1990 : bool (*vblank_too_short)(struct radeon_device *rdev);
1991 : void (*powergate_uvd)(struct radeon_device *rdev, bool gate);
1992 : void (*enable_bapm)(struct radeon_device *rdev, bool enable);
1993 : void (*fan_ctrl_set_mode)(struct radeon_device *rdev, u32 mode);
1994 : u32 (*fan_ctrl_get_mode)(struct radeon_device *rdev);
1995 : int (*set_fan_speed_percent)(struct radeon_device *rdev, u32 speed);
1996 : int (*get_fan_speed_percent)(struct radeon_device *rdev, u32 *speed);
1997 : u32 (*get_current_sclk)(struct radeon_device *rdev);
1998 : u32 (*get_current_mclk)(struct radeon_device *rdev);
1999 : } dpm;
2000 : /* pageflipping */
2001 : struct {
2002 : void (*page_flip)(struct radeon_device *rdev, int crtc, u64 crtc_base);
2003 : bool (*page_flip_pending)(struct radeon_device *rdev, int crtc);
2004 : } pflip;
2005 : };
2006 :
2007 : /*
2008 : * Asic structures
2009 : */
2010 : struct r100_asic {
2011 : const unsigned *reg_safe_bm;
2012 : unsigned reg_safe_bm_size;
2013 : u32 hdp_cntl;
2014 : };
2015 :
2016 : struct r300_asic {
2017 : const unsigned *reg_safe_bm;
2018 : unsigned reg_safe_bm_size;
2019 : u32 resync_scratch;
2020 : u32 hdp_cntl;
2021 : };
2022 :
2023 : struct r600_asic {
2024 : unsigned max_pipes;
2025 : unsigned max_tile_pipes;
2026 : unsigned max_simds;
2027 : unsigned max_backends;
2028 : unsigned max_gprs;
2029 : unsigned max_threads;
2030 : unsigned max_stack_entries;
2031 : unsigned max_hw_contexts;
2032 : unsigned max_gs_threads;
2033 : unsigned sx_max_export_size;
2034 : unsigned sx_max_export_pos_size;
2035 : unsigned sx_max_export_smx_size;
2036 : unsigned sq_num_cf_insts;
2037 : unsigned tiling_nbanks;
2038 : unsigned tiling_npipes;
2039 : unsigned tiling_group_size;
2040 : unsigned tile_config;
2041 : unsigned backend_map;
2042 : unsigned active_simds;
2043 : };
2044 :
2045 : struct rv770_asic {
2046 : unsigned max_pipes;
2047 : unsigned max_tile_pipes;
2048 : unsigned max_simds;
2049 : unsigned max_backends;
2050 : unsigned max_gprs;
2051 : unsigned max_threads;
2052 : unsigned max_stack_entries;
2053 : unsigned max_hw_contexts;
2054 : unsigned max_gs_threads;
2055 : unsigned sx_max_export_size;
2056 : unsigned sx_max_export_pos_size;
2057 : unsigned sx_max_export_smx_size;
2058 : unsigned sq_num_cf_insts;
2059 : unsigned sx_num_of_sets;
2060 : unsigned sc_prim_fifo_size;
2061 : unsigned sc_hiz_tile_fifo_size;
2062 : unsigned sc_earlyz_tile_fifo_fize;
2063 : unsigned tiling_nbanks;
2064 : unsigned tiling_npipes;
2065 : unsigned tiling_group_size;
2066 : unsigned tile_config;
2067 : unsigned backend_map;
2068 : unsigned active_simds;
2069 : };
2070 :
2071 : struct evergreen_asic {
2072 : unsigned num_ses;
2073 : unsigned max_pipes;
2074 : unsigned max_tile_pipes;
2075 : unsigned max_simds;
2076 : unsigned max_backends;
2077 : unsigned max_gprs;
2078 : unsigned max_threads;
2079 : unsigned max_stack_entries;
2080 : unsigned max_hw_contexts;
2081 : unsigned max_gs_threads;
2082 : unsigned sx_max_export_size;
2083 : unsigned sx_max_export_pos_size;
2084 : unsigned sx_max_export_smx_size;
2085 : unsigned sq_num_cf_insts;
2086 : unsigned sx_num_of_sets;
2087 : unsigned sc_prim_fifo_size;
2088 : unsigned sc_hiz_tile_fifo_size;
2089 : unsigned sc_earlyz_tile_fifo_size;
2090 : unsigned tiling_nbanks;
2091 : unsigned tiling_npipes;
2092 : unsigned tiling_group_size;
2093 : unsigned tile_config;
2094 : unsigned backend_map;
2095 : unsigned active_simds;
2096 : };
2097 :
2098 : struct cayman_asic {
2099 : unsigned max_shader_engines;
2100 : unsigned max_pipes_per_simd;
2101 : unsigned max_tile_pipes;
2102 : unsigned max_simds_per_se;
2103 : unsigned max_backends_per_se;
2104 : unsigned max_texture_channel_caches;
2105 : unsigned max_gprs;
2106 : unsigned max_threads;
2107 : unsigned max_gs_threads;
2108 : unsigned max_stack_entries;
2109 : unsigned sx_num_of_sets;
2110 : unsigned sx_max_export_size;
2111 : unsigned sx_max_export_pos_size;
2112 : unsigned sx_max_export_smx_size;
2113 : unsigned max_hw_contexts;
2114 : unsigned sq_num_cf_insts;
2115 : unsigned sc_prim_fifo_size;
2116 : unsigned sc_hiz_tile_fifo_size;
2117 : unsigned sc_earlyz_tile_fifo_size;
2118 :
2119 : unsigned num_shader_engines;
2120 : unsigned num_shader_pipes_per_simd;
2121 : unsigned num_tile_pipes;
2122 : unsigned num_simds_per_se;
2123 : unsigned num_backends_per_se;
2124 : unsigned backend_disable_mask_per_asic;
2125 : unsigned backend_map;
2126 : unsigned num_texture_channel_caches;
2127 : unsigned mem_max_burst_length_bytes;
2128 : unsigned mem_row_size_in_kb;
2129 : unsigned shader_engine_tile_size;
2130 : unsigned num_gpus;
2131 : unsigned multi_gpu_tile_size;
2132 :
2133 : unsigned tile_config;
2134 : unsigned active_simds;
2135 : };
2136 :
2137 : struct si_asic {
2138 : unsigned max_shader_engines;
2139 : unsigned max_tile_pipes;
2140 : unsigned max_cu_per_sh;
2141 : unsigned max_sh_per_se;
2142 : unsigned max_backends_per_se;
2143 : unsigned max_texture_channel_caches;
2144 : unsigned max_gprs;
2145 : unsigned max_gs_threads;
2146 : unsigned max_hw_contexts;
2147 : unsigned sc_prim_fifo_size_frontend;
2148 : unsigned sc_prim_fifo_size_backend;
2149 : unsigned sc_hiz_tile_fifo_size;
2150 : unsigned sc_earlyz_tile_fifo_size;
2151 :
2152 : unsigned num_tile_pipes;
2153 : unsigned backend_enable_mask;
2154 : unsigned backend_disable_mask_per_asic;
2155 : unsigned backend_map;
2156 : unsigned num_texture_channel_caches;
2157 : unsigned mem_max_burst_length_bytes;
2158 : unsigned mem_row_size_in_kb;
2159 : unsigned shader_engine_tile_size;
2160 : unsigned num_gpus;
2161 : unsigned multi_gpu_tile_size;
2162 :
2163 : unsigned tile_config;
2164 : uint32_t tile_mode_array[32];
2165 : uint32_t active_cus;
2166 : };
2167 :
2168 : struct cik_asic {
2169 : unsigned max_shader_engines;
2170 : unsigned max_tile_pipes;
2171 : unsigned max_cu_per_sh;
2172 : unsigned max_sh_per_se;
2173 : unsigned max_backends_per_se;
2174 : unsigned max_texture_channel_caches;
2175 : unsigned max_gprs;
2176 : unsigned max_gs_threads;
2177 : unsigned max_hw_contexts;
2178 : unsigned sc_prim_fifo_size_frontend;
2179 : unsigned sc_prim_fifo_size_backend;
2180 : unsigned sc_hiz_tile_fifo_size;
2181 : unsigned sc_earlyz_tile_fifo_size;
2182 :
2183 : unsigned num_tile_pipes;
2184 : unsigned backend_enable_mask;
2185 : unsigned backend_disable_mask_per_asic;
2186 : unsigned backend_map;
2187 : unsigned num_texture_channel_caches;
2188 : unsigned mem_max_burst_length_bytes;
2189 : unsigned mem_row_size_in_kb;
2190 : unsigned shader_engine_tile_size;
2191 : unsigned num_gpus;
2192 : unsigned multi_gpu_tile_size;
2193 :
2194 : unsigned tile_config;
2195 : uint32_t tile_mode_array[32];
2196 : uint32_t macrotile_mode_array[16];
2197 : uint32_t active_cus;
2198 : };
2199 :
2200 : union radeon_asic_config {
2201 : struct r300_asic r300;
2202 : struct r100_asic r100;
2203 : struct r600_asic r600;
2204 : struct rv770_asic rv770;
2205 : struct evergreen_asic evergreen;
2206 : struct cayman_asic cayman;
2207 : struct si_asic si;
2208 : struct cik_asic cik;
2209 : };
2210 :
2211 : /*
2212 : * asic initizalization from radeon_asic.c
2213 : */
2214 : void radeon_agp_disable(struct radeon_device *rdev);
2215 : int radeon_asic_init(struct radeon_device *rdev);
2216 :
2217 :
2218 : /*
2219 : * IOCTL.
2220 : */
2221 : int radeon_gem_info_ioctl(struct drm_device *dev, void *data,
2222 : struct drm_file *filp);
2223 : int radeon_gem_create_ioctl(struct drm_device *dev, void *data,
2224 : struct drm_file *filp);
2225 : int radeon_gem_userptr_ioctl(struct drm_device *dev, void *data,
2226 : struct drm_file *filp);
2227 : int radeon_gem_pin_ioctl(struct drm_device *dev, void *data,
2228 : struct drm_file *file_priv);
2229 : int radeon_gem_unpin_ioctl(struct drm_device *dev, void *data,
2230 : struct drm_file *file_priv);
2231 : int radeon_gem_pwrite_ioctl(struct drm_device *dev, void *data,
2232 : struct drm_file *file_priv);
2233 : int radeon_gem_pread_ioctl(struct drm_device *dev, void *data,
2234 : struct drm_file *file_priv);
2235 : int radeon_gem_set_domain_ioctl(struct drm_device *dev, void *data,
2236 : struct drm_file *filp);
2237 : int radeon_gem_mmap_ioctl(struct drm_device *dev, void *data,
2238 : struct drm_file *filp);
2239 : int radeon_gem_busy_ioctl(struct drm_device *dev, void *data,
2240 : struct drm_file *filp);
2241 : int radeon_gem_wait_idle_ioctl(struct drm_device *dev, void *data,
2242 : struct drm_file *filp);
2243 : int radeon_gem_va_ioctl(struct drm_device *dev, void *data,
2244 : struct drm_file *filp);
2245 : int radeon_gem_op_ioctl(struct drm_device *dev, void *data,
2246 : struct drm_file *filp);
2247 : int radeon_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp);
2248 : int radeon_gem_set_tiling_ioctl(struct drm_device *dev, void *data,
2249 : struct drm_file *filp);
2250 : int radeon_gem_get_tiling_ioctl(struct drm_device *dev, void *data,
2251 : struct drm_file *filp);
2252 :
2253 : /* VRAM scratch page for HDP bug, default vram page */
2254 : struct r600_vram_scratch {
2255 : struct radeon_bo *robj;
2256 : volatile uint32_t *ptr;
2257 : u64 gpu_addr;
2258 : };
2259 :
2260 : /*
2261 : * ACPI
2262 : */
2263 : struct radeon_atif_notification_cfg {
2264 : bool enabled;
2265 : int command_code;
2266 : };
2267 :
2268 : struct radeon_atif_notifications {
2269 : bool display_switch;
2270 : bool expansion_mode_change;
2271 : bool thermal_state;
2272 : bool forced_power_state;
2273 : bool system_power_state;
2274 : bool display_conf_change;
2275 : bool px_gfx_switch;
2276 : bool brightness_change;
2277 : bool dgpu_display_event;
2278 : };
2279 :
2280 : struct radeon_atif_functions {
2281 : bool system_params;
2282 : bool sbios_requests;
2283 : bool select_active_disp;
2284 : bool lid_state;
2285 : bool get_tv_standard;
2286 : bool set_tv_standard;
2287 : bool get_panel_expansion_mode;
2288 : bool set_panel_expansion_mode;
2289 : bool temperature_change;
2290 : bool graphics_device_types;
2291 : };
2292 :
2293 : struct radeon_atif {
2294 : struct radeon_atif_notifications notifications;
2295 : struct radeon_atif_functions functions;
2296 : struct radeon_atif_notification_cfg notification_cfg;
2297 : struct radeon_encoder *encoder_for_bl;
2298 : };
2299 :
2300 : struct radeon_atcs_functions {
2301 : bool get_ext_state;
2302 : bool pcie_perf_req;
2303 : bool pcie_dev_rdy;
2304 : bool pcie_bus_width;
2305 : };
2306 :
2307 : struct radeon_atcs {
2308 : struct radeon_atcs_functions functions;
2309 : };
2310 :
2311 : /*
2312 : * Core structure, functions and helpers.
2313 : */
2314 : typedef uint32_t (*radeon_rreg_t)(struct radeon_device*, uint32_t);
2315 : typedef void (*radeon_wreg_t)(struct radeon_device*, uint32_t, uint32_t);
2316 :
2317 : struct radeon_device {
2318 : struct device self;
2319 : struct device *dev;
2320 : struct drm_device *ddev;
2321 : struct pci_dev *pdev;
2322 : struct rwlock exclusive_lock;
2323 :
2324 : pci_chipset_tag_t pc;
2325 : pcitag_t pa_tag;
2326 : pci_intr_handle_t intrh;
2327 : bus_space_tag_t iot;
2328 : bus_space_tag_t memt;
2329 : bus_dma_tag_t dmat;
2330 : void *irqh;
2331 :
2332 : void (*switchcb)(void *, int, int);
2333 : void *switchcbarg;
2334 : void *switchcookie;
2335 : struct task switchtask;
2336 : struct rasops_info ro;
2337 : int console;
2338 :
2339 : struct task burner_task;
2340 : int burner_fblank;
2341 :
2342 : #ifdef __sparc64__
2343 : struct sunfb sf;
2344 : bus_size_t fb_offset;
2345 : bus_space_handle_t memh;
2346 : #endif
2347 :
2348 : unsigned long fb_aper_offset;
2349 : unsigned long fb_aper_size;
2350 :
2351 : /* ASIC */
2352 : union radeon_asic_config config;
2353 : enum radeon_family family;
2354 : unsigned long flags;
2355 : int usec_timeout;
2356 : enum radeon_pll_errata pll_errata;
2357 : int num_gb_pipes;
2358 : int num_z_pipes;
2359 : int disp_priority;
2360 : /* BIOS */
2361 : uint8_t *bios;
2362 : bool is_atom_bios;
2363 : uint16_t bios_header_start;
2364 : struct radeon_bo *stollen_vga_memory;
2365 : /* Register mmio */
2366 : resource_size_t rmmio_base;
2367 : resource_size_t rmmio_size;
2368 : /* protects concurrent MM_INDEX/DATA based register access */
2369 : spinlock_t mmio_idx_lock;
2370 : /* protects concurrent SMC based register access */
2371 : spinlock_t smc_idx_lock;
2372 : /* protects concurrent PLL register access */
2373 : spinlock_t pll_idx_lock;
2374 : /* protects concurrent MC register access */
2375 : spinlock_t mc_idx_lock;
2376 : /* protects concurrent PCIE register access */
2377 : spinlock_t pcie_idx_lock;
2378 : /* protects concurrent PCIE_PORT register access */
2379 : spinlock_t pciep_idx_lock;
2380 : /* protects concurrent PIF register access */
2381 : spinlock_t pif_idx_lock;
2382 : /* protects concurrent CG register access */
2383 : spinlock_t cg_idx_lock;
2384 : /* protects concurrent UVD register access */
2385 : spinlock_t uvd_idx_lock;
2386 : /* protects concurrent RCU register access */
2387 : spinlock_t rcu_idx_lock;
2388 : /* protects concurrent DIDT register access */
2389 : spinlock_t didt_idx_lock;
2390 : /* protects concurrent ENDPOINT (audio) register access */
2391 : spinlock_t end_idx_lock;
2392 : bus_space_handle_t rmmio_bsh;
2393 : radeon_rreg_t mc_rreg;
2394 : radeon_wreg_t mc_wreg;
2395 : radeon_rreg_t pll_rreg;
2396 : radeon_wreg_t pll_wreg;
2397 : uint32_t pcie_reg_mask;
2398 : radeon_rreg_t pciep_rreg;
2399 : radeon_wreg_t pciep_wreg;
2400 : /* io port */
2401 : bus_space_handle_t rio_mem;
2402 : resource_size_t rio_mem_size;
2403 : struct radeon_clock clock;
2404 : struct radeon_mc mc;
2405 : struct radeon_gart gart;
2406 : struct radeon_mode_info mode_info;
2407 : struct radeon_scratch scratch;
2408 : struct radeon_doorbell doorbell;
2409 : struct radeon_mman mman;
2410 : struct radeon_fence_driver fence_drv[RADEON_NUM_RINGS];
2411 : wait_queue_head_t fence_queue;
2412 : unsigned fence_context;
2413 : struct rwlock ring_lock;
2414 : struct radeon_ring ring[RADEON_NUM_RINGS];
2415 : bool ib_pool_ready;
2416 : struct radeon_sa_manager ring_tmp_bo;
2417 : struct radeon_irq irq;
2418 : struct radeon_asic *asic;
2419 : struct radeon_gem gem;
2420 : struct radeon_pm pm;
2421 : struct radeon_uvd uvd;
2422 : struct radeon_vce vce;
2423 : uint32_t bios_scratch[RADEON_BIOS_NUM_SCRATCH];
2424 : struct radeon_wb wb;
2425 : struct radeon_dummy_page dummy_page;
2426 : bool shutdown;
2427 : bool suspend;
2428 : bool need_dma32;
2429 : bool accel_working;
2430 : bool fastfb_working; /* IGP feature*/
2431 : bool needs_reset, in_reset;
2432 : struct radeon_surface_reg surface_regs[RADEON_GEM_MAX_SURFACES];
2433 : const struct firmware *me_fw; /* all family ME firmware */
2434 : const struct firmware *pfp_fw; /* r6/700 PFP firmware */
2435 : const struct firmware *rlc_fw; /* r6/700 RLC firmware */
2436 : const struct firmware *mc_fw; /* NI MC firmware */
2437 : const struct firmware *ce_fw; /* SI CE firmware */
2438 : const struct firmware *mec_fw; /* CIK MEC firmware */
2439 : const struct firmware *mec2_fw; /* KV MEC2 firmware */
2440 : const struct firmware *sdma_fw; /* CIK SDMA firmware */
2441 : const struct firmware *smc_fw; /* SMC firmware */
2442 : const struct firmware *uvd_fw; /* UVD firmware */
2443 : const struct firmware *vce_fw; /* VCE firmware */
2444 : bool new_fw;
2445 : struct r600_vram_scratch vram_scratch;
2446 : int msi_enabled; /* msi enabled */
2447 : struct r600_ih ih; /* r6/700 interrupt ring */
2448 : struct radeon_rlc rlc;
2449 : struct radeon_mec mec;
2450 : struct delayed_work hotplug_work;
2451 : struct work_struct dp_work;
2452 : struct work_struct audio_work;
2453 : int num_crtc; /* number of crtcs */
2454 : struct rwlock dc_hw_i2c_mutex; /* display controller hw i2c mutex */
2455 : bool has_uvd;
2456 : struct r600_audio audio; /* audio stuff */
2457 : struct notifier_block acpi_nb;
2458 : /* only one userspace can use Hyperz features or CMASK at a time */
2459 : struct drm_file *hyperz_filp;
2460 : struct drm_file *cmask_filp;
2461 : /* i2c buses */
2462 : struct radeon_i2c_chan *i2c_bus[RADEON_MAX_I2C_BUS];
2463 : /* debugfs */
2464 : struct radeon_debugfs debugfs[RADEON_DEBUGFS_MAX_COMPONENTS];
2465 : unsigned debugfs_count;
2466 : /* virtual memory */
2467 : struct radeon_vm_manager vm_manager;
2468 : struct rwlock gpu_clock_mutex;
2469 : /* memory stats */
2470 : atomic64_t vram_usage;
2471 : atomic64_t gtt_usage;
2472 : atomic64_t num_bytes_moved;
2473 : atomic_t gpu_reset_counter;
2474 : /* ACPI interface */
2475 : struct radeon_atif atif;
2476 : struct radeon_atcs atcs;
2477 : /* srbm instance registers */
2478 : struct rwlock srbm_mutex;
2479 : /* GRBM index mutex. Protects concurrents access to GRBM index */
2480 : struct rwlock grbm_idx_mutex;
2481 : /* clock, powergating flags */
2482 : u32 cg_flags;
2483 : u32 pg_flags;
2484 :
2485 : #ifdef __linux__
2486 : struct dev_pm_domain vga_pm_domain;
2487 : #endif
2488 : bool have_disp_power_ref;
2489 : u32 px_quirk_flags;
2490 :
2491 : /* tracking pinned memory */
2492 : u64 vram_pin_size;
2493 : u64 gart_pin_size;
2494 :
2495 : /* amdkfd interface */
2496 : struct kfd_dev *kfd;
2497 :
2498 : struct rwlock mn_lock;
2499 : DECLARE_HASHTABLE(mn_hash, 7);
2500 : };
2501 :
2502 : bool radeon_is_px(struct drm_device *dev);
2503 : int radeon_device_init(struct radeon_device *rdev,
2504 : struct drm_device *ddev,
2505 : struct pci_dev *pdev,
2506 : uint32_t flags);
2507 : void radeon_device_fini(struct radeon_device *rdev);
2508 : int radeon_gpu_wait_for_idle(struct radeon_device *rdev);
2509 :
2510 : #define RADEON_MIN_MMIO_SIZE 0x10000
2511 :
2512 : uint32_t r100_mm_rreg_slow(struct radeon_device *rdev, uint32_t reg);
2513 : void r100_mm_wreg_slow(struct radeon_device *rdev, uint32_t reg, uint32_t v);
2514 0 : static inline uint32_t r100_mm_rreg(struct radeon_device *rdev, uint32_t reg,
2515 : bool always_indirect)
2516 : {
2517 : /* The mmio size is 64kb at minimum. Allows the if to be optimized out. */
2518 0 : if ((reg < rdev->rmmio_size || reg < RADEON_MIN_MMIO_SIZE) && !always_indirect)
2519 0 : return bus_space_read_4(rdev->memt, rdev->rmmio_bsh, reg);
2520 : else
2521 0 : return r100_mm_rreg_slow(rdev, reg);
2522 0 : }
2523 0 : static inline void r100_mm_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v,
2524 : bool always_indirect)
2525 : {
2526 0 : if ((reg < rdev->rmmio_size || reg < RADEON_MIN_MMIO_SIZE) && !always_indirect)
2527 0 : bus_space_write_4(rdev->memt, rdev->rmmio_bsh, reg, v);
2528 : else
2529 0 : r100_mm_wreg_slow(rdev, reg, v);
2530 0 : }
2531 :
2532 : u32 r100_io_rreg(struct radeon_device *rdev, u32 reg);
2533 : void r100_io_wreg(struct radeon_device *rdev, u32 reg, u32 v);
2534 :
2535 : u32 cik_mm_rdoorbell(struct radeon_device *rdev, u32 index);
2536 : void cik_mm_wdoorbell(struct radeon_device *rdev, u32 index, u32 v);
2537 :
2538 : /*
2539 : * Cast helper
2540 : */
2541 : extern const struct fence_ops radeon_fence_ops;
2542 :
2543 0 : static inline struct radeon_fence *to_radeon_fence(struct fence *f)
2544 : {
2545 0 : struct radeon_fence *__f = container_of(f, struct radeon_fence, base);
2546 :
2547 0 : if (__f->base.ops == &radeon_fence_ops)
2548 0 : return __f;
2549 :
2550 0 : return NULL;
2551 0 : }
2552 :
2553 : /*
2554 : * Registers read & write functions.
2555 : */
2556 : #define RREG8(reg) \
2557 : bus_space_read_1(rdev->memt, rdev->rmmio_bsh, (reg))
2558 : #define WREG8(reg, v) \
2559 : bus_space_write_1(rdev->memt, rdev->rmmio_bsh, (reg), (v))
2560 : #define RREG16(reg) \
2561 : bus_space_read_2(rdev->memt, rdev->rmmio_bsh, (reg))
2562 : #define WREG16(reg, v) \
2563 : bus_space_write_2(rdev->memt, rdev->rmmio_bsh, (reg), (v))
2564 : #define RREG32(reg) r100_mm_rreg(rdev, (reg), false)
2565 : #define RREG32_IDX(reg) r100_mm_rreg(rdev, (reg), true)
2566 : #define DREG32(reg) printk(KERN_INFO "REGISTER: " #reg " : 0x%08X\n", r100_mm_rreg(rdev, (reg), false))
2567 : #define WREG32(reg, v) r100_mm_wreg(rdev, (reg), (v), false)
2568 : #define WREG32_IDX(reg, v) r100_mm_wreg(rdev, (reg), (v), true)
2569 : #define REG_SET(FIELD, v) (((v) << FIELD##_SHIFT) & FIELD##_MASK)
2570 : #define REG_GET(FIELD, v) (((v) << FIELD##_SHIFT) & FIELD##_MASK)
2571 : #define RREG32_PLL(reg) rdev->pll_rreg(rdev, (reg))
2572 : #define WREG32_PLL(reg, v) rdev->pll_wreg(rdev, (reg), (v))
2573 : #define RREG32_MC(reg) rdev->mc_rreg(rdev, (reg))
2574 : #define WREG32_MC(reg, v) rdev->mc_wreg(rdev, (reg), (v))
2575 : #define RREG32_PCIE(reg) rv370_pcie_rreg(rdev, (reg))
2576 : #define WREG32_PCIE(reg, v) rv370_pcie_wreg(rdev, (reg), (v))
2577 : #define RREG32_PCIE_PORT(reg) rdev->pciep_rreg(rdev, (reg))
2578 : #define WREG32_PCIE_PORT(reg, v) rdev->pciep_wreg(rdev, (reg), (v))
2579 : #define RREG32_SMC(reg) tn_smc_rreg(rdev, (reg))
2580 : #define WREG32_SMC(reg, v) tn_smc_wreg(rdev, (reg), (v))
2581 : #define RREG32_RCU(reg) r600_rcu_rreg(rdev, (reg))
2582 : #define WREG32_RCU(reg, v) r600_rcu_wreg(rdev, (reg), (v))
2583 : #define RREG32_CG(reg) eg_cg_rreg(rdev, (reg))
2584 : #define WREG32_CG(reg, v) eg_cg_wreg(rdev, (reg), (v))
2585 : #define RREG32_PIF_PHY0(reg) eg_pif_phy0_rreg(rdev, (reg))
2586 : #define WREG32_PIF_PHY0(reg, v) eg_pif_phy0_wreg(rdev, (reg), (v))
2587 : #define RREG32_PIF_PHY1(reg) eg_pif_phy1_rreg(rdev, (reg))
2588 : #define WREG32_PIF_PHY1(reg, v) eg_pif_phy1_wreg(rdev, (reg), (v))
2589 : #define RREG32_UVD_CTX(reg) r600_uvd_ctx_rreg(rdev, (reg))
2590 : #define WREG32_UVD_CTX(reg, v) r600_uvd_ctx_wreg(rdev, (reg), (v))
2591 : #define RREG32_DIDT(reg) cik_didt_rreg(rdev, (reg))
2592 : #define WREG32_DIDT(reg, v) cik_didt_wreg(rdev, (reg), (v))
2593 : #define WREG32_P(reg, val, mask) \
2594 : do { \
2595 : uint32_t tmp_ = RREG32(reg); \
2596 : tmp_ &= (mask); \
2597 : tmp_ |= ((val) & ~(mask)); \
2598 : WREG32(reg, tmp_); \
2599 : } while (0)
2600 : #define WREG32_AND(reg, and) WREG32_P(reg, 0, and)
2601 : #define WREG32_OR(reg, or) WREG32_P(reg, or, ~(or))
2602 : #define WREG32_PLL_P(reg, val, mask) \
2603 : do { \
2604 : uint32_t tmp_ = RREG32_PLL(reg); \
2605 : tmp_ &= (mask); \
2606 : tmp_ |= ((val) & ~(mask)); \
2607 : WREG32_PLL(reg, tmp_); \
2608 : } while (0)
2609 : #define WREG32_SMC_P(reg, val, mask) \
2610 : do { \
2611 : uint32_t tmp_ = RREG32_SMC(reg); \
2612 : tmp_ &= (mask); \
2613 : tmp_ |= ((val) & ~(mask)); \
2614 : WREG32_SMC(reg, tmp_); \
2615 : } while (0)
2616 : #define DREG32_SYS(sqf, rdev, reg) seq_printf((sqf), #reg " : 0x%08X\n", r100_mm_rreg((rdev), (reg), false))
2617 : #define RREG32_IO(reg) r100_io_rreg(rdev, (reg))
2618 : #define WREG32_IO(reg, v) r100_io_wreg(rdev, (reg), (v))
2619 :
2620 : #define RDOORBELL32(index) cik_mm_rdoorbell(rdev, (index))
2621 : #define WDOORBELL32(index, v) cik_mm_wdoorbell(rdev, (index), (v))
2622 :
2623 : /*
2624 : * Indirect registers accessors.
2625 : * They used to be inlined, but this increases code size by ~65 kbytes.
2626 : * Since each performs a pair of MMIO ops
2627 : * within a spin_lock_irqsave/spin_unlock_irqrestore region,
2628 : * the cost of call+ret is almost negligible. MMIO and locking
2629 : * costs several dozens of cycles each at best, call+ret is ~5 cycles.
2630 : */
2631 : uint32_t rv370_pcie_rreg(struct radeon_device *rdev, uint32_t reg);
2632 : void rv370_pcie_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
2633 : u32 tn_smc_rreg(struct radeon_device *rdev, u32 reg);
2634 : void tn_smc_wreg(struct radeon_device *rdev, u32 reg, u32 v);
2635 : u32 r600_rcu_rreg(struct radeon_device *rdev, u32 reg);
2636 : void r600_rcu_wreg(struct radeon_device *rdev, u32 reg, u32 v);
2637 : u32 eg_cg_rreg(struct radeon_device *rdev, u32 reg);
2638 : void eg_cg_wreg(struct radeon_device *rdev, u32 reg, u32 v);
2639 : u32 eg_pif_phy0_rreg(struct radeon_device *rdev, u32 reg);
2640 : void eg_pif_phy0_wreg(struct radeon_device *rdev, u32 reg, u32 v);
2641 : u32 eg_pif_phy1_rreg(struct radeon_device *rdev, u32 reg);
2642 : void eg_pif_phy1_wreg(struct radeon_device *rdev, u32 reg, u32 v);
2643 : u32 r600_uvd_ctx_rreg(struct radeon_device *rdev, u32 reg);
2644 : void r600_uvd_ctx_wreg(struct radeon_device *rdev, u32 reg, u32 v);
2645 : u32 cik_didt_rreg(struct radeon_device *rdev, u32 reg);
2646 : void cik_didt_wreg(struct radeon_device *rdev, u32 reg, u32 v);
2647 :
2648 : void r100_pll_errata_after_index(struct radeon_device *rdev);
2649 :
2650 :
2651 : /*
2652 : * ASICs helpers.
2653 : */
2654 : #define ASIC_IS_RN50(rdev) ((rdev->pdev->device == 0x515e) || \
2655 : (rdev->pdev->device == 0x5969))
2656 : #define ASIC_IS_RV100(rdev) ((rdev->family == CHIP_RV100) || \
2657 : (rdev->family == CHIP_RV200) || \
2658 : (rdev->family == CHIP_RS100) || \
2659 : (rdev->family == CHIP_RS200) || \
2660 : (rdev->family == CHIP_RV250) || \
2661 : (rdev->family == CHIP_RV280) || \
2662 : (rdev->family == CHIP_RS300))
2663 : #define ASIC_IS_R300(rdev) ((rdev->family == CHIP_R300) || \
2664 : (rdev->family == CHIP_RV350) || \
2665 : (rdev->family == CHIP_R350) || \
2666 : (rdev->family == CHIP_RV380) || \
2667 : (rdev->family == CHIP_R420) || \
2668 : (rdev->family == CHIP_R423) || \
2669 : (rdev->family == CHIP_RV410) || \
2670 : (rdev->family == CHIP_RS400) || \
2671 : (rdev->family == CHIP_RS480))
2672 : #define ASIC_IS_X2(rdev) ((rdev->ddev->pdev->device == 0x9441) || \
2673 : (rdev->ddev->pdev->device == 0x9443) || \
2674 : (rdev->ddev->pdev->device == 0x944B) || \
2675 : (rdev->ddev->pdev->device == 0x9506) || \
2676 : (rdev->ddev->pdev->device == 0x9509) || \
2677 : (rdev->ddev->pdev->device == 0x950F) || \
2678 : (rdev->ddev->pdev->device == 0x689C) || \
2679 : (rdev->ddev->pdev->device == 0x689D))
2680 : #define ASIC_IS_AVIVO(rdev) ((rdev->family >= CHIP_RS600))
2681 : #define ASIC_IS_DCE2(rdev) ((rdev->family == CHIP_RS600) || \
2682 : (rdev->family == CHIP_RS690) || \
2683 : (rdev->family == CHIP_RS740) || \
2684 : (rdev->family >= CHIP_R600))
2685 : #define ASIC_IS_DCE3(rdev) ((rdev->family >= CHIP_RV620))
2686 : #define ASIC_IS_DCE32(rdev) ((rdev->family >= CHIP_RV730))
2687 : #define ASIC_IS_DCE4(rdev) ((rdev->family >= CHIP_CEDAR))
2688 : #define ASIC_IS_DCE41(rdev) ((rdev->family >= CHIP_PALM) && \
2689 : (rdev->flags & RADEON_IS_IGP))
2690 : #define ASIC_IS_DCE5(rdev) ((rdev->family >= CHIP_BARTS))
2691 : #define ASIC_IS_DCE6(rdev) ((rdev->family >= CHIP_ARUBA))
2692 : #define ASIC_IS_DCE61(rdev) ((rdev->family >= CHIP_ARUBA) && \
2693 : (rdev->flags & RADEON_IS_IGP))
2694 : #define ASIC_IS_DCE64(rdev) ((rdev->family == CHIP_OLAND))
2695 : #define ASIC_IS_NODCE(rdev) ((rdev->family == CHIP_HAINAN))
2696 : #define ASIC_IS_DCE8(rdev) ((rdev->family >= CHIP_BONAIRE))
2697 : #define ASIC_IS_DCE81(rdev) ((rdev->family == CHIP_KAVERI))
2698 : #define ASIC_IS_DCE82(rdev) ((rdev->family == CHIP_BONAIRE))
2699 : #define ASIC_IS_DCE83(rdev) ((rdev->family == CHIP_KABINI) || \
2700 : (rdev->family == CHIP_MULLINS))
2701 :
2702 : #define ASIC_IS_LOMBOK(rdev) ((rdev->ddev->pdev->device == 0x6849) || \
2703 : (rdev->ddev->pdev->device == 0x6850) || \
2704 : (rdev->ddev->pdev->device == 0x6858) || \
2705 : (rdev->ddev->pdev->device == 0x6859) || \
2706 : (rdev->ddev->pdev->device == 0x6840) || \
2707 : (rdev->ddev->pdev->device == 0x6841) || \
2708 : (rdev->ddev->pdev->device == 0x6842) || \
2709 : (rdev->ddev->pdev->device == 0x6843))
2710 :
2711 : /*
2712 : * BIOS helpers.
2713 : */
2714 : #define RBIOS8(i) (rdev->bios[i])
2715 : #define RBIOS16(i) (RBIOS8(i) | (RBIOS8((i)+1) << 8))
2716 : #define RBIOS32(i) ((RBIOS16(i)) | (RBIOS16((i)+2) << 16))
2717 :
2718 : int radeon_combios_init(struct radeon_device *rdev);
2719 : void radeon_combios_fini(struct radeon_device *rdev);
2720 : int radeon_atombios_init(struct radeon_device *rdev);
2721 : void radeon_atombios_fini(struct radeon_device *rdev);
2722 :
2723 :
2724 : /*
2725 : * RING helpers.
2726 : */
2727 :
2728 : /**
2729 : * radeon_ring_write - write a value to the ring
2730 : *
2731 : * @ring: radeon_ring structure holding ring information
2732 : * @v: dword (dw) value to write
2733 : *
2734 : * Write a value to the requested ring buffer (all asics).
2735 : */
2736 0 : static inline void radeon_ring_write(struct radeon_ring *ring, uint32_t v)
2737 : {
2738 0 : if (ring->count_dw <= 0)
2739 0 : DRM_ERROR("radeon: writing more dwords to the ring than expected!\n");
2740 :
2741 0 : ring->ring[ring->wptr++] = v;
2742 0 : ring->wptr &= ring->ptr_mask;
2743 0 : ring->count_dw--;
2744 0 : ring->ring_free_dw--;
2745 0 : }
2746 :
2747 : /*
2748 : * ASICs macro.
2749 : */
2750 : #define radeon_init(rdev) (rdev)->asic->init((rdev))
2751 : #define radeon_fini(rdev) (rdev)->asic->fini((rdev))
2752 : #define radeon_resume(rdev) (rdev)->asic->resume((rdev))
2753 : #define radeon_suspend(rdev) (rdev)->asic->suspend((rdev))
2754 : #define radeon_cs_parse(rdev, r, p) (rdev)->asic->ring[(r)]->cs_parse((p))
2755 : #define radeon_vga_set_state(rdev, state) (rdev)->asic->vga_set_state((rdev), (state))
2756 : #define radeon_asic_reset(rdev) (rdev)->asic->asic_reset((rdev))
2757 : #define radeon_gart_tlb_flush(rdev) (rdev)->asic->gart.tlb_flush((rdev))
2758 : #define radeon_gart_get_page_entry(a, f) (rdev)->asic->gart.get_page_entry((a), (f))
2759 : #define radeon_gart_set_page(rdev, i, e) (rdev)->asic->gart.set_page((rdev), (i), (e))
2760 : #define radeon_asic_vm_init(rdev) (rdev)->asic->vm.init((rdev))
2761 : #define radeon_asic_vm_fini(rdev) (rdev)->asic->vm.fini((rdev))
2762 : #define radeon_asic_vm_copy_pages(rdev, ib, pe, src, count) ((rdev)->asic->vm.copy_pages((rdev), (ib), (pe), (src), (count)))
2763 : #define radeon_asic_vm_write_pages(rdev, ib, pe, addr, count, incr, flags) ((rdev)->asic->vm.write_pages((rdev), (ib), (pe), (addr), (count), (incr), (flags)))
2764 : #define radeon_asic_vm_set_pages(rdev, ib, pe, addr, count, incr, flags) ((rdev)->asic->vm.set_pages((rdev), (ib), (pe), (addr), (count), (incr), (flags)))
2765 : #define radeon_asic_vm_pad_ib(rdev, ib) ((rdev)->asic->vm.pad_ib((ib)))
2766 : #define radeon_ring_start(rdev, r, cp) (rdev)->asic->ring[(r)]->ring_start((rdev), (cp))
2767 : #define radeon_ring_test(rdev, r, cp) (rdev)->asic->ring[(r)]->ring_test((rdev), (cp))
2768 : #define radeon_ib_test(rdev, r, cp) (rdev)->asic->ring[(r)]->ib_test((rdev), (cp))
2769 : #define radeon_ring_ib_execute(rdev, r, ib) (rdev)->asic->ring[(r)]->ib_execute((rdev), (ib))
2770 : #define radeon_ring_ib_parse(rdev, r, ib) (rdev)->asic->ring[(r)]->ib_parse((rdev), (ib))
2771 : #define radeon_ring_is_lockup(rdev, r, cp) (rdev)->asic->ring[(r)]->is_lockup((rdev), (cp))
2772 : #define radeon_ring_vm_flush(rdev, r, vm_id, pd_addr) (rdev)->asic->ring[(r)->idx]->vm_flush((rdev), (r), (vm_id), (pd_addr))
2773 : #define radeon_ring_get_rptr(rdev, r) (rdev)->asic->ring[(r)->idx]->get_rptr((rdev), (r))
2774 : #define radeon_ring_get_wptr(rdev, r) (rdev)->asic->ring[(r)->idx]->get_wptr((rdev), (r))
2775 : #define radeon_ring_set_wptr(rdev, r) (rdev)->asic->ring[(r)->idx]->set_wptr((rdev), (r))
2776 : #define radeon_irq_set(rdev) (rdev)->asic->irq.set((rdev))
2777 : #define radeon_irq_process(rdev) (rdev)->asic->irq.process((rdev))
2778 : #define radeon_get_vblank_counter(rdev, crtc) (rdev)->asic->display.get_vblank_counter((rdev), (crtc))
2779 : #define radeon_set_backlight_level(rdev, e, l) (rdev)->asic->display.set_backlight_level((e), (l))
2780 : #define radeon_get_backlight_level(rdev, e) (rdev)->asic->display.get_backlight_level((e))
2781 : #define radeon_hdmi_enable(rdev, e, b) (rdev)->asic->display.hdmi_enable((e), (b))
2782 : #define radeon_hdmi_setmode(rdev, e, m) (rdev)->asic->display.hdmi_setmode((e), (m))
2783 : #define radeon_fence_ring_emit(rdev, r, fence) (rdev)->asic->ring[(r)]->emit_fence((rdev), (fence))
2784 : #define radeon_semaphore_ring_emit(rdev, r, cp, semaphore, emit_wait) (rdev)->asic->ring[(r)]->emit_semaphore((rdev), (cp), (semaphore), (emit_wait))
2785 : #define radeon_copy_blit(rdev, s, d, np, resv) (rdev)->asic->copy.blit((rdev), (s), (d), (np), (resv))
2786 : #define radeon_copy_dma(rdev, s, d, np, resv) (rdev)->asic->copy.dma((rdev), (s), (d), (np), (resv))
2787 : #define radeon_copy(rdev, s, d, np, resv) (rdev)->asic->copy.copy((rdev), (s), (d), (np), (resv))
2788 : #define radeon_copy_blit_ring_index(rdev) (rdev)->asic->copy.blit_ring_index
2789 : #define radeon_copy_dma_ring_index(rdev) (rdev)->asic->copy.dma_ring_index
2790 : #define radeon_copy_ring_index(rdev) (rdev)->asic->copy.copy_ring_index
2791 : #define radeon_get_engine_clock(rdev) (rdev)->asic->pm.get_engine_clock((rdev))
2792 : #define radeon_set_engine_clock(rdev, e) (rdev)->asic->pm.set_engine_clock((rdev), (e))
2793 : #define radeon_get_memory_clock(rdev) (rdev)->asic->pm.get_memory_clock((rdev))
2794 : #define radeon_set_memory_clock(rdev, e) (rdev)->asic->pm.set_memory_clock((rdev), (e))
2795 : #define radeon_get_pcie_lanes(rdev) (rdev)->asic->pm.get_pcie_lanes((rdev))
2796 : #define radeon_set_pcie_lanes(rdev, l) (rdev)->asic->pm.set_pcie_lanes((rdev), (l))
2797 : #define radeon_set_clock_gating(rdev, e) (rdev)->asic->pm.set_clock_gating((rdev), (e))
2798 : #define radeon_set_uvd_clocks(rdev, v, d) (rdev)->asic->pm.set_uvd_clocks((rdev), (v), (d))
2799 : #define radeon_set_vce_clocks(rdev, ev, ec) (rdev)->asic->pm.set_vce_clocks((rdev), (ev), (ec))
2800 : #define radeon_get_temperature(rdev) (rdev)->asic->pm.get_temperature((rdev))
2801 : #define radeon_set_surface_reg(rdev, r, f, p, o, s) ((rdev)->asic->surface.set_reg((rdev), (r), (f), (p), (o), (s)))
2802 : #define radeon_clear_surface_reg(rdev, r) ((rdev)->asic->surface.clear_reg((rdev), (r)))
2803 : #define radeon_bandwidth_update(rdev) (rdev)->asic->display.bandwidth_update((rdev))
2804 : #define radeon_hpd_init(rdev) (rdev)->asic->hpd.init((rdev))
2805 : #define radeon_hpd_fini(rdev) (rdev)->asic->hpd.fini((rdev))
2806 : #define radeon_hpd_sense(rdev, h) (rdev)->asic->hpd.sense((rdev), (h))
2807 : #define radeon_hpd_set_polarity(rdev, h) (rdev)->asic->hpd.set_polarity((rdev), (h))
2808 : #define radeon_gui_idle(rdev) (rdev)->asic->gui_idle((rdev))
2809 : #define radeon_pm_misc(rdev) (rdev)->asic->pm.misc((rdev))
2810 : #define radeon_pm_prepare(rdev) (rdev)->asic->pm.prepare((rdev))
2811 : #define radeon_pm_finish(rdev) (rdev)->asic->pm.finish((rdev))
2812 : #define radeon_pm_init_profile(rdev) (rdev)->asic->pm.init_profile((rdev))
2813 : #define radeon_pm_get_dynpm_state(rdev) (rdev)->asic->pm.get_dynpm_state((rdev))
2814 : #define radeon_page_flip(rdev, crtc, base) (rdev)->asic->pflip.page_flip((rdev), (crtc), (base))
2815 : #define radeon_page_flip_pending(rdev, crtc) (rdev)->asic->pflip.page_flip_pending((rdev), (crtc))
2816 : #define radeon_wait_for_vblank(rdev, crtc) (rdev)->asic->display.wait_for_vblank((rdev), (crtc))
2817 : #define radeon_mc_wait_for_idle(rdev) (rdev)->asic->mc_wait_for_idle((rdev))
2818 : #define radeon_get_xclk(rdev) (rdev)->asic->get_xclk((rdev))
2819 : #define radeon_get_gpu_clock_counter(rdev) (rdev)->asic->get_gpu_clock_counter((rdev))
2820 : #define radeon_get_allowed_info_register(rdev, r, v) (rdev)->asic->get_allowed_info_register((rdev), (r), (v))
2821 : #define radeon_dpm_init(rdev) rdev->asic->dpm.init((rdev))
2822 : #define radeon_dpm_setup_asic(rdev) rdev->asic->dpm.setup_asic((rdev))
2823 : #define radeon_dpm_enable(rdev) rdev->asic->dpm.enable((rdev))
2824 : #define radeon_dpm_late_enable(rdev) rdev->asic->dpm.late_enable((rdev))
2825 : #define radeon_dpm_disable(rdev) rdev->asic->dpm.disable((rdev))
2826 : #define radeon_dpm_pre_set_power_state(rdev) rdev->asic->dpm.pre_set_power_state((rdev))
2827 : #define radeon_dpm_set_power_state(rdev) rdev->asic->dpm.set_power_state((rdev))
2828 : #define radeon_dpm_post_set_power_state(rdev) rdev->asic->dpm.post_set_power_state((rdev))
2829 : #define radeon_dpm_display_configuration_changed(rdev) rdev->asic->dpm.display_configuration_changed((rdev))
2830 : #define radeon_dpm_fini(rdev) rdev->asic->dpm.fini((rdev))
2831 : #define radeon_dpm_get_sclk(rdev, l) rdev->asic->dpm.get_sclk((rdev), (l))
2832 : #define radeon_dpm_get_mclk(rdev, l) rdev->asic->dpm.get_mclk((rdev), (l))
2833 : #define radeon_dpm_print_power_state(rdev, ps) rdev->asic->dpm.print_power_state((rdev), (ps))
2834 : #define radeon_dpm_debugfs_print_current_performance_level(rdev, m) rdev->asic->dpm.debugfs_print_current_performance_level((rdev), (m))
2835 : #define radeon_dpm_force_performance_level(rdev, l) rdev->asic->dpm.force_performance_level((rdev), (l))
2836 : #define radeon_dpm_vblank_too_short(rdev) rdev->asic->dpm.vblank_too_short((rdev))
2837 : #define radeon_dpm_powergate_uvd(rdev, g) rdev->asic->dpm.powergate_uvd((rdev), (g))
2838 : #define radeon_dpm_enable_bapm(rdev, e) rdev->asic->dpm.enable_bapm((rdev), (e))
2839 : #define radeon_dpm_get_current_sclk(rdev) rdev->asic->dpm.get_current_sclk((rdev))
2840 : #define radeon_dpm_get_current_mclk(rdev) rdev->asic->dpm.get_current_mclk((rdev))
2841 :
2842 : /* Common functions */
2843 : /* AGP */
2844 : extern int radeon_gpu_reset(struct radeon_device *rdev);
2845 : extern void radeon_pci_config_reset(struct radeon_device *rdev);
2846 : extern void r600_set_bios_scratch_engine_hung(struct radeon_device *rdev, bool hung);
2847 : extern void radeon_agp_disable(struct radeon_device *rdev);
2848 : extern int radeon_modeset_init(struct radeon_device *rdev);
2849 : extern void radeon_modeset_fini(struct radeon_device *rdev);
2850 : extern bool radeon_card_posted(struct radeon_device *rdev);
2851 : extern void radeon_update_bandwidth_info(struct radeon_device *rdev);
2852 : extern void radeon_update_display_priority(struct radeon_device *rdev);
2853 : extern bool radeon_boot_test_post_card(struct radeon_device *rdev);
2854 : extern void radeon_scratch_init(struct radeon_device *rdev);
2855 : extern void radeon_wb_fini(struct radeon_device *rdev);
2856 : extern int radeon_wb_init(struct radeon_device *rdev);
2857 : extern void radeon_wb_disable(struct radeon_device *rdev);
2858 : extern void radeon_surface_init(struct radeon_device *rdev);
2859 : extern int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data);
2860 : extern void radeon_legacy_set_clock_gating(struct radeon_device *rdev, int enable);
2861 : extern void radeon_atom_set_clock_gating(struct radeon_device *rdev, int enable);
2862 : extern void radeon_ttm_placement_from_domain(struct radeon_bo *rbo, u32 domain);
2863 : extern bool radeon_ttm_bo_is_radeon_bo(struct ttm_buffer_object *bo);
2864 : extern int radeon_ttm_tt_set_userptr(struct ttm_tt *ttm, uint64_t addr,
2865 : uint32_t flags);
2866 : extern bool radeon_ttm_tt_has_userptr(struct ttm_tt *ttm);
2867 : extern bool radeon_ttm_tt_is_readonly(struct ttm_tt *ttm);
2868 : extern void radeon_vram_location(struct radeon_device *rdev, struct radeon_mc *mc, u64 base);
2869 : extern void radeon_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc);
2870 : extern int radeon_resume_kms(struct drm_device *dev, bool resume, bool fbcon);
2871 : extern int radeon_suspend_kms(struct drm_device *dev, bool suspend, bool fbcon);
2872 : extern void radeon_ttm_set_active_vram_size(struct radeon_device *rdev, u64 size);
2873 : extern void radeon_program_register_sequence(struct radeon_device *rdev,
2874 : const u32 *registers,
2875 : const u32 array_size);
2876 :
2877 : /*
2878 : * vm
2879 : */
2880 : int radeon_vm_manager_init(struct radeon_device *rdev);
2881 : void radeon_vm_manager_fini(struct radeon_device *rdev);
2882 : int radeon_vm_init(struct radeon_device *rdev, struct radeon_vm *vm);
2883 : void radeon_vm_fini(struct radeon_device *rdev, struct radeon_vm *vm);
2884 : struct radeon_bo_list *radeon_vm_get_bos(struct radeon_device *rdev,
2885 : struct radeon_vm *vm,
2886 : struct list_head *head);
2887 : struct radeon_fence *radeon_vm_grab_id(struct radeon_device *rdev,
2888 : struct radeon_vm *vm, int ring);
2889 : void radeon_vm_flush(struct radeon_device *rdev,
2890 : struct radeon_vm *vm,
2891 : int ring, struct radeon_fence *fence);
2892 : void radeon_vm_fence(struct radeon_device *rdev,
2893 : struct radeon_vm *vm,
2894 : struct radeon_fence *fence);
2895 : uint64_t radeon_vm_map_gart(struct radeon_device *rdev, uint64_t addr);
2896 : int radeon_vm_update_page_directory(struct radeon_device *rdev,
2897 : struct radeon_vm *vm);
2898 : int radeon_vm_clear_freed(struct radeon_device *rdev,
2899 : struct radeon_vm *vm);
2900 : int radeon_vm_clear_invalids(struct radeon_device *rdev,
2901 : struct radeon_vm *vm);
2902 : int radeon_vm_bo_update(struct radeon_device *rdev,
2903 : struct radeon_bo_va *bo_va,
2904 : struct ttm_mem_reg *mem);
2905 : void radeon_vm_bo_invalidate(struct radeon_device *rdev,
2906 : struct radeon_bo *bo);
2907 : struct radeon_bo_va *radeon_vm_bo_find(struct radeon_vm *vm,
2908 : struct radeon_bo *bo);
2909 : struct radeon_bo_va *radeon_vm_bo_add(struct radeon_device *rdev,
2910 : struct radeon_vm *vm,
2911 : struct radeon_bo *bo);
2912 : int radeon_vm_bo_set_addr(struct radeon_device *rdev,
2913 : struct radeon_bo_va *bo_va,
2914 : uint64_t offset,
2915 : uint32_t flags);
2916 : void radeon_vm_bo_rmv(struct radeon_device *rdev,
2917 : struct radeon_bo_va *bo_va);
2918 :
2919 : /* audio */
2920 : void r600_audio_update_hdmi(struct work_struct *work);
2921 : struct r600_audio_pin *r600_audio_get_pin(struct radeon_device *rdev);
2922 : struct r600_audio_pin *dce6_audio_get_pin(struct radeon_device *rdev);
2923 : void r600_audio_enable(struct radeon_device *rdev,
2924 : struct r600_audio_pin *pin,
2925 : u8 enable_mask);
2926 : void dce6_audio_enable(struct radeon_device *rdev,
2927 : struct r600_audio_pin *pin,
2928 : u8 enable_mask);
2929 :
2930 : /*
2931 : * R600 vram scratch functions
2932 : */
2933 : int r600_vram_scratch_init(struct radeon_device *rdev);
2934 : void r600_vram_scratch_fini(struct radeon_device *rdev);
2935 :
2936 : /*
2937 : * r600 cs checking helper
2938 : */
2939 : unsigned r600_mip_minify(unsigned size, unsigned level);
2940 : bool r600_fmt_is_valid_color(u32 format);
2941 : bool r600_fmt_is_valid_texture(u32 format, enum radeon_family family);
2942 : int r600_fmt_get_blocksize(u32 format);
2943 : int r600_fmt_get_nblocksx(u32 format, u32 w);
2944 : int r600_fmt_get_nblocksy(u32 format, u32 h);
2945 :
2946 : /*
2947 : * r600 functions used by radeon_encoder.c
2948 : */
2949 : struct radeon_hdmi_acr {
2950 : u32 clock;
2951 :
2952 : int n_32khz;
2953 : int cts_32khz;
2954 :
2955 : int n_44_1khz;
2956 : int cts_44_1khz;
2957 :
2958 : int n_48khz;
2959 : int cts_48khz;
2960 :
2961 : };
2962 :
2963 : extern struct radeon_hdmi_acr r600_hdmi_acr(uint32_t clock);
2964 :
2965 : extern u32 r6xx_remap_render_backend(struct radeon_device *rdev,
2966 : u32 tiling_pipe_num,
2967 : u32 max_rb_num,
2968 : u32 total_max_rb_num,
2969 : u32 enabled_rb_mask);
2970 :
2971 : /*
2972 : * evergreen functions used by radeon_encoder.c
2973 : */
2974 :
2975 : extern int ni_init_microcode(struct radeon_device *rdev);
2976 : extern int ni_mc_load_microcode(struct radeon_device *rdev);
2977 :
2978 : /* radeon_acpi.c */
2979 : #if defined(CONFIG_ACPI)
2980 : extern int radeon_acpi_init(struct radeon_device *rdev);
2981 : extern void radeon_acpi_fini(struct radeon_device *rdev);
2982 : extern bool radeon_acpi_is_pcie_performance_request_supported(struct radeon_device *rdev);
2983 : extern int radeon_acpi_pcie_performance_request(struct radeon_device *rdev,
2984 : u8 perf_req, bool advertise);
2985 : extern int radeon_acpi_pcie_notify_device_ready(struct radeon_device *rdev);
2986 : #else
2987 0 : static inline int radeon_acpi_init(struct radeon_device *rdev) { return 0; }
2988 0 : static inline void radeon_acpi_fini(struct radeon_device *rdev) { }
2989 : #endif
2990 :
2991 : int radeon_cs_packet_parse(struct radeon_cs_parser *p,
2992 : struct radeon_cs_packet *pkt,
2993 : unsigned idx);
2994 : bool radeon_cs_packet_next_is_pkt3_nop(struct radeon_cs_parser *p);
2995 : void radeon_cs_dump_packet(struct radeon_cs_parser *p,
2996 : struct radeon_cs_packet *pkt);
2997 : int radeon_cs_packet_next_reloc(struct radeon_cs_parser *p,
2998 : struct radeon_bo_list **cs_reloc,
2999 : int nomm);
3000 : int r600_cs_common_vline_parse(struct radeon_cs_parser *p,
3001 : uint32_t *vline_start_end,
3002 : uint32_t *vline_status);
3003 :
3004 : #include "radeon_object.h"
3005 :
3006 : #endif
|