Rev 3764 | Rev 5179 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3764 | Rev 5078 | ||
---|---|---|---|
Line 62... | Line 62... | ||
62 | 62 | ||
63 | #include |
63 | #include |
64 | #include |
64 | #include |
65 | #include |
65 | #include |
- | 66 | #include |
|
66 | #include |
67 | #include |
Line 67... | Line 68... | ||
67 | #include |
68 | #include |
68 | 69 | ||
69 | #include |
70 | #include |
70 | #include |
71 | #include |
- | 72 | #include |
|
Line 71... | Line 73... | ||
71 | #include |
73 | //#include |
72 | #include |
74 | #include |
Line 73... | Line 75... | ||
73 | 75 | ||
Line 101... | Line 103... | ||
101 | extern int radeon_hw_i2c; |
103 | extern int radeon_hw_i2c; |
102 | extern int radeon_pcie_gen2; |
104 | extern int radeon_pcie_gen2; |
103 | extern int radeon_msi; |
105 | extern int radeon_msi; |
104 | extern int radeon_lockup_timeout; |
106 | extern int radeon_lockup_timeout; |
105 | extern int radeon_fastfb; |
107 | extern int radeon_fastfb; |
- | 108 | extern int radeon_dpm; |
|
- | 109 | extern int radeon_aspm; |
|
- | 110 | extern int radeon_runtime_pm; |
|
- | 111 | extern int radeon_hard_reset; |
|
- | 112 | extern int radeon_vm_size; |
|
- | 113 | extern int radeon_vm_block_size; |
|
- | 114 | extern int radeon_deep_color; |
|
- | 115 | extern int radeon_use_pflipirq; |
|
- | 116 | extern int radeon_bapm; |
|
Line 106... | Line 117... | ||
106 | 117 | ||
107 | 118 | ||
108 | typedef struct pm_message { |
119 | typedef struct pm_message { |
Line 140... | Line 151... | ||
140 | #define RADEON_IB_POOL_SIZE 16 |
151 | #define RADEON_IB_POOL_SIZE 16 |
141 | #define RADEON_DEBUGFS_MAX_COMPONENTS 32 |
152 | #define RADEON_DEBUGFS_MAX_COMPONENTS 32 |
142 | #define RADEONFB_CONN_LIMIT 4 |
153 | #define RADEONFB_CONN_LIMIT 4 |
143 | #define RADEON_BIOS_NUM_SCRATCH 8 |
154 | #define RADEON_BIOS_NUM_SCRATCH 8 |
Line 144... | Line -... | ||
144 | - | ||
145 | /* max number of rings */ |
- | |
146 | #define RADEON_NUM_RINGS 6 |
- | |
147 | 155 | ||
148 | /* fence seq are set to this number when signaled */ |
156 | /* fence seq are set to this number when signaled */ |
Line 149... | Line 157... | ||
149 | #define RADEON_FENCE_SIGNALED_SEQ 0LL |
157 | #define RADEON_FENCE_SIGNALED_SEQ 0LL |
150 | 158 | ||
Line 162... | Line 170... | ||
162 | #define CAYMAN_RING_TYPE_DMA1_INDEX 4 |
170 | #define CAYMAN_RING_TYPE_DMA1_INDEX 4 |
Line 163... | Line 171... | ||
163 | 171 | ||
164 | /* R600+ */ |
172 | /* R600+ */ |
Line -... | Line 173... | ||
- | 173 | #define R600_RING_TYPE_UVD_INDEX 5 |
|
- | 174 | ||
- | 175 | /* TN+ */ |
|
- | 176 | #define TN_RING_TYPE_VCE1_INDEX 6 |
|
- | 177 | #define TN_RING_TYPE_VCE2_INDEX 7 |
|
- | 178 | ||
- | 179 | /* max number of rings */ |
|
- | 180 | #define RADEON_NUM_RINGS 8 |
|
- | 181 | ||
- | 182 | /* number of hw syncs before falling back on blocking */ |
|
- | 183 | #define RADEON_NUM_SYNCS 4 |
|
- | 184 | ||
- | 185 | /* number of hw syncs before falling back on blocking */ |
|
165 | #define R600_RING_TYPE_UVD_INDEX 5 |
186 | #define RADEON_NUM_SYNCS 4 |
166 | 187 | ||
167 | /* hardcode those limit for now */ |
188 | /* hardcode those limit for now */ |
168 | #define RADEON_VA_IB_OFFSET (1 << 20) |
189 | #define RADEON_VA_IB_OFFSET (1 << 20) |
Line -... | Line 190... | ||
- | 190 | #define RADEON_VA_RESERVED_SIZE (8 << 20) |
|
- | 191 | #define RADEON_IB_VM_MAX_SIZE (64 << 10) |
|
- | 192 | ||
169 | #define RADEON_VA_RESERVED_SIZE (8 << 20) |
193 | /* hard reset data */ |
170 | #define RADEON_IB_VM_MAX_SIZE (64 << 10) |
194 | #define RADEON_ASIC_RESET_DATA 0x39d5e86b |
171 | 195 | ||
172 | /* reset flags */ |
196 | /* reset flags */ |
173 | #define RADEON_RESET_GFX (1 << 0) |
197 | #define RADEON_RESET_GFX (1 << 0) |
Line 181... | Line 205... | ||
181 | #define RADEON_RESET_IH (1 << 8) |
205 | #define RADEON_RESET_IH (1 << 8) |
182 | #define RADEON_RESET_VMC (1 << 9) |
206 | #define RADEON_RESET_VMC (1 << 9) |
183 | #define RADEON_RESET_MC (1 << 10) |
207 | #define RADEON_RESET_MC (1 << 10) |
184 | #define RADEON_RESET_DISPLAY (1 << 11) |
208 | #define RADEON_RESET_DISPLAY (1 << 11) |
Line -... | Line 209... | ||
- | 209 | ||
- | 210 | /* CG block flags */ |
|
- | 211 | #define RADEON_CG_BLOCK_GFX (1 << 0) |
|
- | 212 | #define RADEON_CG_BLOCK_MC (1 << 1) |
|
- | 213 | #define RADEON_CG_BLOCK_SDMA (1 << 2) |
|
- | 214 | #define RADEON_CG_BLOCK_UVD (1 << 3) |
|
- | 215 | #define RADEON_CG_BLOCK_VCE (1 << 4) |
|
- | 216 | #define RADEON_CG_BLOCK_HDP (1 << 5) |
|
- | 217 | #define RADEON_CG_BLOCK_BIF (1 << 6) |
|
- | 218 | ||
- | 219 | /* CG flags */ |
|
- | 220 | #define RADEON_CG_SUPPORT_GFX_MGCG (1 << 0) |
|
- | 221 | #define RADEON_CG_SUPPORT_GFX_MGLS (1 << 1) |
|
- | 222 | #define RADEON_CG_SUPPORT_GFX_CGCG (1 << 2) |
|
- | 223 | #define RADEON_CG_SUPPORT_GFX_CGLS (1 << 3) |
|
- | 224 | #define RADEON_CG_SUPPORT_GFX_CGTS (1 << 4) |
|
- | 225 | #define RADEON_CG_SUPPORT_GFX_CGTS_LS (1 << 5) |
|
- | 226 | #define RADEON_CG_SUPPORT_GFX_CP_LS (1 << 6) |
|
- | 227 | #define RADEON_CG_SUPPORT_GFX_RLC_LS (1 << 7) |
|
- | 228 | #define RADEON_CG_SUPPORT_MC_LS (1 << 8) |
|
- | 229 | #define RADEON_CG_SUPPORT_MC_MGCG (1 << 9) |
|
- | 230 | #define RADEON_CG_SUPPORT_SDMA_LS (1 << 10) |
|
- | 231 | #define RADEON_CG_SUPPORT_SDMA_MGCG (1 << 11) |
|
- | 232 | #define RADEON_CG_SUPPORT_BIF_LS (1 << 12) |
|
- | 233 | #define RADEON_CG_SUPPORT_UVD_MGCG (1 << 13) |
|
- | 234 | #define RADEON_CG_SUPPORT_VCE_MGCG (1 << 14) |
|
- | 235 | #define RADEON_CG_SUPPORT_HDP_LS (1 << 15) |
|
- | 236 | #define RADEON_CG_SUPPORT_HDP_MGCG (1 << 16) |
|
- | 237 | ||
- | 238 | /* PG flags */ |
|
- | 239 | #define RADEON_PG_SUPPORT_GFX_PG (1 << 0) |
|
- | 240 | #define RADEON_PG_SUPPORT_GFX_SMG (1 << 1) |
|
- | 241 | #define RADEON_PG_SUPPORT_GFX_DMG (1 << 2) |
|
- | 242 | #define RADEON_PG_SUPPORT_UVD (1 << 3) |
|
- | 243 | #define RADEON_PG_SUPPORT_VCE (1 << 4) |
|
- | 244 | #define RADEON_PG_SUPPORT_CP (1 << 5) |
|
- | 245 | #define RADEON_PG_SUPPORT_GDS (1 << 6) |
|
- | 246 | #define RADEON_PG_SUPPORT_RLC_SMU_HS (1 << 7) |
|
- | 247 | #define RADEON_PG_SUPPORT_SDMA (1 << 8) |
|
- | 248 | #define RADEON_PG_SUPPORT_ACP (1 << 9) |
|
- | 249 | #define RADEON_PG_SUPPORT_SAMU (1 << 10) |
|
- | 250 | ||
- | 251 | /* max cursor sizes (in pixels) */ |
|
- | 252 | #define CURSOR_WIDTH 64 |
|
- | 253 | #define CURSOR_HEIGHT 64 |
|
- | 254 | ||
- | 255 | #define CIK_CURSOR_WIDTH 128 |
|
- | 256 | #define CIK_CURSOR_HEIGHT 128 |
|
185 | 257 | ||
186 | /* |
258 | /* |
187 | * Errata workarounds. |
259 | * Errata workarounds. |
188 | */ |
260 | */ |
189 | enum radeon_pll_errata { |
261 | enum radeon_pll_errata { |
Line 223... | Line 295... | ||
223 | struct radeon_pll mpll; |
295 | struct radeon_pll mpll; |
224 | /* 10 Khz units */ |
296 | /* 10 Khz units */ |
225 | uint32_t default_mclk; |
297 | uint32_t default_mclk; |
226 | uint32_t default_sclk; |
298 | uint32_t default_sclk; |
227 | uint32_t default_dispclk; |
299 | uint32_t default_dispclk; |
- | 300 | uint32_t current_dispclk; |
|
228 | uint32_t dp_extclk; |
301 | uint32_t dp_extclk; |
229 | uint32_t max_pixel_clock; |
302 | uint32_t max_pixel_clock; |
230 | }; |
303 | }; |
Line 231... | Line 304... | ||
231 | 304 | ||
232 | /* |
305 | /* |
233 | * Power management |
306 | * Power management |
234 | */ |
307 | */ |
- | 308 | int radeon_pm_init(struct radeon_device *rdev); |
|
235 | int radeon_pm_init(struct radeon_device *rdev); |
309 | int radeon_pm_late_init(struct radeon_device *rdev); |
236 | void radeon_pm_fini(struct radeon_device *rdev); |
310 | void radeon_pm_fini(struct radeon_device *rdev); |
237 | void radeon_pm_compute_clocks(struct radeon_device *rdev); |
311 | void radeon_pm_compute_clocks(struct radeon_device *rdev); |
238 | void radeon_pm_suspend(struct radeon_device *rdev); |
312 | void radeon_pm_suspend(struct radeon_device *rdev); |
239 | void radeon_pm_resume(struct radeon_device *rdev); |
313 | void radeon_pm_resume(struct radeon_device *rdev); |
Line 242... | Line 316... | ||
242 | int radeon_atom_get_clock_dividers(struct radeon_device *rdev, |
316 | int radeon_atom_get_clock_dividers(struct radeon_device *rdev, |
243 | u8 clock_type, |
317 | u8 clock_type, |
244 | u32 clock, |
318 | u32 clock, |
245 | bool strobe_mode, |
319 | bool strobe_mode, |
246 | struct atom_clock_dividers *dividers); |
320 | struct atom_clock_dividers *dividers); |
- | 321 | int radeon_atom_get_memory_pll_dividers(struct radeon_device *rdev, |
|
- | 322 | u32 clock, |
|
- | 323 | bool strobe_mode, |
|
- | 324 | struct atom_mpll_param *mpll_param); |
|
247 | void radeon_atom_set_voltage(struct radeon_device *rdev, u16 voltage_level, u8 voltage_type); |
325 | void radeon_atom_set_voltage(struct radeon_device *rdev, u16 voltage_level, u8 voltage_type); |
- | 326 | int radeon_atom_get_voltage_gpio_settings(struct radeon_device *rdev, |
|
- | 327 | u16 voltage_level, u8 voltage_type, |
|
- | 328 | u32 *gpio_value, u32 *gpio_mask); |
|
- | 329 | void radeon_atom_set_engine_dram_timings(struct radeon_device *rdev, |
|
- | 330 | u32 eng_clock, u32 mem_clock); |
|
- | 331 | int radeon_atom_get_voltage_step(struct radeon_device *rdev, |
|
- | 332 | u8 voltage_type, u16 *voltage_step); |
|
- | 333 | int radeon_atom_get_max_vddc(struct radeon_device *rdev, u8 voltage_type, |
|
- | 334 | u16 voltage_id, u16 *voltage); |
|
- | 335 | int radeon_atom_get_leakage_vddc_based_on_leakage_idx(struct radeon_device *rdev, |
|
- | 336 | u16 *voltage, |
|
- | 337 | u16 leakage_idx); |
|
- | 338 | int radeon_atom_get_leakage_id_from_vbios(struct radeon_device *rdev, |
|
- | 339 | u16 *leakage_id); |
|
- | 340 | int radeon_atom_get_leakage_vddc_based_on_leakage_params(struct radeon_device *rdev, |
|
- | 341 | u16 *vddc, u16 *vddci, |
|
- | 342 | u16 virtual_voltage_id, |
|
- | 343 | u16 vbios_voltage_id); |
|
- | 344 | int radeon_atom_get_voltage_evv(struct radeon_device *rdev, |
|
- | 345 | u16 virtual_voltage_id, |
|
- | 346 | u16 *voltage); |
|
- | 347 | int radeon_atom_round_to_true_voltage(struct radeon_device *rdev, |
|
- | 348 | u8 voltage_type, |
|
- | 349 | u16 nominal_voltage, |
|
- | 350 | u16 *true_voltage); |
|
- | 351 | int radeon_atom_get_min_voltage(struct radeon_device *rdev, |
|
- | 352 | u8 voltage_type, u16 *min_voltage); |
|
- | 353 | int radeon_atom_get_max_voltage(struct radeon_device *rdev, |
|
- | 354 | u8 voltage_type, u16 *max_voltage); |
|
- | 355 | int radeon_atom_get_voltage_table(struct radeon_device *rdev, |
|
- | 356 | u8 voltage_type, u8 voltage_mode, |
|
- | 357 | struct atom_voltage_table *voltage_table); |
|
- | 358 | bool radeon_atom_is_voltage_gpio(struct radeon_device *rdev, |
|
- | 359 | u8 voltage_type, u8 voltage_mode); |
|
- | 360 | int radeon_atom_get_svi2_info(struct radeon_device *rdev, |
|
- | 361 | u8 voltage_type, |
|
- | 362 | u8 *svd_gpio_id, u8 *svc_gpio_id); |
|
- | 363 | void radeon_atom_update_memory_dll(struct radeon_device *rdev, |
|
- | 364 | u32 mem_clock); |
|
- | 365 | void radeon_atom_set_ac_timing(struct radeon_device *rdev, |
|
- | 366 | u32 mem_clock); |
|
- | 367 | int radeon_atom_init_mc_reg_table(struct radeon_device *rdev, |
|
- | 368 | u8 module_index, |
|
- | 369 | struct atom_mc_reg_table *reg_table); |
|
- | 370 | int radeon_atom_get_memory_info(struct radeon_device *rdev, |
|
- | 371 | u8 module_index, struct atom_memory_info *mem_info); |
|
- | 372 | int radeon_atom_get_mclk_range_table(struct radeon_device *rdev, |
|
- | 373 | bool gddr5, u8 module_index, |
|
- | 374 | struct atom_memory_clock_range_table *mclk_range_table); |
|
- | 375 | int radeon_atom_get_max_vddc(struct radeon_device *rdev, u8 voltage_type, |
|
- | 376 | u16 voltage_id, u16 *voltage); |
|
248 | void rs690_pm_info(struct radeon_device *rdev); |
377 | void rs690_pm_info(struct radeon_device *rdev); |
249 | extern int rv6xx_get_temp(struct radeon_device *rdev); |
- | |
250 | extern int rv770_get_temp(struct radeon_device *rdev); |
- | |
251 | extern int evergreen_get_temp(struct radeon_device *rdev); |
- | |
252 | extern int sumo_get_temp(struct radeon_device *rdev); |
- | |
253 | extern int si_get_temp(struct radeon_device *rdev); |
- | |
254 | extern void evergreen_tiling_fields(unsigned tiling_flags, unsigned *bankw, |
378 | extern void evergreen_tiling_fields(unsigned tiling_flags, unsigned *bankw, |
255 | unsigned *bankh, unsigned *mtaspect, |
379 | unsigned *bankh, unsigned *mtaspect, |
256 | unsigned *tile_split); |
380 | unsigned *tile_split); |
Line 257... | Line 381... | ||
257 | 381 | ||
Line 263... | Line 387... | ||
263 | uint64_t gpu_addr; |
387 | uint64_t gpu_addr; |
264 | volatile uint32_t *cpu_addr; |
388 | volatile uint32_t *cpu_addr; |
265 | /* sync_seq is protected by ring emission lock */ |
389 | /* sync_seq is protected by ring emission lock */ |
266 | uint64_t sync_seq[RADEON_NUM_RINGS]; |
390 | uint64_t sync_seq[RADEON_NUM_RINGS]; |
267 | atomic64_t last_seq; |
391 | atomic64_t last_seq; |
268 | unsigned long last_activity; |
- | |
269 | bool initialized; |
392 | bool initialized; |
270 | }; |
393 | }; |
Line 271... | Line 394... | ||
271 | 394 | ||
272 | struct radeon_fence { |
395 | struct radeon_fence { |
Line 284... | Line 407... | ||
284 | void radeon_fence_driver_force_completion(struct radeon_device *rdev); |
407 | void radeon_fence_driver_force_completion(struct radeon_device *rdev); |
285 | int radeon_fence_emit(struct radeon_device *rdev, struct radeon_fence **fence, int ring); |
408 | int radeon_fence_emit(struct radeon_device *rdev, struct radeon_fence **fence, int ring); |
286 | void radeon_fence_process(struct radeon_device *rdev, int ring); |
409 | void radeon_fence_process(struct radeon_device *rdev, int ring); |
287 | bool radeon_fence_signaled(struct radeon_fence *fence); |
410 | bool radeon_fence_signaled(struct radeon_fence *fence); |
288 | int radeon_fence_wait(struct radeon_fence *fence, bool interruptible); |
411 | int radeon_fence_wait(struct radeon_fence *fence, bool interruptible); |
289 | int radeon_fence_wait_next_locked(struct radeon_device *rdev, int ring); |
412 | int radeon_fence_wait_next(struct radeon_device *rdev, int ring); |
290 | int radeon_fence_wait_empty_locked(struct radeon_device *rdev, int ring); |
413 | int radeon_fence_wait_empty(struct radeon_device *rdev, int ring); |
291 | int radeon_fence_wait_any(struct radeon_device *rdev, |
414 | int radeon_fence_wait_any(struct radeon_device *rdev, |
292 | struct radeon_fence **fences, |
415 | struct radeon_fence **fences, |
293 | bool intr); |
416 | bool intr); |
294 | struct radeon_fence *radeon_fence_ref(struct radeon_fence *fence); |
417 | struct radeon_fence *radeon_fence_ref(struct radeon_fence *fence); |
295 | void radeon_fence_unref(struct radeon_fence **fence); |
418 | void radeon_fence_unref(struct radeon_fence **fence); |
Line 348... | Line 471... | ||
348 | struct ttm_bo_global_ref bo_global_ref; |
471 | struct ttm_bo_global_ref bo_global_ref; |
349 | struct drm_global_reference mem_global_ref; |
472 | struct drm_global_reference mem_global_ref; |
350 | struct ttm_bo_device bdev; |
473 | struct ttm_bo_device bdev; |
351 | bool mem_global_referenced; |
474 | bool mem_global_referenced; |
352 | bool initialized; |
475 | bool initialized; |
- | 476 | ||
- | 477 | #if defined(CONFIG_DEBUG_FS) |
|
- | 478 | struct dentry *vram; |
|
- | 479 | struct dentry *gtt; |
|
- | 480 | #endif |
|
353 | }; |
481 | }; |
Line 354... | Line 482... | ||
354 | 482 | ||
355 | /* bo virtual address in a specific vm */ |
483 | /* bo virtual address in a specific vm */ |
356 | struct radeon_bo_va { |
484 | struct radeon_bo_va { |
357 | /* protected by bo being reserved */ |
485 | /* protected by bo being reserved */ |
358 | struct list_head bo_list; |
- | |
359 | uint64_t soffset; |
- | |
360 | uint64_t eoffset; |
486 | struct list_head bo_list; |
361 | uint32_t flags; |
487 | uint32_t flags; |
362 | bool valid; |
488 | uint64_t addr; |
Line 363... | Line 489... | ||
363 | unsigned ref_count; |
489 | unsigned ref_count; |
- | 490 | ||
364 | 491 | /* protected by vm mutex */ |
|
Line 365... | Line 492... | ||
365 | /* protected by vm mutex */ |
492 | struct interval_tree_node it; |
366 | struct list_head vm_list; |
493 | struct list_head vm_status; |
367 | 494 | ||
368 | /* constant after initialization */ |
495 | /* constant after initialization */ |
Line 369... | Line 496... | ||
369 | struct radeon_vm *vm; |
496 | struct radeon_vm *vm; |
370 | struct radeon_bo *bo; |
497 | struct radeon_bo *bo; |
371 | }; |
498 | }; |
372 | 499 | ||
- | 500 | struct radeon_bo { |
|
373 | struct radeon_bo { |
501 | /* Protected by gem.mutex */ |
374 | /* Protected by gem.mutex */ |
- | |
375 | struct list_head list; |
502 | struct list_head list; |
376 | /* Protected by tbo.reserved */ |
503 | /* Protected by tbo.reserved */ |
377 | u32 placements[3]; |
504 | u32 initial_domain; |
- | 505 | u32 placements[3]; |
|
378 | u32 domain; |
506 | struct ttm_placement placement; |
379 | struct ttm_placement placement; |
507 | struct ttm_buffer_object tbo; |
380 | struct ttm_buffer_object tbo; |
- | |
381 | struct ttm_bo_kmap_obj kmap; |
- | |
382 | unsigned pin_count; |
508 | struct ttm_bo_kmap_obj kmap; |
383 | void *kptr; |
509 | u32 flags; |
384 | void *uptr; |
510 | unsigned pin_count; |
385 | u32 cpu_addr; |
511 | void *kptr; |
386 | u32 tiling_flags; |
512 | u32 tiling_flags; |
Line 392... | Line 518... | ||
392 | struct list_head va; |
518 | struct list_head va; |
393 | /* Constant after initialization */ |
519 | /* Constant after initialization */ |
394 | struct radeon_device *rdev; |
520 | struct radeon_device *rdev; |
395 | struct drm_gem_object gem_base; |
521 | struct drm_gem_object gem_base; |
Line 396... | Line 522... | ||
396 | 522 | ||
397 | struct ttm_bo_kmap_obj dma_buf_vmap; |
523 | pid_t pid; |
398 | }; |
524 | }; |
Line 399... | Line -... | ||
399 | #define gem_to_radeon_bo(gobj) container_of((gobj), struct radeon_bo, gem_base) |
- | |
400 | - | ||
401 | struct radeon_bo_list { |
- | |
402 | struct radeon_bo *bo; |
- | |
403 | uint64_t gpu_offset; |
- | |
404 | unsigned rdomain; |
- | |
405 | unsigned wdomain; |
- | |
406 | u32 tiling_flags; |
- | |
407 | }; |
525 | #define gem_to_radeon_bo(gobj) container_of((gobj), struct radeon_bo, gem_base) |
Line 408... | Line 526... | ||
408 | 526 | ||
409 | int radeon_gem_debugfs_init(struct radeon_device *rdev); |
527 | int radeon_gem_debugfs_init(struct radeon_device *rdev); |
410 | 528 | ||
Line 439... | Line 557... | ||
439 | struct list_head olist; |
557 | struct list_head olist; |
440 | unsigned size; |
558 | unsigned size; |
441 | uint64_t gpu_addr; |
559 | uint64_t gpu_addr; |
442 | void *cpu_ptr; |
560 | void *cpu_ptr; |
443 | uint32_t domain; |
561 | uint32_t domain; |
- | 562 | uint32_t align; |
|
444 | }; |
563 | }; |
Line 445... | Line 564... | ||
445 | 564 | ||
Line 446... | Line 565... | ||
446 | struct radeon_sa_bo; |
565 | struct radeon_sa_bo; |
Line 463... | Line 582... | ||
463 | struct list_head objects; |
582 | struct list_head objects; |
464 | }; |
583 | }; |
Line 465... | Line 584... | ||
465 | 584 | ||
466 | int radeon_gem_init(struct radeon_device *rdev); |
585 | int radeon_gem_init(struct radeon_device *rdev); |
467 | void radeon_gem_fini(struct radeon_device *rdev); |
586 | void radeon_gem_fini(struct radeon_device *rdev); |
468 | int radeon_gem_object_create(struct radeon_device *rdev, int size, |
587 | int radeon_gem_object_create(struct radeon_device *rdev, unsigned long size, |
469 | int alignment, int initial_domain, |
588 | int alignment, int initial_domain, |
470 | bool discardable, bool kernel, |
589 | u32 flags, bool kernel, |
Line 471... | Line 590... | ||
471 | struct drm_gem_object **obj); |
590 | struct drm_gem_object **obj); |
472 | 591 | ||
473 | int radeon_mode_dumb_create(struct drm_file *file_priv, |
592 | int radeon_mode_dumb_create(struct drm_file *file_priv, |
474 | struct drm_device *dev, |
593 | struct drm_device *dev, |
475 | struct drm_mode_create_dumb *args); |
594 | struct drm_mode_create_dumb *args); |
476 | int radeon_mode_dumb_mmap(struct drm_file *filp, |
595 | int radeon_mode_dumb_mmap(struct drm_file *filp, |
477 | struct drm_device *dev, |
- | |
478 | uint32_t handle, uint64_t *offset_p); |
- | |
479 | int radeon_mode_dumb_destroy(struct drm_file *file_priv, |
- | |
Line 480... | Line 596... | ||
480 | struct drm_device *dev, |
596 | struct drm_device *dev, |
481 | uint32_t handle); |
597 | uint32_t handle, uint64_t *offset_p); |
482 | 598 | ||
483 | /* |
- | |
484 | * Semaphores. |
599 | /* |
485 | */ |
600 | * Semaphores. |
486 | /* everything here is constant */ |
601 | */ |
487 | struct radeon_semaphore { |
602 | struct radeon_semaphore { |
- | 603 | struct radeon_sa_bo *sa_bo; |
|
488 | struct radeon_sa_bo *sa_bo; |
604 | signed waiters; |
Line 489... | Line 605... | ||
489 | signed waiters; |
605 | uint64_t gpu_addr; |
490 | uint64_t gpu_addr; |
606 | struct radeon_fence *sync_to[RADEON_NUM_RINGS]; |
491 | }; |
607 | }; |
492 | 608 | ||
493 | int radeon_semaphore_create(struct radeon_device *rdev, |
609 | int radeon_semaphore_create(struct radeon_device *rdev, |
494 | struct radeon_semaphore **semaphore); |
610 | struct radeon_semaphore **semaphore); |
- | 611 | bool radeon_semaphore_emit_signal(struct radeon_device *rdev, int ring, |
|
- | 612 | struct radeon_semaphore *semaphore); |
|
495 | void radeon_semaphore_emit_signal(struct radeon_device *rdev, int ring, |
613 | bool radeon_semaphore_emit_wait(struct radeon_device *rdev, int ring, |
496 | struct radeon_semaphore *semaphore); |
614 | struct radeon_semaphore *semaphore); |
497 | void radeon_semaphore_emit_wait(struct radeon_device *rdev, int ring, |
615 | void radeon_semaphore_sync_to(struct radeon_semaphore *semaphore, |
498 | struct radeon_semaphore *semaphore); |
616 | struct radeon_fence *fence); |
499 | int radeon_semaphore_sync_rings(struct radeon_device *rdev, |
617 | int radeon_semaphore_sync_rings(struct radeon_device *rdev, |
500 | struct radeon_semaphore *semaphore, |
618 | struct radeon_semaphore *semaphore, |
Line 501... | Line 619... | ||
501 | int signaler, int waiter); |
619 | int waiting_ring); |
Line 511... | Line 629... | ||
511 | #define RADEON_GPU_PAGE_SIZE 4096 |
629 | #define RADEON_GPU_PAGE_SIZE 4096 |
512 | #define RADEON_GPU_PAGE_MASK (RADEON_GPU_PAGE_SIZE - 1) |
630 | #define RADEON_GPU_PAGE_MASK (RADEON_GPU_PAGE_SIZE - 1) |
513 | #define RADEON_GPU_PAGE_SHIFT 12 |
631 | #define RADEON_GPU_PAGE_SHIFT 12 |
514 | #define RADEON_GPU_PAGE_ALIGN(a) (((a) + RADEON_GPU_PAGE_MASK) & ~RADEON_GPU_PAGE_MASK) |
632 | #define RADEON_GPU_PAGE_ALIGN(a) (((a) + RADEON_GPU_PAGE_MASK) & ~RADEON_GPU_PAGE_MASK) |
Line -... | Line 633... | ||
- | 633 | ||
- | 634 | #define RADEON_GART_PAGE_DUMMY 0 |
|
- | 635 | #define RADEON_GART_PAGE_VALID (1 << 0) |
|
- | 636 | #define RADEON_GART_PAGE_READ (1 << 1) |
|
- | 637 | #define RADEON_GART_PAGE_WRITE (1 << 2) |
|
- | 638 | #define RADEON_GART_PAGE_SNOOP (1 << 3) |
|
515 | 639 | ||
516 | struct radeon_gart { |
640 | struct radeon_gart { |
517 | dma_addr_t table_addr; |
641 | dma_addr_t table_addr; |
518 | struct radeon_bo *robj; |
642 | struct radeon_bo *robj; |
519 | void *ptr; |
643 | void *ptr; |
Line 534... | Line 658... | ||
534 | int radeon_gart_init(struct radeon_device *rdev); |
658 | int radeon_gart_init(struct radeon_device *rdev); |
535 | void radeon_gart_fini(struct radeon_device *rdev); |
659 | void radeon_gart_fini(struct radeon_device *rdev); |
536 | void radeon_gart_unbind(struct radeon_device *rdev, unsigned offset, |
660 | void radeon_gart_unbind(struct radeon_device *rdev, unsigned offset, |
537 | int pages); |
661 | int pages); |
538 | int radeon_gart_bind(struct radeon_device *rdev, unsigned offset, |
662 | int radeon_gart_bind(struct radeon_device *rdev, unsigned offset, |
539 | int pages, u32 *pagelist, |
663 | int pages, struct page **pagelist, |
540 | dma_addr_t *dma_addr); |
664 | dma_addr_t *dma_addr, uint32_t flags); |
541 | void radeon_gart_restore(struct radeon_device *rdev); |
- | |
Line 542... | Line 665... | ||
542 | 665 | ||
543 | 666 | ||
544 | /* |
667 | /* |
Line 580... | Line 703... | ||
580 | }; |
703 | }; |
Line 581... | Line 704... | ||
581 | 704 | ||
582 | int radeon_scratch_get(struct radeon_device *rdev, uint32_t *reg); |
705 | int radeon_scratch_get(struct radeon_device *rdev, uint32_t *reg); |
Line -... | Line 706... | ||
- | 706 | void radeon_scratch_free(struct radeon_device *rdev, uint32_t reg); |
|
- | 707 | ||
- | 708 | /* |
|
- | 709 | * GPU doorbell structures, functions & helpers |
|
- | 710 | */ |
|
- | 711 | #define RADEON_MAX_DOORBELLS 1024 /* Reserve at most 1024 doorbell slots for radeon-owned rings. */ |
|
- | 712 | ||
- | 713 | struct radeon_doorbell { |
|
- | 714 | /* doorbell mmio */ |
|
- | 715 | resource_size_t base; |
|
- | 716 | resource_size_t size; |
|
- | 717 | u32 __iomem *ptr; |
|
- | 718 | u32 num_doorbells; /* Number of doorbells actually reserved for radeon. */ |
|
- | 719 | unsigned long used[DIV_ROUND_UP(RADEON_MAX_DOORBELLS, BITS_PER_LONG)]; |
|
- | 720 | }; |
|
- | 721 | ||
Line 583... | Line 722... | ||
583 | void radeon_scratch_free(struct radeon_device *rdev, uint32_t reg); |
722 | int radeon_doorbell_get(struct radeon_device *rdev, u32 *page); |
584 | 723 | void radeon_doorbell_free(struct radeon_device *rdev, u32 doorbell); |
|
585 | 724 | ||
586 | /* |
725 | /* |
Line 620... | Line 759... | ||
620 | u32 afmt_status4; |
759 | u32 afmt_status4; |
621 | u32 afmt_status5; |
760 | u32 afmt_status5; |
622 | u32 afmt_status6; |
761 | u32 afmt_status6; |
623 | }; |
762 | }; |
Line -... | Line 763... | ||
- | 763 | ||
- | 764 | struct cik_irq_stat_regs { |
|
- | 765 | u32 disp_int; |
|
- | 766 | u32 disp_int_cont; |
|
- | 767 | u32 disp_int_cont2; |
|
- | 768 | u32 disp_int_cont3; |
|
- | 769 | u32 disp_int_cont4; |
|
- | 770 | u32 disp_int_cont5; |
|
- | 771 | u32 disp_int_cont6; |
|
- | 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 | }; |
|
624 | 779 | ||
625 | union radeon_irq_stat_regs { |
780 | union radeon_irq_stat_regs { |
626 | struct r500_irq_stat_regs r500; |
781 | struct r500_irq_stat_regs r500; |
627 | struct r600_irq_stat_regs r600; |
782 | struct r600_irq_stat_regs r600; |
- | 783 | struct evergreen_irq_stat_regs evergreen; |
|
628 | struct evergreen_irq_stat_regs evergreen; |
784 | struct cik_irq_stat_regs cik; |
Line 629... | Line -... | ||
629 | }; |
- | |
630 | - | ||
631 | #define RADEON_MAX_HPD_PINS 6 |
- | |
632 | #define RADEON_MAX_CRTCS 6 |
- | |
633 | #define RADEON_MAX_AFMT_BLOCKS 6 |
785 | }; |
634 | 786 | ||
635 | struct radeon_irq { |
787 | struct radeon_irq { |
636 | bool installed; |
788 | bool installed; |
637 | spinlock_t lock; |
789 | spinlock_t lock; |
638 | atomic_t ring_int[RADEON_NUM_RINGS]; |
790 | atomic_t ring_int[RADEON_NUM_RINGS]; |
639 | bool crtc_vblank_int[RADEON_MAX_CRTCS]; |
791 | bool crtc_vblank_int[RADEON_MAX_CRTCS]; |
640 | atomic_t pflip[RADEON_MAX_CRTCS]; |
792 | atomic_t pflip[RADEON_MAX_CRTCS]; |
641 | wait_queue_head_t vblank_queue; |
793 | wait_queue_head_t vblank_queue; |
642 | bool hpd[RADEON_MAX_HPD_PINS]; |
794 | bool hpd[RADEON_MAX_HPD_PINS]; |
- | 795 | bool afmt[RADEON_MAX_AFMT_BLOCKS]; |
|
643 | bool afmt[RADEON_MAX_AFMT_BLOCKS]; |
796 | union radeon_irq_stat_regs stat_regs; |
Line 644... | Line 797... | ||
644 | union radeon_irq_stat_regs stat_regs; |
797 | bool dpm_thermal; |
645 | }; |
798 | }; |
646 | 799 | ||
Line 666... | Line 819... | ||
666 | uint32_t *ptr; |
819 | uint32_t *ptr; |
667 | int ring; |
820 | int ring; |
668 | struct radeon_fence *fence; |
821 | struct radeon_fence *fence; |
669 | struct radeon_vm *vm; |
822 | struct radeon_vm *vm; |
670 | bool is_const_ib; |
823 | bool is_const_ib; |
671 | struct radeon_fence *sync_to[RADEON_NUM_RINGS]; |
- | |
672 | struct radeon_semaphore *semaphore; |
824 | struct radeon_semaphore *semaphore; |
673 | }; |
825 | }; |
Line 674... | Line 826... | ||
674 | 826 | ||
675 | struct radeon_ring { |
827 | struct radeon_ring { |
676 | struct radeon_bo *ring_obj; |
828 | struct radeon_bo *ring_obj; |
677 | volatile uint32_t *ring; |
- | |
678 | unsigned rptr; |
829 | volatile uint32_t *ring; |
679 | unsigned rptr_offs; |
- | |
680 | unsigned rptr_reg; |
830 | unsigned rptr_offs; |
681 | unsigned rptr_save_reg; |
831 | unsigned rptr_save_reg; |
682 | u64 next_rptr_gpu_addr; |
832 | u64 next_rptr_gpu_addr; |
683 | volatile u32 *next_rptr_cpu_addr; |
833 | volatile u32 *next_rptr_cpu_addr; |
684 | unsigned wptr; |
834 | unsigned wptr; |
685 | unsigned wptr_old; |
- | |
686 | unsigned wptr_reg; |
835 | unsigned wptr_old; |
687 | unsigned ring_size; |
836 | unsigned ring_size; |
688 | unsigned ring_free_dw; |
837 | unsigned ring_free_dw; |
689 | int count_dw; |
838 | int count_dw; |
690 | unsigned long last_activity; |
839 | atomic_t last_rptr; |
691 | unsigned last_rptr; |
840 | atomic64_t last_activity; |
692 | uint64_t gpu_addr; |
841 | uint64_t gpu_addr; |
693 | uint32_t align_mask; |
842 | uint32_t align_mask; |
694 | uint32_t ptr_mask; |
843 | uint32_t ptr_mask; |
695 | bool ready; |
- | |
696 | u32 ptr_reg_shift; |
- | |
697 | u32 ptr_reg_mask; |
844 | bool ready; |
698 | u32 nop; |
845 | u32 nop; |
699 | u32 idx; |
846 | u32 idx; |
700 | u64 last_semaphore_signal_addr; |
847 | u64 last_semaphore_signal_addr; |
- | 848 | u64 last_semaphore_wait_addr; |
|
- | 849 | /* for CIK queues */ |
|
- | 850 | u32 me; |
|
- | 851 | u32 pipe; |
|
- | 852 | u32 queue; |
|
- | 853 | struct radeon_bo *mqd_obj; |
|
- | 854 | u32 doorbell_index; |
|
- | 855 | unsigned wptr_offs; |
|
- | 856 | }; |
|
- | 857 | ||
- | 858 | struct radeon_mec { |
|
- | 859 | struct radeon_bo *hpd_eop_obj; |
|
- | 860 | u64 hpd_eop_gpu_addr; |
|
- | 861 | u32 num_pipe; |
|
- | 862 | u32 num_mec; |
|
701 | u64 last_semaphore_wait_addr; |
863 | u32 num_queue; |
Line 702... | Line 864... | ||
702 | }; |
864 | }; |
703 | 865 | ||
704 | /* |
866 | /* |
Line 705... | Line 867... | ||
705 | * VM |
867 | * VM |
706 | */ |
868 | */ |
Line 707... | Line -... | ||
707 | - | ||
708 | /* maximum number of VMIDs */ |
- | |
709 | #define RADEON_NUM_VM 16 |
- | |
710 | - | ||
711 | /* defines number of bits in page table versus page directory, |
- | |
712 | * a page is 4KB so we have 12 bits offset, 9 bits in the page |
869 | |
713 | * table and the remaining 19 bits are in the page directory */ |
870 | /* maximum number of VMIDs */ |
- | 871 | #define RADEON_NUM_VM 16 |
|
- | 872 | ||
- | 873 | /* number of entries in page table */ |
|
- | 874 | #define RADEON_VM_PTE_COUNT (1 << radeon_vm_block_size) |
|
- | 875 | ||
- | 876 | /* PTBs (Page Table Blocks) need to be aligned to 32K */ |
|
- | 877 | #define RADEON_VM_PTB_ALIGN_SIZE 32768 |
|
- | 878 | #define RADEON_VM_PTB_ALIGN_MASK (RADEON_VM_PTB_ALIGN_SIZE - 1) |
|
- | 879 | #define RADEON_VM_PTB_ALIGN(a) (((a) + RADEON_VM_PTB_ALIGN_MASK) & ~RADEON_VM_PTB_ALIGN_MASK) |
|
- | 880 | ||
- | 881 | #define R600_PTE_VALID (1 << 0) |
|
- | 882 | #define R600_PTE_SYSTEM (1 << 1) |
|
- | 883 | #define R600_PTE_SNOOPED (1 << 2) |
|
- | 884 | #define R600_PTE_READABLE (1 << 5) |
|
- | 885 | #define R600_PTE_WRITEABLE (1 << 6) |
|
- | 886 | ||
- | 887 | /* PTE (Page Table Entry) fragment field for different page sizes */ |
|
- | 888 | #define R600_PTE_FRAG_4KB (0 << 7) |
|
- | 889 | #define R600_PTE_FRAG_64KB (4 << 7) |
|
- | 890 | #define R600_PTE_FRAG_256KB (6 << 7) |
|
- | 891 | ||
- | 892 | /* flags needed to be set so we can copy directly from the GART table */ |
|
- | 893 | #define R600_PTE_GART_MASK ( R600_PTE_READABLE | R600_PTE_WRITEABLE | \ |
|
- | 894 | R600_PTE_SYSTEM | R600_PTE_VALID ) |
|
- | 895 | ||
Line 714... | Line 896... | ||
714 | #define RADEON_VM_BLOCK_SIZE 9 |
896 | struct radeon_vm_pt { |
715 | - | ||
716 | /* number of entries in page table */ |
897 | struct radeon_bo *bo; |
717 | #define RADEON_VM_PTE_COUNT (1 << RADEON_VM_BLOCK_SIZE) |
898 | uint64_t addr; |
Line -... | Line 899... | ||
- | 899 | }; |
|
- | 900 | ||
- | 901 | struct radeon_vm { |
|
- | 902 | struct rb_root va; |
|
- | 903 | unsigned id; |
|
- | 904 | ||
718 | 905 | /* BOs moved, but not yet updated in the PT */ |
|
719 | struct radeon_vm { |
906 | struct list_head invalidated; |
720 | struct list_head list; |
907 | |
- | 908 | /* BOs freed, but not yet updated in the PT */ |
|
Line 721... | Line 909... | ||
721 | struct list_head va; |
909 | struct list_head freed; |
722 | unsigned id; |
910 | |
- | 911 | /* contains the page directory */ |
|
- | 912 | struct radeon_bo *page_directory; |
|
Line 723... | Line 913... | ||
723 | 913 | uint64_t pd_gpu_addr; |
|
724 | /* contains the page directory */ |
914 | unsigned max_pde_used; |
725 | struct radeon_sa_bo *page_directory; |
915 | |
726 | uint64_t pd_gpu_addr; |
916 | /* array of page tables, one for each page directory entry */ |
727 | 917 | struct radeon_vm_pt *page_tables; |
|
- | 918 | ||
- | 919 | struct radeon_bo_va *ib_bo_va; |
|
728 | /* array of page tables, one for each page directory entry */ |
920 | |
Line 729... | Line 921... | ||
729 | struct radeon_sa_bo **page_tables; |
921 | struct mutex mutex; |
730 | - | ||
731 | struct mutex mutex; |
- | |
732 | /* last fence for cs using this vm */ |
922 | /* last fence for cs using this vm */ |
733 | struct radeon_fence *fence; |
- | |
734 | /* last flush or NULL if we still need to flush */ |
923 | struct radeon_fence *fence; |
735 | struct radeon_fence *last_flush; |
924 | /* last flush or NULL if we still need to flush */ |
736 | }; |
925 | struct radeon_fence *last_flush; |
737 | 926 | /* last use of vmid */ |
|
738 | struct radeon_vm_manager { |
927 | struct radeon_fence *last_id_use; |
739 | struct mutex lock; |
928 | }; |
740 | struct list_head lru_vm; |
929 | |
- | 930 | struct radeon_vm_manager { |
|
- | 931 | struct radeon_fence *active[RADEON_NUM_VM]; |
|
741 | struct radeon_fence *active[RADEON_NUM_VM]; |
932 | uint32_t max_pfn; |
Line 742... | Line 933... | ||
742 | struct radeon_sa_manager sa_manager; |
933 | /* number of VMIDs */ |
743 | uint32_t max_pfn; |
934 | unsigned nvm; |
744 | /* number of VMIDs */ |
935 | /* vram base address for page table entry */ |
Line 768... | Line 959... | ||
768 | uint32_t ptr_mask; |
959 | uint32_t ptr_mask; |
769 | atomic_t lock; |
960 | atomic_t lock; |
770 | bool enabled; |
961 | bool enabled; |
771 | }; |
962 | }; |
Line 772... | Line -... | ||
772 | - | ||
773 | struct r600_blit_cp_primitives { |
- | |
774 | void (*set_render_target)(struct radeon_device *rdev, int format, |
- | |
775 | int w, int h, u64 gpu_addr); |
- | |
776 | void (*cp_set_surface_sync)(struct radeon_device *rdev, |
- | |
777 | u32 sync_type, u32 size, |
- | |
778 | u64 mc_addr); |
- | |
779 | void (*set_shaders)(struct radeon_device *rdev); |
- | |
780 | void (*set_vtx_resource)(struct radeon_device *rdev, u64 gpu_addr); |
- | |
781 | void (*set_tex_resource)(struct radeon_device *rdev, |
- | |
782 | int format, int w, int h, int pitch, |
- | |
783 | u64 gpu_addr, u32 size); |
- | |
784 | void (*set_scissors)(struct radeon_device *rdev, int x1, int y1, |
- | |
785 | int x2, int y2); |
- | |
786 | void (*draw_auto)(struct radeon_device *rdev); |
- | |
787 | void (*set_default_state)(struct radeon_device *rdev); |
- | |
788 | }; |
- | |
789 | - | ||
790 | struct r600_blit { |
- | |
791 | struct radeon_bo *shader_obj; |
- | |
792 | struct r600_blit_cp_primitives primitives; |
- | |
793 | int max_dim; |
- | |
794 | int ring_size_common; |
- | |
795 | int ring_size_per_loop; |
- | |
796 | u64 shader_gpu_addr; |
- | |
797 | u32 vs_offset, ps_offset; |
- | |
798 | u32 state_offset; |
- | |
799 | u32 state_len; |
- | |
800 | }; |
- | |
801 | 963 | ||
802 | /* |
964 | /* |
803 | * SI RLC stuff |
965 | * RLC stuff |
- | 966 | */ |
|
- | 967 | #include "clearstate_defs.h" |
|
804 | */ |
968 | |
805 | struct si_rlc { |
969 | struct radeon_rlc { |
806 | /* for power gating */ |
970 | /* for power gating */ |
807 | struct radeon_bo *save_restore_obj; |
971 | struct radeon_bo *save_restore_obj; |
- | 972 | uint64_t save_restore_gpu_addr; |
|
- | 973 | volatile uint32_t *sr_ptr; |
|
- | 974 | const u32 *reg_list; |
|
808 | uint64_t save_restore_gpu_addr; |
975 | u32 reg_list_size; |
809 | /* for clear state */ |
976 | /* for clear state */ |
810 | struct radeon_bo *clear_state_obj; |
977 | struct radeon_bo *clear_state_obj; |
- | 978 | uint64_t clear_state_gpu_addr; |
|
- | 979 | volatile uint32_t *cs_ptr; |
|
- | 980 | const struct cs_section_def *cs_data; |
|
- | 981 | u32 clear_state_size; |
|
- | 982 | /* for cp tables */ |
|
- | 983 | struct radeon_bo *cp_table_obj; |
|
- | 984 | uint64_t cp_table_gpu_addr; |
|
- | 985 | volatile uint32_t *cp_table_ptr; |
|
811 | uint64_t clear_state_gpu_addr; |
986 | u32 cp_table_size; |
Line 812... | Line 987... | ||
812 | }; |
987 | }; |
813 | 988 | ||
814 | int radeon_ib_get(struct radeon_device *rdev, int ring, |
989 | int radeon_ib_get(struct radeon_device *rdev, int ring, |
815 | struct radeon_ib *ib, struct radeon_vm *vm, |
990 | struct radeon_ib *ib, struct radeon_vm *vm, |
816 | unsigned size); |
- | |
817 | void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib *ib); |
991 | unsigned size); |
818 | void radeon_ib_sync_to(struct radeon_ib *ib, struct radeon_fence *fence); |
992 | void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib *ib); |
819 | int radeon_ib_schedule(struct radeon_device *rdev, struct radeon_ib *ib, |
993 | int radeon_ib_schedule(struct radeon_device *rdev, struct radeon_ib *ib, |
820 | struct radeon_ib *const_ib); |
994 | struct radeon_ib *const_ib, bool hdp_flush); |
821 | int radeon_ib_pool_init(struct radeon_device *rdev); |
995 | int radeon_ib_pool_init(struct radeon_device *rdev); |
822 | void radeon_ib_pool_fini(struct radeon_device *rdev); |
996 | void radeon_ib_pool_fini(struct radeon_device *rdev); |
823 | int radeon_ib_ring_tests(struct radeon_device *rdev); |
997 | int radeon_ib_ring_tests(struct radeon_device *rdev); |
824 | /* Ring access between begin & end cannot sleep */ |
998 | /* Ring access between begin & end cannot sleep */ |
825 | bool radeon_ring_supports_scratch_reg(struct radeon_device *rdev, |
999 | bool radeon_ring_supports_scratch_reg(struct radeon_device *rdev, |
826 | struct radeon_ring *ring); |
1000 | struct radeon_ring *ring); |
827 | void radeon_ring_free_size(struct radeon_device *rdev, struct radeon_ring *cp); |
1001 | void radeon_ring_free_size(struct radeon_device *rdev, struct radeon_ring *cp); |
828 | int radeon_ring_alloc(struct radeon_device *rdev, struct radeon_ring *cp, unsigned ndw); |
1002 | int radeon_ring_alloc(struct radeon_device *rdev, struct radeon_ring *cp, unsigned ndw); |
- | 1003 | int radeon_ring_lock(struct radeon_device *rdev, struct radeon_ring *cp, unsigned ndw); |
|
829 | int radeon_ring_lock(struct radeon_device *rdev, struct radeon_ring *cp, unsigned ndw); |
1004 | void radeon_ring_commit(struct radeon_device *rdev, struct radeon_ring *cp, |
- | 1005 | bool hdp_flush); |
|
830 | void radeon_ring_commit(struct radeon_device *rdev, struct radeon_ring *cp); |
1006 | void radeon_ring_unlock_commit(struct radeon_device *rdev, struct radeon_ring *cp, |
831 | void radeon_ring_unlock_commit(struct radeon_device *rdev, struct radeon_ring *cp); |
1007 | bool hdp_flush); |
832 | void radeon_ring_undo(struct radeon_ring *ring); |
1008 | void radeon_ring_undo(struct radeon_ring *ring); |
833 | void radeon_ring_unlock_undo(struct radeon_device *rdev, struct radeon_ring *cp); |
1009 | void radeon_ring_unlock_undo(struct radeon_device *rdev, struct radeon_ring *cp); |
834 | int radeon_ring_test(struct radeon_device *rdev, struct radeon_ring *cp); |
1010 | int radeon_ring_test(struct radeon_device *rdev, struct radeon_ring *cp); |
835 | void radeon_ring_force_activity(struct radeon_device *rdev, struct radeon_ring *ring); |
1011 | void radeon_ring_lockup_update(struct radeon_device *rdev, |
836 | void radeon_ring_lockup_update(struct radeon_ring *ring); |
1012 | struct radeon_ring *ring); |
837 | bool radeon_ring_test_lockup(struct radeon_device *rdev, struct radeon_ring *ring); |
1013 | bool radeon_ring_test_lockup(struct radeon_device *rdev, struct radeon_ring *ring); |
838 | unsigned radeon_ring_backup(struct radeon_device *rdev, struct radeon_ring *ring, |
1014 | unsigned radeon_ring_backup(struct radeon_device *rdev, struct radeon_ring *ring, |
839 | uint32_t **data); |
1015 | uint32_t **data); |
840 | int radeon_ring_restore(struct radeon_device *rdev, struct radeon_ring *ring, |
1016 | int radeon_ring_restore(struct radeon_device *rdev, struct radeon_ring *ring, |
841 | unsigned size, uint32_t *data); |
- | |
842 | int radeon_ring_init(struct radeon_device *rdev, struct radeon_ring *cp, unsigned ring_size, |
1017 | unsigned size, uint32_t *data); |
843 | unsigned rptr_offs, unsigned rptr_reg, unsigned wptr_reg, |
1018 | int radeon_ring_init(struct radeon_device *rdev, struct radeon_ring *cp, unsigned ring_size, |
Line 844... | Line 1019... | ||
844 | u32 ptr_reg_shift, u32 ptr_reg_mask, u32 nop); |
1019 | unsigned rptr_offs, u32 nop); |
845 | void radeon_ring_fini(struct radeon_device *rdev, struct radeon_ring *cp); |
1020 | void radeon_ring_fini(struct radeon_device *rdev, struct radeon_ring *cp); |
Line 856... | Line 1031... | ||
856 | 1031 | ||
857 | /* |
1032 | /* |
858 | * CS. |
1033 | * CS. |
859 | */ |
1034 | */ |
860 | struct radeon_cs_reloc { |
1035 | struct radeon_cs_reloc { |
861 | // struct drm_gem_object *gobj; |
1036 | struct drm_gem_object *gobj; |
862 | struct radeon_bo *robj; |
1037 | struct radeon_bo *robj; |
- | 1038 | struct ttm_validate_buffer tv; |
|
- | 1039 | uint64_t gpu_offset; |
|
- | 1040 | unsigned prefered_domains; |
|
- | 1041 | unsigned allowed_domains; |
|
863 | struct radeon_bo_list lobj; |
1042 | uint32_t tiling_flags; |
864 | uint32_t handle; |
- | |
865 | uint32_t flags; |
1043 | uint32_t handle; |
Line 866... | Line 1044... | ||
866 | }; |
1044 | }; |
867 | 1045 | ||
868 | struct radeon_cs_chunk { |
1046 | struct radeon_cs_chunk { |
869 | uint32_t chunk_id; |
- | |
870 | uint32_t length_dw; |
- | |
871 | int kpage_idx[2]; |
1047 | uint32_t chunk_id; |
872 | uint32_t *kpage[2]; |
1048 | uint32_t length_dw; |
873 | uint32_t *kdata; |
- | |
874 | void __user *user_ptr; |
- | |
875 | int last_copied_page; |
1049 | uint32_t *kdata; |
Line 876... | Line 1050... | ||
876 | int last_page_index; |
1050 | void __user *user_ptr; |
877 | }; |
1051 | }; |
878 | 1052 | ||
Line 888... | Line 1062... | ||
888 | unsigned idx; |
1062 | unsigned idx; |
889 | /* relocations */ |
1063 | /* relocations */ |
890 | unsigned nrelocs; |
1064 | unsigned nrelocs; |
891 | struct radeon_cs_reloc *relocs; |
1065 | struct radeon_cs_reloc *relocs; |
892 | struct radeon_cs_reloc **relocs_ptr; |
1066 | struct radeon_cs_reloc **relocs_ptr; |
- | 1067 | struct radeon_cs_reloc *vm_bos; |
|
893 | struct list_head validated; |
1068 | struct list_head validated; |
894 | unsigned dma_reloc_idx; |
1069 | unsigned dma_reloc_idx; |
895 | /* indices of various chunks */ |
1070 | /* indices of various chunks */ |
896 | int chunk_ib_idx; |
1071 | int chunk_ib_idx; |
897 | int chunk_relocs_idx; |
1072 | int chunk_relocs_idx; |
Line 903... | Line 1078... | ||
903 | unsigned family; |
1078 | unsigned family; |
904 | int parser_error; |
1079 | int parser_error; |
905 | u32 cs_flags; |
1080 | u32 cs_flags; |
906 | u32 ring; |
1081 | u32 ring; |
907 | s32 priority; |
1082 | s32 priority; |
- | 1083 | struct ww_acquire_ctx ticket; |
|
908 | }; |
1084 | }; |
Line 909... | Line 1085... | ||
909 | 1085 | ||
- | 1086 | static inline u32 radeon_get_ib_value(struct radeon_cs_parser *p, int idx) |
|
910 | extern int radeon_cs_finish_pages(struct radeon_cs_parser *p); |
1087 | { |
- | 1088 | struct radeon_cs_chunk *ibc = &p->chunks[p->chunk_ib_idx]; |
|
- | 1089 | ||
- | 1090 | if (ibc->kdata) |
|
- | 1091 | return ibc->kdata[idx]; |
|
- | 1092 | return p->ib.ptr[idx]; |
|
- | 1093 | } |
|
Line 911... | Line 1094... | ||
911 | extern u32 radeon_get_ib_value(struct radeon_cs_parser *p, int idx); |
1094 | |
912 | 1095 | ||
913 | struct radeon_cs_packet { |
1096 | struct radeon_cs_packet { |
914 | unsigned idx; |
1097 | unsigned idx; |
Line 952... | Line 1135... | ||
952 | #define RADEON_WB_CP1_RPTR_OFFSET 1280 |
1135 | #define RADEON_WB_CP1_RPTR_OFFSET 1280 |
953 | #define RADEON_WB_CP2_RPTR_OFFSET 1536 |
1136 | #define RADEON_WB_CP2_RPTR_OFFSET 1536 |
954 | #define R600_WB_DMA_RPTR_OFFSET 1792 |
1137 | #define R600_WB_DMA_RPTR_OFFSET 1792 |
955 | #define R600_WB_IH_WPTR_OFFSET 2048 |
1138 | #define R600_WB_IH_WPTR_OFFSET 2048 |
956 | #define CAYMAN_WB_DMA1_RPTR_OFFSET 2304 |
1139 | #define CAYMAN_WB_DMA1_RPTR_OFFSET 2304 |
957 | #define R600_WB_UVD_RPTR_OFFSET 2560 |
- | |
958 | #define R600_WB_EVENT_OFFSET 3072 |
1140 | #define R600_WB_EVENT_OFFSET 3072 |
- | 1141 | #define CIK_WB_CP1_WPTR_OFFSET 3328 |
|
- | 1142 | #define CIK_WB_CP2_WPTR_OFFSET 3584 |
|
Line 959... | Line 1143... | ||
959 | 1143 | ||
960 | /** |
1144 | /** |
961 | * struct radeon_pm - power management datas |
1145 | * struct radeon_pm - power management datas |
962 | * @max_bandwidth: maximum bandwidth the gpu has (MByte/s) |
1146 | * @max_bandwidth: maximum bandwidth the gpu has (MByte/s) |
Line 978... | Line 1162... | ||
978 | */ |
1162 | */ |
Line 979... | Line 1163... | ||
979 | 1163 | ||
980 | enum radeon_pm_method { |
1164 | enum radeon_pm_method { |
981 | PM_METHOD_PROFILE, |
1165 | PM_METHOD_PROFILE, |
- | 1166 | PM_METHOD_DYNPM, |
|
982 | PM_METHOD_DYNPM, |
1167 | PM_METHOD_DPM, |
Line 983... | Line 1168... | ||
983 | }; |
1168 | }; |
984 | 1169 | ||
985 | enum radeon_dynpm_state { |
1170 | enum radeon_dynpm_state { |
Line 1003... | Line 1188... | ||
1003 | VOLTAGE_VDDC, |
1188 | VOLTAGE_VDDC, |
1004 | VOLTAGE_SW |
1189 | VOLTAGE_SW |
1005 | }; |
1190 | }; |
Line 1006... | Line 1191... | ||
1006 | 1191 | ||
- | 1192 | enum radeon_pm_state_type { |
|
1007 | enum radeon_pm_state_type { |
1193 | /* not used for dpm */ |
1008 | POWER_STATE_TYPE_DEFAULT, |
1194 | POWER_STATE_TYPE_DEFAULT, |
- | 1195 | POWER_STATE_TYPE_POWERSAVE, |
|
1009 | POWER_STATE_TYPE_POWERSAVE, |
1196 | /* user selectable states */ |
1010 | POWER_STATE_TYPE_BATTERY, |
1197 | POWER_STATE_TYPE_BATTERY, |
1011 | POWER_STATE_TYPE_BALANCED, |
1198 | POWER_STATE_TYPE_BALANCED, |
- | 1199 | POWER_STATE_TYPE_PERFORMANCE, |
|
- | 1200 | /* internal states */ |
|
- | 1201 | POWER_STATE_TYPE_INTERNAL_UVD, |
|
- | 1202 | POWER_STATE_TYPE_INTERNAL_UVD_SD, |
|
- | 1203 | POWER_STATE_TYPE_INTERNAL_UVD_HD, |
|
- | 1204 | POWER_STATE_TYPE_INTERNAL_UVD_HD2, |
|
- | 1205 | POWER_STATE_TYPE_INTERNAL_UVD_MVC, |
|
- | 1206 | POWER_STATE_TYPE_INTERNAL_BOOT, |
|
- | 1207 | POWER_STATE_TYPE_INTERNAL_THERMAL, |
|
- | 1208 | POWER_STATE_TYPE_INTERNAL_ACPI, |
|
- | 1209 | POWER_STATE_TYPE_INTERNAL_ULV, |
|
1012 | POWER_STATE_TYPE_PERFORMANCE, |
1210 | POWER_STATE_TYPE_INTERNAL_3DPERF, |
Line 1013... | Line 1211... | ||
1013 | }; |
1211 | }; |
1014 | 1212 | ||
1015 | enum radeon_pm_profile_type { |
1213 | enum radeon_pm_profile_type { |
Line 1036... | Line 1234... | ||
1036 | int dpms_on_cm_idx; |
1234 | int dpms_on_cm_idx; |
1037 | }; |
1235 | }; |
Line 1038... | Line 1236... | ||
1038 | 1236 | ||
1039 | enum radeon_int_thermal_type { |
1237 | enum radeon_int_thermal_type { |
- | 1238 | THERMAL_TYPE_NONE, |
|
- | 1239 | THERMAL_TYPE_EXTERNAL, |
|
1040 | THERMAL_TYPE_NONE, |
1240 | THERMAL_TYPE_EXTERNAL_GPIO, |
1041 | THERMAL_TYPE_RV6XX, |
1241 | THERMAL_TYPE_RV6XX, |
- | 1242 | THERMAL_TYPE_RV770, |
|
1042 | THERMAL_TYPE_RV770, |
1243 | THERMAL_TYPE_ADT7473_WITH_INTERNAL, |
1043 | THERMAL_TYPE_EVERGREEN, |
1244 | THERMAL_TYPE_EVERGREEN, |
1044 | THERMAL_TYPE_SUMO, |
1245 | THERMAL_TYPE_SUMO, |
1045 | THERMAL_TYPE_NI, |
1246 | THERMAL_TYPE_NI, |
- | 1247 | THERMAL_TYPE_SI, |
|
- | 1248 | THERMAL_TYPE_EMC2103_WITH_INTERNAL, |
|
- | 1249 | THERMAL_TYPE_CI, |
|
1046 | THERMAL_TYPE_SI, |
1250 | THERMAL_TYPE_KV, |
Line 1047... | Line 1251... | ||
1047 | }; |
1251 | }; |
1048 | 1252 | ||
1049 | struct radeon_voltage { |
1253 | struct radeon_voltage { |
Line 1095... | Line 1299... | ||
1095 | /* |
1299 | /* |
1096 | * Some modes are overclocked by very low value, accept them |
1300 | * Some modes are overclocked by very low value, accept them |
1097 | */ |
1301 | */ |
1098 | #define RADEON_MODE_OVERCLOCK_MARGIN 500 /* 5 MHz */ |
1302 | #define RADEON_MODE_OVERCLOCK_MARGIN 500 /* 5 MHz */ |
Line -... | Line 1303... | ||
- | 1303 | ||
- | 1304 | enum radeon_dpm_auto_throttle_src { |
|
- | 1305 | RADEON_DPM_AUTO_THROTTLE_SRC_THERMAL, |
|
- | 1306 | RADEON_DPM_AUTO_THROTTLE_SRC_EXTERNAL |
|
- | 1307 | }; |
|
- | 1308 | ||
- | 1309 | enum radeon_dpm_event_src { |
|
- | 1310 | RADEON_DPM_EVENT_SRC_ANALOG = 0, |
|
- | 1311 | RADEON_DPM_EVENT_SRC_EXTERNAL = 1, |
|
- | 1312 | RADEON_DPM_EVENT_SRC_DIGITAL = 2, |
|
- | 1313 | RADEON_DPM_EVENT_SRC_ANALOG_OR_EXTERNAL = 3, |
|
- | 1314 | RADEON_DPM_EVENT_SRC_DIGIAL_OR_EXTERNAL = 4 |
|
- | 1315 | }; |
|
- | 1316 | ||
- | 1317 | #define RADEON_MAX_VCE_LEVELS 6 |
|
- | 1318 | ||
- | 1319 | enum radeon_vce_level { |
|
- | 1320 | RADEON_VCE_LEVEL_AC_ALL = 0, /* AC, All cases */ |
|
- | 1321 | RADEON_VCE_LEVEL_DC_EE = 1, /* DC, entropy encoding */ |
|
- | 1322 | RADEON_VCE_LEVEL_DC_LL_LOW = 2, /* DC, low latency queue, res <= 720 */ |
|
- | 1323 | RADEON_VCE_LEVEL_DC_LL_HIGH = 3, /* DC, low latency queue, 1080 >= res > 720 */ |
|
- | 1324 | RADEON_VCE_LEVEL_DC_GP_LOW = 4, /* DC, general purpose queue, res <= 720 */ |
|
- | 1325 | RADEON_VCE_LEVEL_DC_GP_HIGH = 5, /* DC, general purpose queue, 1080 >= res > 720 */ |
|
- | 1326 | }; |
|
- | 1327 | ||
- | 1328 | struct radeon_ps { |
|
- | 1329 | u32 caps; /* vbios flags */ |
|
- | 1330 | u32 class; /* vbios flags */ |
|
- | 1331 | u32 class2; /* vbios flags */ |
|
- | 1332 | /* UVD clocks */ |
|
- | 1333 | u32 vclk; |
|
- | 1334 | u32 dclk; |
|
- | 1335 | /* VCE clocks */ |
|
- | 1336 | u32 evclk; |
|
- | 1337 | u32 ecclk; |
|
- | 1338 | bool vce_active; |
|
- | 1339 | enum radeon_vce_level vce_level; |
|
- | 1340 | /* asic priv */ |
|
- | 1341 | void *ps_priv; |
|
- | 1342 | }; |
|
- | 1343 | ||
- | 1344 | struct radeon_dpm_thermal { |
|
- | 1345 | /* thermal interrupt work */ |
|
- | 1346 | struct work_struct work; |
|
- | 1347 | /* low temperature threshold */ |
|
- | 1348 | int min_temp; |
|
- | 1349 | /* high temperature threshold */ |
|
- | 1350 | int max_temp; |
|
- | 1351 | /* was interrupt low to high or high to low */ |
|
- | 1352 | bool high_to_low; |
|
- | 1353 | }; |
|
- | 1354 | ||
- | 1355 | enum radeon_clk_action |
|
- | 1356 | { |
|
- | 1357 | RADEON_SCLK_UP = 1, |
|
- | 1358 | RADEON_SCLK_DOWN |
|
- | 1359 | }; |
|
- | 1360 | ||
- | 1361 | struct radeon_blacklist_clocks |
|
- | 1362 | { |
|
- | 1363 | u32 sclk; |
|
- | 1364 | u32 mclk; |
|
- | 1365 | enum radeon_clk_action action; |
|
- | 1366 | }; |
|
- | 1367 | ||
- | 1368 | struct radeon_clock_and_voltage_limits { |
|
- | 1369 | u32 sclk; |
|
- | 1370 | u32 mclk; |
|
- | 1371 | u16 vddc; |
|
- | 1372 | u16 vddci; |
|
- | 1373 | }; |
|
- | 1374 | ||
- | 1375 | struct radeon_clock_array { |
|
- | 1376 | u32 count; |
|
- | 1377 | u32 *values; |
|
- | 1378 | }; |
|
- | 1379 | ||
- | 1380 | struct radeon_clock_voltage_dependency_entry { |
|
- | 1381 | u32 clk; |
|
- | 1382 | u16 v; |
|
- | 1383 | }; |
|
- | 1384 | ||
- | 1385 | struct radeon_clock_voltage_dependency_table { |
|
- | 1386 | u32 count; |
|
- | 1387 | struct radeon_clock_voltage_dependency_entry *entries; |
|
- | 1388 | }; |
|
- | 1389 | ||
- | 1390 | union radeon_cac_leakage_entry { |
|
- | 1391 | struct { |
|
- | 1392 | u16 vddc; |
|
- | 1393 | u32 leakage; |
|
- | 1394 | }; |
|
- | 1395 | struct { |
|
- | 1396 | u16 vddc1; |
|
- | 1397 | u16 vddc2; |
|
- | 1398 | u16 vddc3; |
|
- | 1399 | }; |
|
- | 1400 | }; |
|
- | 1401 | ||
- | 1402 | struct radeon_cac_leakage_table { |
|
- | 1403 | u32 count; |
|
- | 1404 | union radeon_cac_leakage_entry *entries; |
|
- | 1405 | }; |
|
- | 1406 | ||
- | 1407 | struct radeon_phase_shedding_limits_entry { |
|
- | 1408 | u16 voltage; |
|
- | 1409 | u32 sclk; |
|
- | 1410 | u32 mclk; |
|
- | 1411 | }; |
|
- | 1412 | ||
- | 1413 | struct radeon_phase_shedding_limits_table { |
|
- | 1414 | u32 count; |
|
- | 1415 | struct radeon_phase_shedding_limits_entry *entries; |
|
- | 1416 | }; |
|
- | 1417 | ||
- | 1418 | struct radeon_uvd_clock_voltage_dependency_entry { |
|
- | 1419 | u32 vclk; |
|
- | 1420 | u32 dclk; |
|
- | 1421 | u16 v; |
|
- | 1422 | }; |
|
- | 1423 | ||
- | 1424 | struct radeon_uvd_clock_voltage_dependency_table { |
|
- | 1425 | u8 count; |
|
- | 1426 | struct radeon_uvd_clock_voltage_dependency_entry *entries; |
|
- | 1427 | }; |
|
- | 1428 | ||
- | 1429 | struct radeon_vce_clock_voltage_dependency_entry { |
|
- | 1430 | u32 ecclk; |
|
- | 1431 | u32 evclk; |
|
- | 1432 | u16 v; |
|
- | 1433 | }; |
|
- | 1434 | ||
- | 1435 | struct radeon_vce_clock_voltage_dependency_table { |
|
- | 1436 | u8 count; |
|
- | 1437 | struct radeon_vce_clock_voltage_dependency_entry *entries; |
|
- | 1438 | }; |
|
- | 1439 | ||
- | 1440 | struct radeon_ppm_table { |
|
- | 1441 | u8 ppm_design; |
|
- | 1442 | u16 cpu_core_number; |
|
- | 1443 | u32 platform_tdp; |
|
- | 1444 | u32 small_ac_platform_tdp; |
|
- | 1445 | u32 platform_tdc; |
|
- | 1446 | u32 small_ac_platform_tdc; |
|
- | 1447 | u32 apu_tdp; |
|
- | 1448 | u32 dgpu_tdp; |
|
- | 1449 | u32 dgpu_ulv_power; |
|
- | 1450 | u32 tj_max; |
|
- | 1451 | }; |
|
- | 1452 | ||
- | 1453 | struct radeon_cac_tdp_table { |
|
- | 1454 | u16 tdp; |
|
- | 1455 | u16 configurable_tdp; |
|
- | 1456 | u16 tdc; |
|
- | 1457 | u16 battery_power_limit; |
|
- | 1458 | u16 small_power_limit; |
|
- | 1459 | u16 low_cac_leakage; |
|
- | 1460 | u16 high_cac_leakage; |
|
- | 1461 | u16 maximum_power_delivery_limit; |
|
- | 1462 | }; |
|
- | 1463 | ||
- | 1464 | struct radeon_dpm_dynamic_state { |
|
- | 1465 | struct radeon_clock_voltage_dependency_table vddc_dependency_on_sclk; |
|
- | 1466 | struct radeon_clock_voltage_dependency_table vddci_dependency_on_mclk; |
|
- | 1467 | struct radeon_clock_voltage_dependency_table vddc_dependency_on_mclk; |
|
- | 1468 | struct radeon_clock_voltage_dependency_table mvdd_dependency_on_mclk; |
|
- | 1469 | struct radeon_clock_voltage_dependency_table vddc_dependency_on_dispclk; |
|
- | 1470 | struct radeon_uvd_clock_voltage_dependency_table uvd_clock_voltage_dependency_table; |
|
- | 1471 | struct radeon_vce_clock_voltage_dependency_table vce_clock_voltage_dependency_table; |
|
- | 1472 | struct radeon_clock_voltage_dependency_table samu_clock_voltage_dependency_table; |
|
- | 1473 | struct radeon_clock_voltage_dependency_table acp_clock_voltage_dependency_table; |
|
- | 1474 | struct radeon_clock_array valid_sclk_values; |
|
- | 1475 | struct radeon_clock_array valid_mclk_values; |
|
- | 1476 | struct radeon_clock_and_voltage_limits max_clock_voltage_on_dc; |
|
- | 1477 | struct radeon_clock_and_voltage_limits max_clock_voltage_on_ac; |
|
- | 1478 | u32 mclk_sclk_ratio; |
|
- | 1479 | u32 sclk_mclk_delta; |
|
- | 1480 | u16 vddc_vddci_delta; |
|
- | 1481 | u16 min_vddc_for_pcie_gen2; |
|
- | 1482 | struct radeon_cac_leakage_table cac_leakage_table; |
|
- | 1483 | struct radeon_phase_shedding_limits_table phase_shedding_limits_table; |
|
- | 1484 | struct radeon_ppm_table *ppm_table; |
|
- | 1485 | struct radeon_cac_tdp_table *cac_tdp_table; |
|
- | 1486 | }; |
|
- | 1487 | ||
- | 1488 | struct radeon_dpm_fan { |
|
- | 1489 | u16 t_min; |
|
- | 1490 | u16 t_med; |
|
- | 1491 | u16 t_high; |
|
- | 1492 | u16 pwm_min; |
|
- | 1493 | u16 pwm_med; |
|
- | 1494 | u16 pwm_high; |
|
- | 1495 | u8 t_hyst; |
|
- | 1496 | u32 cycle_delay; |
|
- | 1497 | u16 t_max; |
|
- | 1498 | bool ucode_fan_control; |
|
- | 1499 | }; |
|
- | 1500 | ||
- | 1501 | enum radeon_pcie_gen { |
|
- | 1502 | RADEON_PCIE_GEN1 = 0, |
|
- | 1503 | RADEON_PCIE_GEN2 = 1, |
|
- | 1504 | RADEON_PCIE_GEN3 = 2, |
|
- | 1505 | RADEON_PCIE_GEN_INVALID = 0xffff |
|
- | 1506 | }; |
|
- | 1507 | ||
- | 1508 | enum radeon_dpm_forced_level { |
|
- | 1509 | RADEON_DPM_FORCED_LEVEL_AUTO = 0, |
|
- | 1510 | RADEON_DPM_FORCED_LEVEL_LOW = 1, |
|
- | 1511 | RADEON_DPM_FORCED_LEVEL_HIGH = 2, |
|
- | 1512 | }; |
|
- | 1513 | ||
- | 1514 | struct radeon_vce_state { |
|
- | 1515 | /* vce clocks */ |
|
- | 1516 | u32 evclk; |
|
- | 1517 | u32 ecclk; |
|
- | 1518 | /* gpu clocks */ |
|
- | 1519 | u32 sclk; |
|
- | 1520 | u32 mclk; |
|
- | 1521 | u8 clk_idx; |
|
- | 1522 | u8 pstate; |
|
- | 1523 | }; |
|
- | 1524 | ||
- | 1525 | struct radeon_dpm { |
|
- | 1526 | struct radeon_ps *ps; |
|
- | 1527 | /* number of valid power states */ |
|
- | 1528 | int num_ps; |
|
- | 1529 | /* current power state that is active */ |
|
- | 1530 | struct radeon_ps *current_ps; |
|
- | 1531 | /* requested power state */ |
|
- | 1532 | struct radeon_ps *requested_ps; |
|
- | 1533 | /* boot up power state */ |
|
- | 1534 | struct radeon_ps *boot_ps; |
|
- | 1535 | /* default uvd power state */ |
|
- | 1536 | struct radeon_ps *uvd_ps; |
|
- | 1537 | /* vce requirements */ |
|
- | 1538 | struct radeon_vce_state vce_states[RADEON_MAX_VCE_LEVELS]; |
|
- | 1539 | enum radeon_vce_level vce_level; |
|
- | 1540 | enum radeon_pm_state_type state; |
|
- | 1541 | enum radeon_pm_state_type user_state; |
|
- | 1542 | u32 platform_caps; |
|
- | 1543 | u32 voltage_response_time; |
|
- | 1544 | u32 backbias_response_time; |
|
- | 1545 | void *priv; |
|
- | 1546 | u32 new_active_crtcs; |
|
- | 1547 | int new_active_crtc_count; |
|
- | 1548 | u32 current_active_crtcs; |
|
- | 1549 | int current_active_crtc_count; |
|
- | 1550 | struct radeon_dpm_dynamic_state dyn_state; |
|
- | 1551 | struct radeon_dpm_fan fan; |
|
- | 1552 | u32 tdp_limit; |
|
- | 1553 | u32 near_tdp_limit; |
|
- | 1554 | u32 near_tdp_limit_adjusted; |
|
- | 1555 | u32 sq_ramping_threshold; |
|
- | 1556 | u32 cac_leakage; |
|
- | 1557 | u16 tdp_od_limit; |
|
- | 1558 | u32 tdp_adjustment; |
|
- | 1559 | u16 load_line_slope; |
|
- | 1560 | bool power_control; |
|
- | 1561 | bool ac_power; |
|
- | 1562 | /* special states active */ |
|
- | 1563 | bool thermal_active; |
|
- | 1564 | bool uvd_active; |
|
- | 1565 | bool vce_active; |
|
- | 1566 | /* thermal handling */ |
|
- | 1567 | struct radeon_dpm_thermal thermal; |
|
- | 1568 | /* forced levels */ |
|
- | 1569 | enum radeon_dpm_forced_level forced_level; |
|
- | 1570 | /* track UVD streams */ |
|
- | 1571 | unsigned sd; |
|
- | 1572 | unsigned hd; |
|
- | 1573 | }; |
|
- | 1574 | ||
- | 1575 | void radeon_dpm_enable_uvd(struct radeon_device *rdev, bool enable); |
|
- | 1576 | void radeon_dpm_enable_vce(struct radeon_device *rdev, bool enable); |
|
1099 | 1577 | ||
1100 | struct radeon_pm { |
1578 | struct radeon_pm { |
1101 | struct mutex mutex; |
1579 | struct mutex mutex; |
1102 | /* write locked while reprogramming mclk */ |
1580 | /* write locked while reprogramming mclk */ |
1103 | struct rw_semaphore mclk_lock; |
1581 | struct rw_semaphore mclk_lock; |
Line 1135... | Line 1613... | ||
1135 | u16 default_vddci; |
1613 | u16 default_vddci; |
1136 | struct radeon_i2c_chan *i2c_bus; |
1614 | struct radeon_i2c_chan *i2c_bus; |
1137 | /* selected pm method */ |
1615 | /* selected pm method */ |
1138 | enum radeon_pm_method pm_method; |
1616 | enum radeon_pm_method pm_method; |
1139 | /* dynpm power management */ |
1617 | /* dynpm power management */ |
1140 | // struct delayed_work dynpm_idle_work; |
1618 | struct delayed_work dynpm_idle_work; |
1141 | enum radeon_dynpm_state dynpm_state; |
1619 | enum radeon_dynpm_state dynpm_state; |
1142 | enum radeon_dynpm_action dynpm_planned_action; |
1620 | enum radeon_dynpm_action dynpm_planned_action; |
1143 | unsigned long dynpm_action_timeout; |
1621 | unsigned long dynpm_action_timeout; |
1144 | bool dynpm_can_upclock; |
1622 | bool dynpm_can_upclock; |
1145 | bool dynpm_can_downclock; |
1623 | bool dynpm_can_downclock; |
Line 1148... | Line 1626... | ||
1148 | int profile_index; |
1626 | int profile_index; |
1149 | struct radeon_pm_profile profiles[PM_PROFILE_MAX]; |
1627 | struct radeon_pm_profile profiles[PM_PROFILE_MAX]; |
1150 | /* internal thermal controller on rv6xx+ */ |
1628 | /* internal thermal controller on rv6xx+ */ |
1151 | enum radeon_int_thermal_type int_thermal_type; |
1629 | enum radeon_int_thermal_type int_thermal_type; |
1152 | struct device *int_hwmon_dev; |
1630 | struct device *int_hwmon_dev; |
- | 1631 | /* dpm */ |
|
- | 1632 | bool dpm_enabled; |
|
- | 1633 | struct radeon_dpm dpm; |
|
1153 | }; |
1634 | }; |
Line 1154... | Line 1635... | ||
1154 | 1635 | ||
1155 | int radeon_pm_get_type_index(struct radeon_device *rdev, |
1636 | int radeon_pm_get_type_index(struct radeon_device *rdev, |
1156 | enum radeon_pm_state_type ps_type, |
1637 | enum radeon_pm_state_type ps_type, |
Line 1164... | Line 1645... | ||
1164 | 1645 | ||
1165 | struct radeon_uvd { |
1646 | struct radeon_uvd { |
1166 | struct radeon_bo *vcpu_bo; |
1647 | struct radeon_bo *vcpu_bo; |
1167 | void *cpu_addr; |
1648 | void *cpu_addr; |
- | 1649 | uint64_t gpu_addr; |
|
1168 | uint64_t gpu_addr; |
1650 | void *saved_bo; |
1169 | atomic_t handles[RADEON_MAX_UVD_HANDLES]; |
1651 | atomic_t handles[RADEON_MAX_UVD_HANDLES]; |
- | 1652 | struct drm_file *filp[RADEON_MAX_UVD_HANDLES]; |
|
1170 | struct drm_file *filp[RADEON_MAX_UVD_HANDLES]; |
1653 | unsigned img_size[RADEON_MAX_UVD_HANDLES]; |
1171 | struct delayed_work idle_work; |
1654 | struct delayed_work idle_work; |
Line 1172... | Line 1655... | ||
1172 | }; |
1655 | }; |
1173 | 1656 | ||
Line 1194... | Line 1677... | ||
1194 | unsigned *optimal_vclk_div, |
1677 | unsigned *optimal_vclk_div, |
1195 | unsigned *optimal_dclk_div); |
1678 | unsigned *optimal_dclk_div); |
1196 | int radeon_uvd_send_upll_ctlreq(struct radeon_device *rdev, |
1679 | int radeon_uvd_send_upll_ctlreq(struct radeon_device *rdev, |
1197 | unsigned cg_upll_func_cntl); |
1680 | unsigned cg_upll_func_cntl); |
Line -... | Line 1681... | ||
- | 1681 | ||
- | 1682 | /* |
|
- | 1683 | * VCE |
|
- | 1684 | */ |
|
- | 1685 | #define RADEON_MAX_VCE_HANDLES 16 |
|
- | 1686 | #define RADEON_VCE_STACK_SIZE (1024*1024) |
|
- | 1687 | #define RADEON_VCE_HEAP_SIZE (4*1024*1024) |
|
- | 1688 | ||
- | 1689 | struct radeon_vce { |
|
- | 1690 | struct radeon_bo *vcpu_bo; |
|
- | 1691 | uint64_t gpu_addr; |
|
- | 1692 | unsigned fw_version; |
|
- | 1693 | unsigned fb_version; |
|
- | 1694 | atomic_t handles[RADEON_MAX_VCE_HANDLES]; |
|
- | 1695 | struct drm_file *filp[RADEON_MAX_VCE_HANDLES]; |
|
- | 1696 | unsigned img_size[RADEON_MAX_VCE_HANDLES]; |
|
- | 1697 | struct delayed_work idle_work; |
|
- | 1698 | }; |
|
- | 1699 | ||
- | 1700 | int radeon_vce_init(struct radeon_device *rdev); |
|
- | 1701 | void radeon_vce_fini(struct radeon_device *rdev); |
|
- | 1702 | int radeon_vce_suspend(struct radeon_device *rdev); |
|
- | 1703 | int radeon_vce_resume(struct radeon_device *rdev); |
|
- | 1704 | int radeon_vce_get_create_msg(struct radeon_device *rdev, int ring, |
|
- | 1705 | uint32_t handle, struct radeon_fence **fence); |
|
- | 1706 | int radeon_vce_get_destroy_msg(struct radeon_device *rdev, int ring, |
|
- | 1707 | uint32_t handle, struct radeon_fence **fence); |
|
- | 1708 | void radeon_vce_free_handles(struct radeon_device *rdev, struct drm_file *filp); |
|
- | 1709 | void radeon_vce_note_usage(struct radeon_device *rdev); |
|
- | 1710 | int radeon_vce_cs_reloc(struct radeon_cs_parser *p, int lo, int hi, unsigned size); |
|
- | 1711 | int radeon_vce_cs_parse(struct radeon_cs_parser *p); |
|
- | 1712 | bool radeon_vce_semaphore_emit(struct radeon_device *rdev, |
|
- | 1713 | struct radeon_ring *ring, |
|
- | 1714 | struct radeon_semaphore *semaphore, |
|
- | 1715 | bool emit_wait); |
|
- | 1716 | void radeon_vce_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib); |
|
- | 1717 | void radeon_vce_fence_emit(struct radeon_device *rdev, |
|
- | 1718 | struct radeon_fence *fence); |
|
- | 1719 | int radeon_vce_ring_test(struct radeon_device *rdev, struct radeon_ring *ring); |
|
- | 1720 | int radeon_vce_ib_test(struct radeon_device *rdev, struct radeon_ring *ring); |
|
1198 | 1721 | ||
1199 | struct r600_audio { |
1722 | struct r600_audio_pin { |
1200 | int channels; |
1723 | int channels; |
1201 | int rate; |
1724 | int rate; |
1202 | int bits_per_sample; |
1725 | int bits_per_sample; |
1203 | u8 status_bits; |
1726 | u8 status_bits; |
- | 1727 | u8 category_code; |
|
- | 1728 | u32 offset; |
|
- | 1729 | bool connected; |
|
- | 1730 | u32 id; |
|
- | 1731 | }; |
|
- | 1732 | ||
- | 1733 | struct r600_audio { |
|
- | 1734 | bool enabled; |
|
- | 1735 | struct r600_audio_pin pin[RADEON_MAX_AFMT_BLOCKS]; |
|
- | 1736 | int num_pins; |
|
- | 1737 | }; |
|
- | 1738 | ||
- | 1739 | /* |
|
- | 1740 | * Benchmarking |
|
- | 1741 | */ |
|
- | 1742 | void radeon_benchmark(struct radeon_device *rdev, int test_number); |
|
- | 1743 | ||
- | 1744 | ||
- | 1745 | /* |
|
- | 1746 | * Testing |
|
- | 1747 | */ |
|
- | 1748 | void radeon_test_moves(struct radeon_device *rdev); |
|
- | 1749 | void radeon_test_ring_sync(struct radeon_device *rdev, |
|
- | 1750 | struct radeon_ring *cpA, |
|
- | 1751 | struct radeon_ring *cpB); |
|
- | 1752 | void radeon_test_syncing(struct radeon_device *rdev); |
|
- | 1753 | ||
- | 1754 | ||
- | 1755 | /* |
|
- | 1756 | * Debugfs |
|
- | 1757 | */ |
|
- | 1758 | struct radeon_debugfs { |
|
- | 1759 | struct drm_info_list *files; |
|
- | 1760 | unsigned num_files; |
|
- | 1761 | }; |
|
- | 1762 | ||
- | 1763 | int radeon_debugfs_add_files(struct radeon_device *rdev, |
|
- | 1764 | struct drm_info_list *files, |
|
- | 1765 | unsigned nfiles); |
|
- | 1766 | int radeon_debugfs_fence_init(struct radeon_device *rdev); |
|
- | 1767 | ||
- | 1768 | /* |
|
- | 1769 | * ASIC ring specific functions. |
|
- | 1770 | */ |
|
- | 1771 | struct radeon_asic_ring { |
|
- | 1772 | /* ring read/write ptr handling */ |
|
- | 1773 | u32 (*get_rptr)(struct radeon_device *rdev, struct radeon_ring *ring); |
|
- | 1774 | u32 (*get_wptr)(struct radeon_device *rdev, struct radeon_ring *ring); |
|
- | 1775 | void (*set_wptr)(struct radeon_device *rdev, struct radeon_ring *ring); |
|
- | 1776 | ||
- | 1777 | /* validating and patching of IBs */ |
|
- | 1778 | int (*ib_parse)(struct radeon_device *rdev, struct radeon_ib *ib); |
|
- | 1779 | int (*cs_parse)(struct radeon_cs_parser *p); |
|
- | 1780 | ||
- | 1781 | /* command emmit functions */ |
|
- | 1782 | void (*ib_execute)(struct radeon_device *rdev, struct radeon_ib *ib); |
|
- | 1783 | void (*emit_fence)(struct radeon_device *rdev, struct radeon_fence *fence); |
|
- | 1784 | void (*hdp_flush)(struct radeon_device *rdev, struct radeon_ring *ring); |
|
- | 1785 | bool (*emit_semaphore)(struct radeon_device *rdev, struct radeon_ring *cp, |
|
- | 1786 | struct radeon_semaphore *semaphore, bool emit_wait); |
|
- | 1787 | void (*vm_flush)(struct radeon_device *rdev, int ridx, struct radeon_vm *vm); |
|
- | 1788 | ||
- | 1789 | /* testing functions */ |
|
- | 1790 | int (*ring_test)(struct radeon_device *rdev, struct radeon_ring *cp); |
|
- | 1791 | int (*ib_test)(struct radeon_device *rdev, struct radeon_ring *cp); |
|
- | 1792 | bool (*is_lockup)(struct radeon_device *rdev, struct radeon_ring *cp); |
|
- | 1793 | ||
- | 1794 | /* deprecated */ |
|
1204 | u8 category_code; |
1795 | void (*ring_start)(struct radeon_device *rdev, struct radeon_ring *cp); |
- | 1796 | }; |
|
1205 | }; |
1797 | |
1206 | /* |
1798 | /* |
1207 | * ASIC specific functions. |
1799 | * ASIC specific functions. |
1208 | */ |
1800 | */ |
1209 | struct radeon_asic { |
1801 | struct radeon_asic { |
1210 | int (*init)(struct radeon_device *rdev); |
1802 | int (*init)(struct radeon_device *rdev); |
1211 | void (*fini)(struct radeon_device *rdev); |
1803 | void (*fini)(struct radeon_device *rdev); |
1212 | int (*resume)(struct radeon_device *rdev); |
1804 | int (*resume)(struct radeon_device *rdev); |
1213 | int (*suspend)(struct radeon_device *rdev); |
1805 | int (*suspend)(struct radeon_device *rdev); |
1214 | void (*vga_set_state)(struct radeon_device *rdev, bool state); |
1806 | void (*vga_set_state)(struct radeon_device *rdev, bool state); |
1215 | int (*asic_reset)(struct radeon_device *rdev); |
- | |
1216 | /* ioctl hw specific callback. Some hw might want to perform special |
- | |
1217 | * operation on specific ioctl. For instance on wait idle some hw |
1807 | int (*asic_reset)(struct radeon_device *rdev); |
1218 | * might want to perform and HDP flush through MMIO as it seems that |
- | |
1219 | * some R6XX/R7XX hw doesn't take HDP flush into account if programmed |
- | |
1220 | * through ring. |
- | |
1221 | */ |
1808 | /* Flush the HDP cache via MMIO */ |
1222 | void (*ioctl_wait_idle)(struct radeon_device *rdev, struct radeon_bo *bo); |
1809 | void (*mmio_hdp_flush)(struct radeon_device *rdev); |
1223 | /* check if 3D engine is idle */ |
1810 | /* check if 3D engine is idle */ |
1224 | bool (*gui_idle)(struct radeon_device *rdev); |
1811 | bool (*gui_idle)(struct radeon_device *rdev); |
1225 | /* wait for mc_idle */ |
1812 | /* wait for mc_idle */ |
1226 | int (*mc_wait_for_idle)(struct radeon_device *rdev); |
1813 | int (*mc_wait_for_idle)(struct radeon_device *rdev); |
Line 1229... | Line 1816... | ||
1229 | /* get the gpu clock counter */ |
1816 | /* get the gpu clock counter */ |
1230 | uint64_t (*get_gpu_clock_counter)(struct radeon_device *rdev); |
1817 | uint64_t (*get_gpu_clock_counter)(struct radeon_device *rdev); |
1231 | /* gart */ |
1818 | /* gart */ |
1232 | struct { |
1819 | struct { |
1233 | void (*tlb_flush)(struct radeon_device *rdev); |
1820 | void (*tlb_flush)(struct radeon_device *rdev); |
1234 | int (*set_page)(struct radeon_device *rdev, int i, uint64_t addr); |
1821 | void (*set_page)(struct radeon_device *rdev, unsigned i, |
- | 1822 | uint64_t addr, uint32_t flags); |
|
1235 | } gart; |
1823 | } gart; |
1236 | struct { |
1824 | struct { |
1237 | int (*init)(struct radeon_device *rdev); |
1825 | int (*init)(struct radeon_device *rdev); |
1238 | void (*fini)(struct radeon_device *rdev); |
1826 | void (*fini)(struct radeon_device *rdev); |
1239 | - | ||
- | 1827 | void (*copy_pages)(struct radeon_device *rdev, |
|
- | 1828 | struct radeon_ib *ib, |
|
- | 1829 | uint64_t pe, uint64_t src, |
|
1240 | u32 pt_ring_index; |
1830 | unsigned count); |
1241 | void (*set_page)(struct radeon_device *rdev, |
1831 | void (*write_pages)(struct radeon_device *rdev, |
1242 | struct radeon_ib *ib, |
1832 | struct radeon_ib *ib, |
1243 | uint64_t pe, |
1833 | uint64_t pe, |
1244 | uint64_t addr, unsigned count, |
1834 | uint64_t addr, unsigned count, |
1245 | uint32_t incr, uint32_t flags); |
1835 | uint32_t incr, uint32_t flags); |
- | 1836 | void (*set_pages)(struct radeon_device *rdev, |
|
- | 1837 | struct radeon_ib *ib, |
|
- | 1838 | uint64_t pe, |
|
- | 1839 | uint64_t addr, unsigned count, |
|
- | 1840 | uint32_t incr, uint32_t flags); |
|
- | 1841 | void (*pad_ib)(struct radeon_ib *ib); |
|
1246 | } vm; |
1842 | } vm; |
1247 | /* ring specific callbacks */ |
1843 | /* ring specific callbacks */ |
1248 | struct { |
- | |
1249 | void (*ib_execute)(struct radeon_device *rdev, struct radeon_ib *ib); |
- | |
1250 | int (*ib_parse)(struct radeon_device *rdev, struct radeon_ib *ib); |
- | |
1251 | void (*emit_fence)(struct radeon_device *rdev, struct radeon_fence *fence); |
- | |
1252 | void (*emit_semaphore)(struct radeon_device *rdev, struct radeon_ring *cp, |
- | |
1253 | struct radeon_semaphore *semaphore, bool emit_wait); |
- | |
1254 | int (*cs_parse)(struct radeon_cs_parser *p); |
- | |
1255 | void (*ring_start)(struct radeon_device *rdev, struct radeon_ring *cp); |
- | |
1256 | int (*ring_test)(struct radeon_device *rdev, struct radeon_ring *cp); |
- | |
1257 | int (*ib_test)(struct radeon_device *rdev, struct radeon_ring *cp); |
- | |
1258 | bool (*is_lockup)(struct radeon_device *rdev, struct radeon_ring *cp); |
- | |
1259 | void (*vm_flush)(struct radeon_device *rdev, int ridx, struct radeon_vm *vm); |
- | |
1260 | } ring[RADEON_NUM_RINGS]; |
1844 | struct radeon_asic_ring *ring[RADEON_NUM_RINGS]; |
1261 | /* irqs */ |
1845 | /* irqs */ |
1262 | struct { |
1846 | struct { |
1263 | int (*set)(struct radeon_device *rdev); |
1847 | int (*set)(struct radeon_device *rdev); |
1264 | int (*process)(struct radeon_device *rdev); |
1848 | int (*process)(struct radeon_device *rdev); |
1265 | } irq; |
1849 | } irq; |
Line 1314... | Line 1898... | ||
1314 | void (*init)(struct radeon_device *rdev); |
1898 | void (*init)(struct radeon_device *rdev); |
1315 | void (*fini)(struct radeon_device *rdev); |
1899 | void (*fini)(struct radeon_device *rdev); |
1316 | bool (*sense)(struct radeon_device *rdev, enum radeon_hpd_id hpd); |
1900 | bool (*sense)(struct radeon_device *rdev, enum radeon_hpd_id hpd); |
1317 | void (*set_polarity)(struct radeon_device *rdev, enum radeon_hpd_id hpd); |
1901 | void (*set_polarity)(struct radeon_device *rdev, enum radeon_hpd_id hpd); |
1318 | } hpd; |
1902 | } hpd; |
1319 | /* power management */ |
1903 | /* static power management */ |
1320 | struct { |
1904 | struct { |
1321 | void (*misc)(struct radeon_device *rdev); |
1905 | void (*misc)(struct radeon_device *rdev); |
1322 | void (*prepare)(struct radeon_device *rdev); |
1906 | void (*prepare)(struct radeon_device *rdev); |
1323 | void (*finish)(struct radeon_device *rdev); |
1907 | void (*finish)(struct radeon_device *rdev); |
1324 | void (*init_profile)(struct radeon_device *rdev); |
1908 | void (*init_profile)(struct radeon_device *rdev); |
Line 1329... | Line 1913... | ||
1329 | void (*set_memory_clock)(struct radeon_device *rdev, uint32_t mem_clock); |
1913 | void (*set_memory_clock)(struct radeon_device *rdev, uint32_t mem_clock); |
1330 | int (*get_pcie_lanes)(struct radeon_device *rdev); |
1914 | int (*get_pcie_lanes)(struct radeon_device *rdev); |
1331 | void (*set_pcie_lanes)(struct radeon_device *rdev, int lanes); |
1915 | void (*set_pcie_lanes)(struct radeon_device *rdev, int lanes); |
1332 | void (*set_clock_gating)(struct radeon_device *rdev, int enable); |
1916 | void (*set_clock_gating)(struct radeon_device *rdev, int enable); |
1333 | int (*set_uvd_clocks)(struct radeon_device *rdev, u32 vclk, u32 dclk); |
1917 | int (*set_uvd_clocks)(struct radeon_device *rdev, u32 vclk, u32 dclk); |
- | 1918 | int (*set_vce_clocks)(struct radeon_device *rdev, u32 evclk, u32 ecclk); |
|
- | 1919 | int (*get_temperature)(struct radeon_device *rdev); |
|
1334 | } pm; |
1920 | } pm; |
- | 1921 | /* dynamic power management */ |
|
- | 1922 | struct { |
|
- | 1923 | int (*init)(struct radeon_device *rdev); |
|
- | 1924 | void (*setup_asic)(struct radeon_device *rdev); |
|
- | 1925 | int (*enable)(struct radeon_device *rdev); |
|
- | 1926 | int (*late_enable)(struct radeon_device *rdev); |
|
- | 1927 | void (*disable)(struct radeon_device *rdev); |
|
- | 1928 | int (*pre_set_power_state)(struct radeon_device *rdev); |
|
- | 1929 | int (*set_power_state)(struct radeon_device *rdev); |
|
- | 1930 | void (*post_set_power_state)(struct radeon_device *rdev); |
|
- | 1931 | void (*display_configuration_changed)(struct radeon_device *rdev); |
|
- | 1932 | void (*fini)(struct radeon_device *rdev); |
|
- | 1933 | u32 (*get_sclk)(struct radeon_device *rdev, bool low); |
|
- | 1934 | u32 (*get_mclk)(struct radeon_device *rdev, bool low); |
|
- | 1935 | void (*print_power_state)(struct radeon_device *rdev, struct radeon_ps *ps); |
|
- | 1936 | void (*debugfs_print_current_performance_level)(struct radeon_device *rdev, struct seq_file *m); |
|
- | 1937 | int (*force_performance_level)(struct radeon_device *rdev, enum radeon_dpm_forced_level level); |
|
- | 1938 | bool (*vblank_too_short)(struct radeon_device *rdev); |
|
- | 1939 | void (*powergate_uvd)(struct radeon_device *rdev, bool gate); |
|
- | 1940 | void (*enable_bapm)(struct radeon_device *rdev, bool enable); |
|
- | 1941 | } dpm; |
|
1335 | /* pageflipping */ |
1942 | /* pageflipping */ |
1336 | struct { |
1943 | struct { |
1337 | void (*pre_page_flip)(struct radeon_device *rdev, int crtc); |
- | |
1338 | u32 (*page_flip)(struct radeon_device *rdev, int crtc, u64 crtc_base); |
1944 | void (*page_flip)(struct radeon_device *rdev, int crtc, u64 crtc_base); |
1339 | void (*post_page_flip)(struct radeon_device *rdev, int crtc); |
1945 | bool (*page_flip_pending)(struct radeon_device *rdev, int crtc); |
1340 | } pflip; |
1946 | } pflip; |
1341 | }; |
1947 | }; |
Line 1342... | Line 1948... | ||
1342 | 1948 | ||
1343 | /* |
1949 | /* |
Line 1373... | Line 1979... | ||
1373 | unsigned tiling_nbanks; |
1979 | unsigned tiling_nbanks; |
1374 | unsigned tiling_npipes; |
1980 | unsigned tiling_npipes; |
1375 | unsigned tiling_group_size; |
1981 | unsigned tiling_group_size; |
1376 | unsigned tile_config; |
1982 | unsigned tile_config; |
1377 | unsigned backend_map; |
1983 | unsigned backend_map; |
- | 1984 | unsigned active_simds; |
|
1378 | }; |
1985 | }; |
Line 1379... | Line 1986... | ||
1379 | 1986 | ||
1380 | struct rv770_asic { |
1987 | struct rv770_asic { |
1381 | unsigned max_pipes; |
1988 | unsigned max_pipes; |
Line 1398... | Line 2005... | ||
1398 | unsigned tiling_nbanks; |
2005 | unsigned tiling_nbanks; |
1399 | unsigned tiling_npipes; |
2006 | unsigned tiling_npipes; |
1400 | unsigned tiling_group_size; |
2007 | unsigned tiling_group_size; |
1401 | unsigned tile_config; |
2008 | unsigned tile_config; |
1402 | unsigned backend_map; |
2009 | unsigned backend_map; |
- | 2010 | unsigned active_simds; |
|
1403 | }; |
2011 | }; |
Line 1404... | Line 2012... | ||
1404 | 2012 | ||
1405 | struct evergreen_asic { |
2013 | struct evergreen_asic { |
1406 | unsigned num_ses; |
2014 | unsigned num_ses; |
Line 1424... | Line 2032... | ||
1424 | unsigned tiling_nbanks; |
2032 | unsigned tiling_nbanks; |
1425 | unsigned tiling_npipes; |
2033 | unsigned tiling_npipes; |
1426 | unsigned tiling_group_size; |
2034 | unsigned tiling_group_size; |
1427 | unsigned tile_config; |
2035 | unsigned tile_config; |
1428 | unsigned backend_map; |
2036 | unsigned backend_map; |
- | 2037 | unsigned active_simds; |
|
1429 | }; |
2038 | }; |
Line 1430... | Line 2039... | ||
1430 | 2039 | ||
1431 | struct cayman_asic { |
2040 | struct cayman_asic { |
1432 | unsigned max_shader_engines; |
2041 | unsigned max_shader_engines; |
Line 1462... | Line 2071... | ||
1462 | unsigned shader_engine_tile_size; |
2071 | unsigned shader_engine_tile_size; |
1463 | unsigned num_gpus; |
2072 | unsigned num_gpus; |
1464 | unsigned multi_gpu_tile_size; |
2073 | unsigned multi_gpu_tile_size; |
Line 1465... | Line 2074... | ||
1465 | 2074 | ||
- | 2075 | unsigned tile_config; |
|
1466 | unsigned tile_config; |
2076 | unsigned active_simds; |
Line 1467... | Line 2077... | ||
1467 | }; |
2077 | }; |
1468 | 2078 | ||
1469 | struct si_asic { |
2079 | struct si_asic { |
Line 1480... | Line 2090... | ||
1480 | unsigned sc_prim_fifo_size_backend; |
2090 | unsigned sc_prim_fifo_size_backend; |
1481 | unsigned sc_hiz_tile_fifo_size; |
2091 | unsigned sc_hiz_tile_fifo_size; |
1482 | unsigned sc_earlyz_tile_fifo_size; |
2092 | unsigned sc_earlyz_tile_fifo_size; |
Line 1483... | Line 2093... | ||
1483 | 2093 | ||
1484 | unsigned num_tile_pipes; |
2094 | unsigned num_tile_pipes; |
1485 | unsigned num_backends_per_se; |
2095 | unsigned backend_enable_mask; |
1486 | unsigned backend_disable_mask_per_asic; |
2096 | unsigned backend_disable_mask_per_asic; |
1487 | unsigned backend_map; |
2097 | unsigned backend_map; |
1488 | unsigned num_texture_channel_caches; |
2098 | unsigned num_texture_channel_caches; |
1489 | unsigned mem_max_burst_length_bytes; |
2099 | unsigned mem_max_burst_length_bytes; |
Line 1492... | Line 2102... | ||
1492 | unsigned num_gpus; |
2102 | unsigned num_gpus; |
1493 | unsigned multi_gpu_tile_size; |
2103 | unsigned multi_gpu_tile_size; |
Line 1494... | Line 2104... | ||
1494 | 2104 | ||
1495 | unsigned tile_config; |
2105 | unsigned tile_config; |
- | 2106 | uint32_t tile_mode_array[32]; |
|
- | 2107 | uint32_t active_cus; |
|
- | 2108 | }; |
|
- | 2109 | ||
- | 2110 | struct cik_asic { |
|
- | 2111 | unsigned max_shader_engines; |
|
- | 2112 | unsigned max_tile_pipes; |
|
- | 2113 | unsigned max_cu_per_sh; |
|
- | 2114 | unsigned max_sh_per_se; |
|
- | 2115 | unsigned max_backends_per_se; |
|
- | 2116 | unsigned max_texture_channel_caches; |
|
- | 2117 | unsigned max_gprs; |
|
- | 2118 | unsigned max_gs_threads; |
|
- | 2119 | unsigned max_hw_contexts; |
|
- | 2120 | unsigned sc_prim_fifo_size_frontend; |
|
- | 2121 | unsigned sc_prim_fifo_size_backend; |
|
- | 2122 | unsigned sc_hiz_tile_fifo_size; |
|
- | 2123 | unsigned sc_earlyz_tile_fifo_size; |
|
- | 2124 | ||
- | 2125 | unsigned num_tile_pipes; |
|
- | 2126 | unsigned backend_enable_mask; |
|
- | 2127 | unsigned backend_disable_mask_per_asic; |
|
- | 2128 | unsigned backend_map; |
|
- | 2129 | unsigned num_texture_channel_caches; |
|
- | 2130 | unsigned mem_max_burst_length_bytes; |
|
- | 2131 | unsigned mem_row_size_in_kb; |
|
- | 2132 | unsigned shader_engine_tile_size; |
|
- | 2133 | unsigned num_gpus; |
|
- | 2134 | unsigned multi_gpu_tile_size; |
|
- | 2135 | ||
- | 2136 | unsigned tile_config; |
|
- | 2137 | uint32_t tile_mode_array[32]; |
|
- | 2138 | uint32_t macrotile_mode_array[16]; |
|
1496 | uint32_t tile_mode_array[32]; |
2139 | uint32_t active_cus; |
Line 1497... | Line 2140... | ||
1497 | }; |
2140 | }; |
1498 | 2141 | ||
1499 | union radeon_asic_config { |
2142 | union radeon_asic_config { |
1500 | struct r300_asic r300; |
2143 | struct r300_asic r300; |
1501 | struct r100_asic r100; |
2144 | struct r100_asic r100; |
1502 | struct r600_asic r600; |
2145 | struct r600_asic r600; |
1503 | struct rv770_asic rv770; |
2146 | struct rv770_asic rv770; |
1504 | struct evergreen_asic evergreen; |
2147 | struct evergreen_asic evergreen; |
- | 2148 | struct cayman_asic cayman; |
|
1505 | struct cayman_asic cayman; |
2149 | struct si_asic si; |
Line 1506... | Line 2150... | ||
1506 | struct si_asic si; |
2150 | struct cik_asic cik; |
1507 | }; |
2151 | }; |
1508 | 2152 | ||
Line 1519... | Line 2163... | ||
1519 | struct radeon_bo *robj; |
2163 | struct radeon_bo *robj; |
1520 | volatile uint32_t *ptr; |
2164 | volatile uint32_t *ptr; |
1521 | u64 gpu_addr; |
2165 | u64 gpu_addr; |
1522 | }; |
2166 | }; |
Line -... | Line 2167... | ||
- | 2167 | ||
- | 2168 | /* |
|
- | 2169 | * ACPI |
|
- | 2170 | */ |
|
- | 2171 | struct radeon_atif_notification_cfg { |
|
- | 2172 | bool enabled; |
|
- | 2173 | int command_code; |
|
- | 2174 | }; |
|
- | 2175 | ||
- | 2176 | struct radeon_atif_notifications { |
|
- | 2177 | bool display_switch; |
|
- | 2178 | bool expansion_mode_change; |
|
- | 2179 | bool thermal_state; |
|
- | 2180 | bool forced_power_state; |
|
- | 2181 | bool system_power_state; |
|
- | 2182 | bool display_conf_change; |
|
- | 2183 | bool px_gfx_switch; |
|
- | 2184 | bool brightness_change; |
|
- | 2185 | bool dgpu_display_event; |
|
- | 2186 | }; |
|
- | 2187 | ||
- | 2188 | struct radeon_atif_functions { |
|
- | 2189 | bool system_params; |
|
- | 2190 | bool sbios_requests; |
|
- | 2191 | bool select_active_disp; |
|
- | 2192 | bool lid_state; |
|
- | 2193 | bool get_tv_standard; |
|
- | 2194 | bool set_tv_standard; |
|
- | 2195 | bool get_panel_expansion_mode; |
|
- | 2196 | bool set_panel_expansion_mode; |
|
- | 2197 | bool temperature_change; |
|
- | 2198 | bool graphics_device_types; |
|
- | 2199 | }; |
|
- | 2200 | ||
- | 2201 | struct radeon_atif { |
|
- | 2202 | struct radeon_atif_notifications notifications; |
|
- | 2203 | struct radeon_atif_functions functions; |
|
- | 2204 | struct radeon_atif_notification_cfg notification_cfg; |
|
- | 2205 | struct radeon_encoder *encoder_for_bl; |
|
- | 2206 | }; |
|
- | 2207 | ||
- | 2208 | struct radeon_atcs_functions { |
|
- | 2209 | bool get_ext_state; |
|
- | 2210 | bool pcie_perf_req; |
|
- | 2211 | bool pcie_dev_rdy; |
|
- | 2212 | bool pcie_bus_width; |
|
- | 2213 | }; |
|
- | 2214 | ||
- | 2215 | struct radeon_atcs { |
|
- | 2216 | struct radeon_atcs_functions functions; |
|
Line 1523... | Line 2217... | ||
1523 | 2217 | }; |
|
1524 | 2218 | ||
1525 | /* |
2219 | /* |
1526 | * Core structure, functions and helpers. |
2220 | * Core structure, functions and helpers. |
Line 1550... | Line 2244... | ||
1550 | /* Register mmio */ |
2244 | /* Register mmio */ |
1551 | resource_size_t rmmio_base; |
2245 | resource_size_t rmmio_base; |
1552 | resource_size_t rmmio_size; |
2246 | resource_size_t rmmio_size; |
1553 | /* protects concurrent MM_INDEX/DATA based register access */ |
2247 | /* protects concurrent MM_INDEX/DATA based register access */ |
1554 | spinlock_t mmio_idx_lock; |
2248 | spinlock_t mmio_idx_lock; |
- | 2249 | /* protects concurrent SMC based register access */ |
|
- | 2250 | spinlock_t smc_idx_lock; |
|
- | 2251 | /* protects concurrent PLL register access */ |
|
- | 2252 | spinlock_t pll_idx_lock; |
|
- | 2253 | /* protects concurrent MC register access */ |
|
- | 2254 | spinlock_t mc_idx_lock; |
|
- | 2255 | /* protects concurrent PCIE register access */ |
|
- | 2256 | spinlock_t pcie_idx_lock; |
|
- | 2257 | /* protects concurrent PCIE_PORT register access */ |
|
- | 2258 | spinlock_t pciep_idx_lock; |
|
- | 2259 | /* protects concurrent PIF register access */ |
|
- | 2260 | spinlock_t pif_idx_lock; |
|
- | 2261 | /* protects concurrent CG register access */ |
|
- | 2262 | spinlock_t cg_idx_lock; |
|
- | 2263 | /* protects concurrent UVD register access */ |
|
- | 2264 | spinlock_t uvd_idx_lock; |
|
- | 2265 | /* protects concurrent RCU register access */ |
|
- | 2266 | spinlock_t rcu_idx_lock; |
|
- | 2267 | /* protects concurrent DIDT register access */ |
|
- | 2268 | spinlock_t didt_idx_lock; |
|
- | 2269 | /* protects concurrent ENDPOINT (audio) register access */ |
|
- | 2270 | spinlock_t end_idx_lock; |
|
1555 | void __iomem *rmmio; |
2271 | void __iomem *rmmio; |
1556 | radeon_rreg_t mc_rreg; |
2272 | radeon_rreg_t mc_rreg; |
1557 | radeon_wreg_t mc_wreg; |
2273 | radeon_wreg_t mc_wreg; |
1558 | radeon_rreg_t pll_rreg; |
2274 | radeon_rreg_t pll_rreg; |
1559 | radeon_wreg_t pll_wreg; |
2275 | radeon_wreg_t pll_wreg; |
Line 1566... | Line 2282... | ||
1566 | struct radeon_clock clock; |
2282 | struct radeon_clock clock; |
1567 | struct radeon_mc mc; |
2283 | struct radeon_mc mc; |
1568 | struct radeon_gart gart; |
2284 | struct radeon_gart gart; |
1569 | struct radeon_mode_info mode_info; |
2285 | struct radeon_mode_info mode_info; |
1570 | struct radeon_scratch scratch; |
2286 | struct radeon_scratch scratch; |
- | 2287 | struct radeon_doorbell doorbell; |
|
1571 | struct radeon_mman mman; |
2288 | struct radeon_mman mman; |
1572 | struct radeon_fence_driver fence_drv[RADEON_NUM_RINGS]; |
2289 | struct radeon_fence_driver fence_drv[RADEON_NUM_RINGS]; |
1573 | wait_queue_head_t fence_queue; |
2290 | wait_queue_head_t fence_queue; |
1574 | struct mutex ring_lock; |
2291 | struct mutex ring_lock; |
1575 | struct radeon_ring ring[RADEON_NUM_RINGS]; |
2292 | struct radeon_ring ring[RADEON_NUM_RINGS]; |
Line 1578... | Line 2295... | ||
1578 | struct radeon_irq irq; |
2295 | struct radeon_irq irq; |
1579 | struct radeon_asic *asic; |
2296 | struct radeon_asic *asic; |
1580 | struct radeon_gem gem; |
2297 | struct radeon_gem gem; |
1581 | struct radeon_pm pm; |
2298 | struct radeon_pm pm; |
1582 | struct radeon_uvd uvd; |
2299 | struct radeon_uvd uvd; |
- | 2300 | struct radeon_vce vce; |
|
1583 | uint32_t bios_scratch[RADEON_BIOS_NUM_SCRATCH]; |
2301 | uint32_t bios_scratch[RADEON_BIOS_NUM_SCRATCH]; |
1584 | struct radeon_wb wb; |
2302 | struct radeon_wb wb; |
1585 | struct radeon_dummy_page dummy_page; |
2303 | struct radeon_dummy_page dummy_page; |
1586 | bool shutdown; |
2304 | bool shutdown; |
1587 | bool suspend; |
2305 | bool suspend; |
1588 | bool need_dma32; |
2306 | bool need_dma32; |
1589 | bool accel_working; |
2307 | bool accel_working; |
1590 | bool fastfb_working; /* IGP feature*/ |
2308 | bool fastfb_working; /* IGP feature*/ |
- | 2309 | bool needs_reset; |
|
1591 | struct radeon_surface_reg surface_regs[RADEON_GEM_MAX_SURFACES]; |
2310 | struct radeon_surface_reg surface_regs[RADEON_GEM_MAX_SURFACES]; |
1592 | const struct firmware *me_fw; /* all family ME firmware */ |
2311 | const struct firmware *me_fw; /* all family ME firmware */ |
1593 | const struct firmware *pfp_fw; /* r6/700 PFP firmware */ |
2312 | const struct firmware *pfp_fw; /* r6/700 PFP firmware */ |
1594 | const struct firmware *rlc_fw; /* r6/700 RLC firmware */ |
2313 | const struct firmware *rlc_fw; /* r6/700 RLC firmware */ |
1595 | const struct firmware *mc_fw; /* NI MC firmware */ |
2314 | const struct firmware *mc_fw; /* NI MC firmware */ |
1596 | const struct firmware *ce_fw; /* SI CE firmware */ |
2315 | const struct firmware *ce_fw; /* SI CE firmware */ |
- | 2316 | const struct firmware *mec_fw; /* CIK MEC firmware */ |
|
- | 2317 | const struct firmware *mec2_fw; /* KV MEC2 firmware */ |
|
- | 2318 | const struct firmware *sdma_fw; /* CIK SDMA firmware */ |
|
- | 2319 | const struct firmware *smc_fw; /* SMC firmware */ |
|
1597 | const struct firmware *uvd_fw; /* UVD firmware */ |
2320 | const struct firmware *uvd_fw; /* UVD firmware */ |
1598 | struct r600_blit r600_blit; |
2321 | const struct firmware *vce_fw; /* VCE firmware */ |
- | 2322 | bool new_fw; |
|
1599 | struct r600_vram_scratch vram_scratch; |
2323 | struct r600_vram_scratch vram_scratch; |
1600 | int msi_enabled; /* msi enabled */ |
2324 | int msi_enabled; /* msi enabled */ |
1601 | struct r600_ih ih; /* r6/700 interrupt ring */ |
2325 | struct r600_ih ih; /* r6/700 interrupt ring */ |
1602 | struct si_rlc rlc; |
2326 | struct radeon_rlc rlc; |
- | 2327 | struct radeon_mec mec; |
|
1603 | // struct work_struct hotplug_work; |
2328 | struct work_struct hotplug_work; |
1604 | // struct work_struct audio_work; |
2329 | struct work_struct audio_work; |
- | 2330 | struct work_struct reset_work; |
|
1605 | int num_crtc; /* number of crtcs */ |
2331 | int num_crtc; /* number of crtcs */ |
1606 | struct mutex dc_hw_i2c_mutex; /* display controller hw i2c mutex */ |
2332 | struct mutex dc_hw_i2c_mutex; /* display controller hw i2c mutex */ |
1607 | bool audio_enabled; |
- | |
1608 | bool has_uvd; |
2333 | bool has_uvd; |
1609 | // struct r600_audio audio_status; /* audio stuff */ |
2334 | struct r600_audio audio; /* audio stuff */ |
1610 | // struct notifier_block acpi_nb; |
- | |
1611 | /* only one userspace can use Hyperz features or CMASK at a time */ |
2335 | /* only one userspace can use Hyperz features or CMASK at a time */ |
1612 | // struct drm_file *hyperz_filp; |
2336 | struct drm_file *hyperz_filp; |
1613 | // struct drm_file *cmask_filp; |
2337 | struct drm_file *cmask_filp; |
1614 | /* i2c buses */ |
2338 | /* i2c buses */ |
1615 | struct radeon_i2c_chan *i2c_bus[RADEON_MAX_I2C_BUS]; |
2339 | struct radeon_i2c_chan *i2c_bus[RADEON_MAX_I2C_BUS]; |
1616 | /* debugfs */ |
2340 | /* debugfs */ |
1617 | // struct radeon_debugfs debugfs[RADEON_DEBUGFS_MAX_COMPONENTS]; |
2341 | struct radeon_debugfs debugfs[RADEON_DEBUGFS_MAX_COMPONENTS]; |
1618 | unsigned debugfs_count; |
2342 | unsigned debugfs_count; |
1619 | /* virtual memory */ |
2343 | /* virtual memory */ |
1620 | struct radeon_vm_manager vm_manager; |
2344 | struct radeon_vm_manager vm_manager; |
1621 | struct mutex gpu_clock_mutex; |
2345 | struct mutex gpu_clock_mutex; |
- | 2346 | /* memory stats */ |
|
- | 2347 | atomic64_t vram_usage; |
|
- | 2348 | atomic64_t gtt_usage; |
|
- | 2349 | atomic64_t num_bytes_moved; |
|
1622 | /* ACPI interface */ |
2350 | /* ACPI interface */ |
1623 | // struct radeon_atif atif; |
2351 | struct radeon_atif atif; |
1624 | // struct radeon_atcs atcs; |
2352 | struct radeon_atcs atcs; |
- | 2353 | /* srbm instance registers */ |
|
- | 2354 | struct mutex srbm_mutex; |
|
- | 2355 | /* clock, powergating flags */ |
|
- | 2356 | u32 cg_flags; |
|
- | 2357 | u32 pg_flags; |
|
- | 2358 | ||
- | 2359 | // struct dev_pm_domain vga_pm_domain; |
|
- | 2360 | bool have_disp_power_ref; |
|
- | 2361 | u32 px_quirk_flags; |
|
- | 2362 | ||
- | 2363 | /* tracking pinned memory */ |
|
- | 2364 | u64 vram_pin_size; |
|
- | 2365 | u64 gart_pin_size; |
|
1625 | }; |
2366 | }; |
Line -... | Line 2367... | ||
- | 2367 | ||
1626 | 2368 | bool radeon_is_px(struct drm_device *dev); |
|
1627 | int radeon_device_init(struct radeon_device *rdev, |
2369 | int radeon_device_init(struct radeon_device *rdev, |
1628 | struct drm_device *ddev, |
2370 | struct drm_device *ddev, |
1629 | struct pci_dev *pdev, |
2371 | struct pci_dev *pdev, |
1630 | uint32_t flags); |
2372 | uint32_t flags); |
1631 | void radeon_device_fini(struct radeon_device *rdev); |
2373 | void radeon_device_fini(struct radeon_device *rdev); |
Line -... | Line 2374... | ||
- | 2374 | int radeon_gpu_wait_for_idle(struct radeon_device *rdev); |
|
- | 2375 | ||
1632 | int radeon_gpu_wait_for_idle(struct radeon_device *rdev); |
2376 | #define RADEON_MIN_MMIO_SIZE 0x10000 |
1633 | 2377 | ||
- | 2378 | static inline uint32_t r100_mm_rreg(struct radeon_device *rdev, uint32_t reg, |
|
- | 2379 | bool always_indirect) |
|
- | 2380 | { |
|
- | 2381 | /* The mmio size is 64kb at minimum. Allows the if to be optimized out. */ |
|
- | 2382 | if ((reg < rdev->rmmio_size || reg < RADEON_MIN_MMIO_SIZE) && !always_indirect) |
|
- | 2383 | return readl(((void __iomem *)rdev->rmmio) + reg); |
|
- | 2384 | else { |
|
- | 2385 | unsigned long flags; |
|
- | 2386 | uint32_t ret; |
|
- | 2387 | ||
- | 2388 | spin_lock_irqsave(&rdev->mmio_idx_lock, flags); |
|
- | 2389 | writel(reg, ((void __iomem *)rdev->rmmio) + RADEON_MM_INDEX); |
|
- | 2390 | ret = readl(((void __iomem *)rdev->rmmio) + RADEON_MM_DATA); |
|
- | 2391 | spin_unlock_irqrestore(&rdev->mmio_idx_lock, flags); |
|
- | 2392 | ||
- | 2393 | return ret; |
|
- | 2394 | } |
|
1634 | uint32_t r100_mm_rreg(struct radeon_device *rdev, uint32_t reg, |
2395 | } |
1635 | bool always_indirect); |
2396 | |
- | 2397 | static inline void r100_mm_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v, |
|
- | 2398 | bool always_indirect) |
|
- | 2399 | { |
|
- | 2400 | if ((reg < rdev->rmmio_size || reg < RADEON_MIN_MMIO_SIZE) && !always_indirect) |
|
- | 2401 | writel(v, ((void __iomem *)rdev->rmmio) + reg); |
|
- | 2402 | else { |
|
- | 2403 | unsigned long flags; |
|
- | 2404 | ||
- | 2405 | spin_lock_irqsave(&rdev->mmio_idx_lock, flags); |
|
- | 2406 | writel(reg, ((void __iomem *)rdev->rmmio) + RADEON_MM_INDEX); |
|
- | 2407 | writel(v, ((void __iomem *)rdev->rmmio) + RADEON_MM_DATA); |
|
- | 2408 | spin_unlock_irqrestore(&rdev->mmio_idx_lock, flags); |
|
- | 2409 | } |
|
1636 | void r100_mm_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v, |
2410 | } |
1637 | bool always_indirect); |
2411 | |
Line -... | Line 2412... | ||
- | 2412 | u32 r100_io_rreg(struct radeon_device *rdev, u32 reg); |
|
- | 2413 | void r100_io_wreg(struct radeon_device *rdev, u32 reg, u32 v); |
|
- | 2414 | ||
1638 | u32 r100_io_rreg(struct radeon_device *rdev, u32 reg); |
2415 | u32 cik_mm_rdoorbell(struct radeon_device *rdev, u32 index); |
1639 | void r100_io_wreg(struct radeon_device *rdev, u32 reg, u32 v); |
2416 | void cik_mm_wdoorbell(struct radeon_device *rdev, u32 index, u32 v); |
1640 | 2417 | ||
1641 | /* |
2418 | /* |
Line 1663... | Line 2440... | ||
1663 | #define WREG32_MC(reg, v) rdev->mc_wreg(rdev, (reg), (v)) |
2440 | #define WREG32_MC(reg, v) rdev->mc_wreg(rdev, (reg), (v)) |
1664 | #define RREG32_PCIE(reg) rv370_pcie_rreg(rdev, (reg)) |
2441 | #define RREG32_PCIE(reg) rv370_pcie_rreg(rdev, (reg)) |
1665 | #define WREG32_PCIE(reg, v) rv370_pcie_wreg(rdev, (reg), (v)) |
2442 | #define WREG32_PCIE(reg, v) rv370_pcie_wreg(rdev, (reg), (v)) |
1666 | #define RREG32_PCIE_PORT(reg) rdev->pciep_rreg(rdev, (reg)) |
2443 | #define RREG32_PCIE_PORT(reg) rdev->pciep_rreg(rdev, (reg)) |
1667 | #define WREG32_PCIE_PORT(reg, v) rdev->pciep_wreg(rdev, (reg), (v)) |
2444 | #define WREG32_PCIE_PORT(reg, v) rdev->pciep_wreg(rdev, (reg), (v)) |
- | 2445 | #define RREG32_SMC(reg) tn_smc_rreg(rdev, (reg)) |
|
- | 2446 | #define WREG32_SMC(reg, v) tn_smc_wreg(rdev, (reg), (v)) |
|
- | 2447 | #define RREG32_RCU(reg) r600_rcu_rreg(rdev, (reg)) |
|
- | 2448 | #define WREG32_RCU(reg, v) r600_rcu_wreg(rdev, (reg), (v)) |
|
- | 2449 | #define RREG32_CG(reg) eg_cg_rreg(rdev, (reg)) |
|
- | 2450 | #define WREG32_CG(reg, v) eg_cg_wreg(rdev, (reg), (v)) |
|
- | 2451 | #define RREG32_PIF_PHY0(reg) eg_pif_phy0_rreg(rdev, (reg)) |
|
- | 2452 | #define WREG32_PIF_PHY0(reg, v) eg_pif_phy0_wreg(rdev, (reg), (v)) |
|
- | 2453 | #define RREG32_PIF_PHY1(reg) eg_pif_phy1_rreg(rdev, (reg)) |
|
- | 2454 | #define WREG32_PIF_PHY1(reg, v) eg_pif_phy1_wreg(rdev, (reg), (v)) |
|
- | 2455 | #define RREG32_UVD_CTX(reg) r600_uvd_ctx_rreg(rdev, (reg)) |
|
- | 2456 | #define WREG32_UVD_CTX(reg, v) r600_uvd_ctx_wreg(rdev, (reg), (v)) |
|
- | 2457 | #define RREG32_DIDT(reg) cik_didt_rreg(rdev, (reg)) |
|
- | 2458 | #define WREG32_DIDT(reg, v) cik_didt_wreg(rdev, (reg), (v)) |
|
1668 | #define WREG32_P(reg, val, mask) \ |
2459 | #define WREG32_P(reg, val, mask) \ |
1669 | do { \ |
2460 | do { \ |
1670 | uint32_t tmp_ = RREG32(reg); \ |
2461 | uint32_t tmp_ = RREG32(reg); \ |
1671 | tmp_ &= (mask); \ |
2462 | tmp_ &= (mask); \ |
1672 | tmp_ |= ((val) & ~(mask)); \ |
2463 | tmp_ |= ((val) & ~(mask)); \ |
1673 | WREG32(reg, tmp_); \ |
2464 | WREG32(reg, tmp_); \ |
1674 | } while (0) |
2465 | } while (0) |
1675 | #define WREG32_AND(reg, and) WREG32_P(reg, 0, and) |
2466 | #define WREG32_AND(reg, and) WREG32_P(reg, 0, and) |
1676 | #define WREG32_OR(reg, or) WREG32_P(reg, or, ~or) |
2467 | #define WREG32_OR(reg, or) WREG32_P(reg, or, ~(or)) |
1677 | #define WREG32_PLL_P(reg, val, mask) \ |
2468 | #define WREG32_PLL_P(reg, val, mask) \ |
1678 | do { \ |
2469 | do { \ |
1679 | uint32_t tmp_ = RREG32_PLL(reg); \ |
2470 | uint32_t tmp_ = RREG32_PLL(reg); \ |
1680 | tmp_ &= (mask); \ |
2471 | tmp_ &= (mask); \ |
1681 | tmp_ |= ((val) & ~(mask)); \ |
2472 | tmp_ |= ((val) & ~(mask)); \ |
1682 | WREG32_PLL(reg, tmp_); \ |
2473 | WREG32_PLL(reg, tmp_); \ |
1683 | } while (0) |
2474 | } while (0) |
- | 2475 | #define DREG32_SYS(sqf, rdev, reg) seq_printf((sqf), #reg " : 0x%08X\n", r100_mm_rreg((rdev), (reg), false)) |
|
1684 | #define RREG32_IO(reg) r100_io_rreg(rdev, (reg)) |
2476 | #define RREG32_IO(reg) r100_io_rreg(rdev, (reg)) |
1685 | #define WREG32_IO(reg, v) r100_io_wreg(rdev, (reg), (v)) |
2477 | #define WREG32_IO(reg, v) r100_io_wreg(rdev, (reg), (v)) |
Line -... | Line 2478... | ||
- | 2478 | ||
- | 2479 | #define RDOORBELL32(index) cik_mm_rdoorbell(rdev, (index)) |
|
- | 2480 | #define WDOORBELL32(index, v) cik_mm_wdoorbell(rdev, (index), (v)) |
|
1686 | 2481 | ||
1687 | /* |
2482 | /* |
1688 | * Indirect registers accessor |
2483 | * Indirect registers accessor |
1689 | */ |
2484 | */ |
1690 | static inline uint32_t rv370_pcie_rreg(struct radeon_device *rdev, uint32_t reg) |
2485 | static inline uint32_t rv370_pcie_rreg(struct radeon_device *rdev, uint32_t reg) |
- | 2486 | { |
|
1691 | { |
2487 | unsigned long flags; |
Line -... | Line 2488... | ||
- | 2488 | uint32_t r; |
|
1692 | uint32_t r; |
2489 | |
1693 | 2490 | spin_lock_irqsave(&rdev->pcie_idx_lock, flags); |
|
- | 2491 | WREG32(RADEON_PCIE_INDEX, ((reg) & rdev->pcie_reg_mask)); |
|
1694 | WREG32(RADEON_PCIE_INDEX, ((reg) & rdev->pcie_reg_mask)); |
2492 | r = RREG32(RADEON_PCIE_DATA); |
1695 | r = RREG32(RADEON_PCIE_DATA); |
2493 | spin_unlock_irqrestore(&rdev->pcie_idx_lock, flags); |
Line 1696... | Line 2494... | ||
1696 | return r; |
2494 | return r; |
1697 | } |
2495 | } |
- | 2496 | ||
- | 2497 | static inline void rv370_pcie_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v) |
|
- | 2498 | { |
|
1698 | 2499 | unsigned long flags; |
|
1699 | static inline void rv370_pcie_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v) |
2500 | |
- | 2501 | spin_lock_irqsave(&rdev->pcie_idx_lock, flags); |
|
- | 2502 | WREG32(RADEON_PCIE_INDEX, ((reg) & rdev->pcie_reg_mask)); |
|
- | 2503 | WREG32(RADEON_PCIE_DATA, (v)); |
|
- | 2504 | spin_unlock_irqrestore(&rdev->pcie_idx_lock, flags); |
|
- | 2505 | } |
|
- | 2506 | ||
- | 2507 | static inline u32 tn_smc_rreg(struct radeon_device *rdev, u32 reg) |
|
- | 2508 | { |
|
- | 2509 | unsigned long flags; |
|
- | 2510 | u32 r; |
|
- | 2511 | ||
- | 2512 | spin_lock_irqsave(&rdev->smc_idx_lock, flags); |
|
- | 2513 | WREG32(TN_SMC_IND_INDEX_0, (reg)); |
|
- | 2514 | r = RREG32(TN_SMC_IND_DATA_0); |
|
- | 2515 | spin_unlock_irqrestore(&rdev->smc_idx_lock, flags); |
|
- | 2516 | return r; |
|
- | 2517 | } |
|
- | 2518 | ||
- | 2519 | static inline void tn_smc_wreg(struct radeon_device *rdev, u32 reg, u32 v) |
|
- | 2520 | { |
|
- | 2521 | unsigned long flags; |
|
- | 2522 | ||
- | 2523 | spin_lock_irqsave(&rdev->smc_idx_lock, flags); |
|
- | 2524 | WREG32(TN_SMC_IND_INDEX_0, (reg)); |
|
- | 2525 | WREG32(TN_SMC_IND_DATA_0, (v)); |
|
- | 2526 | spin_unlock_irqrestore(&rdev->smc_idx_lock, flags); |
|
- | 2527 | } |
|
- | 2528 | ||
- | 2529 | static inline u32 r600_rcu_rreg(struct radeon_device *rdev, u32 reg) |
|
- | 2530 | { |
|
- | 2531 | unsigned long flags; |
|
- | 2532 | u32 r; |
|
- | 2533 | ||
- | 2534 | spin_lock_irqsave(&rdev->rcu_idx_lock, flags); |
|
- | 2535 | WREG32(R600_RCU_INDEX, ((reg) & 0x1fff)); |
|
- | 2536 | r = RREG32(R600_RCU_DATA); |
|
- | 2537 | spin_unlock_irqrestore(&rdev->rcu_idx_lock, flags); |
|
- | 2538 | return r; |
|
- | 2539 | } |
|
- | 2540 | ||
- | 2541 | static inline void r600_rcu_wreg(struct radeon_device *rdev, u32 reg, u32 v) |
|
- | 2542 | { |
|
- | 2543 | unsigned long flags; |
|
- | 2544 | ||
- | 2545 | spin_lock_irqsave(&rdev->rcu_idx_lock, flags); |
|
- | 2546 | WREG32(R600_RCU_INDEX, ((reg) & 0x1fff)); |
|
- | 2547 | WREG32(R600_RCU_DATA, (v)); |
|
- | 2548 | spin_unlock_irqrestore(&rdev->rcu_idx_lock, flags); |
|
- | 2549 | } |
|
- | 2550 | ||
- | 2551 | static inline u32 eg_cg_rreg(struct radeon_device *rdev, u32 reg) |
|
- | 2552 | { |
|
- | 2553 | unsigned long flags; |
|
- | 2554 | u32 r; |
|
- | 2555 | ||
- | 2556 | spin_lock_irqsave(&rdev->cg_idx_lock, flags); |
|
- | 2557 | WREG32(EVERGREEN_CG_IND_ADDR, ((reg) & 0xffff)); |
|
- | 2558 | r = RREG32(EVERGREEN_CG_IND_DATA); |
|
- | 2559 | spin_unlock_irqrestore(&rdev->cg_idx_lock, flags); |
|
- | 2560 | return r; |
|
- | 2561 | } |
|
- | 2562 | ||
- | 2563 | static inline void eg_cg_wreg(struct radeon_device *rdev, u32 reg, u32 v) |
|
- | 2564 | { |
|
- | 2565 | unsigned long flags; |
|
- | 2566 | ||
- | 2567 | spin_lock_irqsave(&rdev->cg_idx_lock, flags); |
|
- | 2568 | WREG32(EVERGREEN_CG_IND_ADDR, ((reg) & 0xffff)); |
|
- | 2569 | WREG32(EVERGREEN_CG_IND_DATA, (v)); |
|
- | 2570 | spin_unlock_irqrestore(&rdev->cg_idx_lock, flags); |
|
- | 2571 | } |
|
- | 2572 | ||
- | 2573 | static inline u32 eg_pif_phy0_rreg(struct radeon_device *rdev, u32 reg) |
|
- | 2574 | { |
|
- | 2575 | unsigned long flags; |
|
- | 2576 | u32 r; |
|
- | 2577 | ||
- | 2578 | spin_lock_irqsave(&rdev->pif_idx_lock, flags); |
|
- | 2579 | WREG32(EVERGREEN_PIF_PHY0_INDEX, ((reg) & 0xffff)); |
|
- | 2580 | r = RREG32(EVERGREEN_PIF_PHY0_DATA); |
|
- | 2581 | spin_unlock_irqrestore(&rdev->pif_idx_lock, flags); |
|
- | 2582 | return r; |
|
- | 2583 | } |
|
- | 2584 | ||
- | 2585 | static inline void eg_pif_phy0_wreg(struct radeon_device *rdev, u32 reg, u32 v) |
|
- | 2586 | { |
|
- | 2587 | unsigned long flags; |
|
- | 2588 | ||
- | 2589 | spin_lock_irqsave(&rdev->pif_idx_lock, flags); |
|
- | 2590 | WREG32(EVERGREEN_PIF_PHY0_INDEX, ((reg) & 0xffff)); |
|
- | 2591 | WREG32(EVERGREEN_PIF_PHY0_DATA, (v)); |
|
- | 2592 | spin_unlock_irqrestore(&rdev->pif_idx_lock, flags); |
|
- | 2593 | } |
|
- | 2594 | ||
- | 2595 | static inline u32 eg_pif_phy1_rreg(struct radeon_device *rdev, u32 reg) |
|
- | 2596 | { |
|
- | 2597 | unsigned long flags; |
|
- | 2598 | u32 r; |
|
- | 2599 | ||
- | 2600 | spin_lock_irqsave(&rdev->pif_idx_lock, flags); |
|
- | 2601 | WREG32(EVERGREEN_PIF_PHY1_INDEX, ((reg) & 0xffff)); |
|
- | 2602 | r = RREG32(EVERGREEN_PIF_PHY1_DATA); |
|
- | 2603 | spin_unlock_irqrestore(&rdev->pif_idx_lock, flags); |
|
- | 2604 | return r; |
|
- | 2605 | } |
|
- | 2606 | ||
- | 2607 | static inline void eg_pif_phy1_wreg(struct radeon_device *rdev, u32 reg, u32 v) |
|
- | 2608 | { |
|
- | 2609 | unsigned long flags; |
|
- | 2610 | ||
- | 2611 | spin_lock_irqsave(&rdev->pif_idx_lock, flags); |
|
- | 2612 | WREG32(EVERGREEN_PIF_PHY1_INDEX, ((reg) & 0xffff)); |
|
- | 2613 | WREG32(EVERGREEN_PIF_PHY1_DATA, (v)); |
|
- | 2614 | spin_unlock_irqrestore(&rdev->pif_idx_lock, flags); |
|
- | 2615 | } |
|
- | 2616 | ||
- | 2617 | static inline u32 r600_uvd_ctx_rreg(struct radeon_device *rdev, u32 reg) |
|
- | 2618 | { |
|
- | 2619 | unsigned long flags; |
|
- | 2620 | u32 r; |
|
- | 2621 | ||
- | 2622 | spin_lock_irqsave(&rdev->uvd_idx_lock, flags); |
|
- | 2623 | WREG32(R600_UVD_CTX_INDEX, ((reg) & 0x1ff)); |
|
- | 2624 | r = RREG32(R600_UVD_CTX_DATA); |
|
- | 2625 | spin_unlock_irqrestore(&rdev->uvd_idx_lock, flags); |
|
- | 2626 | return r; |
|
- | 2627 | } |
|
- | 2628 | ||
- | 2629 | static inline void r600_uvd_ctx_wreg(struct radeon_device *rdev, u32 reg, u32 v) |
|
- | 2630 | { |
|
- | 2631 | unsigned long flags; |
|
- | 2632 | ||
- | 2633 | spin_lock_irqsave(&rdev->uvd_idx_lock, flags); |
|
- | 2634 | WREG32(R600_UVD_CTX_INDEX, ((reg) & 0x1ff)); |
|
- | 2635 | WREG32(R600_UVD_CTX_DATA, (v)); |
|
- | 2636 | spin_unlock_irqrestore(&rdev->uvd_idx_lock, flags); |
|
- | 2637 | } |
|
- | 2638 | ||
- | 2639 | ||
- | 2640 | static inline u32 cik_didt_rreg(struct radeon_device *rdev, u32 reg) |
|
- | 2641 | { |
|
- | 2642 | unsigned long flags; |
|
- | 2643 | u32 r; |
|
- | 2644 | ||
- | 2645 | spin_lock_irqsave(&rdev->didt_idx_lock, flags); |
|
- | 2646 | WREG32(CIK_DIDT_IND_INDEX, (reg)); |
|
- | 2647 | r = RREG32(CIK_DIDT_IND_DATA); |
|
- | 2648 | spin_unlock_irqrestore(&rdev->didt_idx_lock, flags); |
|
- | 2649 | return r; |
|
- | 2650 | } |
|
- | 2651 | ||
- | 2652 | static inline void cik_didt_wreg(struct radeon_device *rdev, u32 reg, u32 v) |
|
- | 2653 | { |
|
- | 2654 | unsigned long flags; |
|
- | 2655 | ||
- | 2656 | spin_lock_irqsave(&rdev->didt_idx_lock, flags); |
|
1700 | { |
2657 | WREG32(CIK_DIDT_IND_INDEX, (reg)); |
Line 1701... | Line 2658... | ||
1701 | WREG32(RADEON_PCIE_INDEX, ((reg) & rdev->pcie_reg_mask)); |
2658 | WREG32(CIK_DIDT_IND_DATA, (v)); |
Line 1748... | Line 2705... | ||
1748 | #define ASIC_IS_DCE6(rdev) ((rdev->family >= CHIP_ARUBA)) |
2705 | #define ASIC_IS_DCE6(rdev) ((rdev->family >= CHIP_ARUBA)) |
1749 | #define ASIC_IS_DCE61(rdev) ((rdev->family >= CHIP_ARUBA) && \ |
2706 | #define ASIC_IS_DCE61(rdev) ((rdev->family >= CHIP_ARUBA) && \ |
1750 | (rdev->flags & RADEON_IS_IGP)) |
2707 | (rdev->flags & RADEON_IS_IGP)) |
1751 | #define ASIC_IS_DCE64(rdev) ((rdev->family == CHIP_OLAND)) |
2708 | #define ASIC_IS_DCE64(rdev) ((rdev->family == CHIP_OLAND)) |
1752 | #define ASIC_IS_NODCE(rdev) ((rdev->family == CHIP_HAINAN)) |
2709 | #define ASIC_IS_NODCE(rdev) ((rdev->family == CHIP_HAINAN)) |
- | 2710 | #define ASIC_IS_DCE8(rdev) ((rdev->family >= CHIP_BONAIRE)) |
|
- | 2711 | #define ASIC_IS_DCE81(rdev) ((rdev->family == CHIP_KAVERI)) |
|
- | 2712 | #define ASIC_IS_DCE82(rdev) ((rdev->family == CHIP_BONAIRE)) |
|
- | 2713 | #define ASIC_IS_DCE83(rdev) ((rdev->family == CHIP_KABINI) || \ |
|
- | 2714 | (rdev->family == CHIP_MULLINS)) |
|
- | 2715 | ||
- | 2716 | #define ASIC_IS_LOMBOK(rdev) ((rdev->ddev->pdev->device == 0x6849) || \ |
|
- | 2717 | (rdev->ddev->pdev->device == 0x6850) || \ |
|
- | 2718 | (rdev->ddev->pdev->device == 0x6858) || \ |
|
- | 2719 | (rdev->ddev->pdev->device == 0x6859) || \ |
|
- | 2720 | (rdev->ddev->pdev->device == 0x6840) || \ |
|
- | 2721 | (rdev->ddev->pdev->device == 0x6841) || \ |
|
- | 2722 | (rdev->ddev->pdev->device == 0x6842) || \ |
|
- | 2723 | (rdev->ddev->pdev->device == 0x6843)) |
|
Line 1753... | Line 2724... | ||
1753 | 2724 | ||
1754 | /* |
2725 | /* |
1755 | * BIOS helpers. |
2726 | * BIOS helpers. |
1756 | */ |
2727 | */ |
Line 1785... | Line 2756... | ||
1785 | */ |
2756 | */ |
1786 | #define radeon_init(rdev) (rdev)->asic->init((rdev)) |
2757 | #define radeon_init(rdev) (rdev)->asic->init((rdev)) |
1787 | #define radeon_fini(rdev) (rdev)->asic->fini((rdev)) |
2758 | #define radeon_fini(rdev) (rdev)->asic->fini((rdev)) |
1788 | #define radeon_resume(rdev) (rdev)->asic->resume((rdev)) |
2759 | #define radeon_resume(rdev) (rdev)->asic->resume((rdev)) |
1789 | #define radeon_suspend(rdev) (rdev)->asic->suspend((rdev)) |
2760 | #define radeon_suspend(rdev) (rdev)->asic->suspend((rdev)) |
1790 | #define radeon_cs_parse(rdev, r, p) (rdev)->asic->ring[(r)].cs_parse((p)) |
2761 | #define radeon_cs_parse(rdev, r, p) (rdev)->asic->ring[(r)]->cs_parse((p)) |
1791 | #define radeon_vga_set_state(rdev, state) (rdev)->asic->vga_set_state((rdev), (state)) |
2762 | #define radeon_vga_set_state(rdev, state) (rdev)->asic->vga_set_state((rdev), (state)) |
1792 | #define radeon_asic_reset(rdev) (rdev)->asic->asic_reset((rdev)) |
2763 | #define radeon_asic_reset(rdev) (rdev)->asic->asic_reset((rdev)) |
1793 | #define radeon_gart_tlb_flush(rdev) (rdev)->asic->gart.tlb_flush((rdev)) |
2764 | #define radeon_gart_tlb_flush(rdev) (rdev)->asic->gart.tlb_flush((rdev)) |
1794 | #define radeon_gart_set_page(rdev, i, p) (rdev)->asic->gart.set_page((rdev), (i), (p)) |
2765 | #define radeon_gart_set_page(rdev, i, p, f) (rdev)->asic->gart.set_page((rdev), (i), (p), (f)) |
1795 | #define radeon_asic_vm_init(rdev) (rdev)->asic->vm.init((rdev)) |
2766 | #define radeon_asic_vm_init(rdev) (rdev)->asic->vm.init((rdev)) |
1796 | #define radeon_asic_vm_fini(rdev) (rdev)->asic->vm.fini((rdev)) |
2767 | #define radeon_asic_vm_fini(rdev) (rdev)->asic->vm.fini((rdev)) |
- | 2768 | #define radeon_asic_vm_copy_pages(rdev, ib, pe, src, count) ((rdev)->asic->vm.copy_pages((rdev), (ib), (pe), (src), (count))) |
|
- | 2769 | #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))) |
|
1797 | #define radeon_asic_vm_set_page(rdev, ib, pe, addr, count, incr, flags) ((rdev)->asic->vm.set_page((rdev), (ib), (pe), (addr), (count), (incr), (flags))) |
2770 | #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))) |
- | 2771 | #define radeon_asic_vm_pad_ib(rdev, ib) ((rdev)->asic->vm.pad_ib((ib))) |
|
1798 | #define radeon_ring_start(rdev, r, cp) (rdev)->asic->ring[(r)].ring_start((rdev), (cp)) |
2772 | #define radeon_ring_start(rdev, r, cp) (rdev)->asic->ring[(r)]->ring_start((rdev), (cp)) |
1799 | #define radeon_ring_test(rdev, r, cp) (rdev)->asic->ring[(r)].ring_test((rdev), (cp)) |
2773 | #define radeon_ring_test(rdev, r, cp) (rdev)->asic->ring[(r)]->ring_test((rdev), (cp)) |
1800 | #define radeon_ib_test(rdev, r, cp) (rdev)->asic->ring[(r)].ib_test((rdev), (cp)) |
2774 | #define radeon_ib_test(rdev, r, cp) (rdev)->asic->ring[(r)]->ib_test((rdev), (cp)) |
1801 | #define radeon_ring_ib_execute(rdev, r, ib) (rdev)->asic->ring[(r)].ib_execute((rdev), (ib)) |
2775 | #define radeon_ring_ib_execute(rdev, r, ib) (rdev)->asic->ring[(r)]->ib_execute((rdev), (ib)) |
1802 | #define radeon_ring_ib_parse(rdev, r, ib) (rdev)->asic->ring[(r)].ib_parse((rdev), (ib)) |
2776 | #define radeon_ring_ib_parse(rdev, r, ib) (rdev)->asic->ring[(r)]->ib_parse((rdev), (ib)) |
1803 | #define radeon_ring_is_lockup(rdev, r, cp) (rdev)->asic->ring[(r)].is_lockup((rdev), (cp)) |
2777 | #define radeon_ring_is_lockup(rdev, r, cp) (rdev)->asic->ring[(r)]->is_lockup((rdev), (cp)) |
1804 | #define radeon_ring_vm_flush(rdev, r, vm) (rdev)->asic->ring[(r)].vm_flush((rdev), (r), (vm)) |
2778 | #define radeon_ring_vm_flush(rdev, r, vm) (rdev)->asic->ring[(r)]->vm_flush((rdev), (r), (vm)) |
- | 2779 | #define radeon_ring_get_rptr(rdev, r) (rdev)->asic->ring[(r)->idx]->get_rptr((rdev), (r)) |
|
- | 2780 | #define radeon_ring_get_wptr(rdev, r) (rdev)->asic->ring[(r)->idx]->get_wptr((rdev), (r)) |
|
- | 2781 | #define radeon_ring_set_wptr(rdev, r) (rdev)->asic->ring[(r)->idx]->set_wptr((rdev), (r)) |
|
1805 | #define radeon_irq_set(rdev) (rdev)->asic->irq.set((rdev)) |
2782 | #define radeon_irq_set(rdev) (rdev)->asic->irq.set((rdev)) |
1806 | #define radeon_irq_process(rdev) (rdev)->asic->irq.process((rdev)) |
2783 | #define radeon_irq_process(rdev) (rdev)->asic->irq.process((rdev)) |
1807 | #define radeon_get_vblank_counter(rdev, crtc) (rdev)->asic->display.get_vblank_counter((rdev), (crtc)) |
2784 | #define radeon_get_vblank_counter(rdev, crtc) (rdev)->asic->display.get_vblank_counter((rdev), (crtc)) |
1808 | #define radeon_set_backlight_level(rdev, e, l) (rdev)->asic->display.set_backlight_level((e), (l)) |
2785 | #define radeon_set_backlight_level(rdev, e, l) (rdev)->asic->display.set_backlight_level((e), (l)) |
1809 | #define radeon_get_backlight_level(rdev, e) (rdev)->asic->display.get_backlight_level((e)) |
2786 | #define radeon_get_backlight_level(rdev, e) (rdev)->asic->display.get_backlight_level((e)) |
1810 | #define radeon_hdmi_enable(rdev, e, b) (rdev)->asic->display.hdmi_enable((e), (b)) |
2787 | #define radeon_hdmi_enable(rdev, e, b) (rdev)->asic->display.hdmi_enable((e), (b)) |
1811 | #define radeon_hdmi_setmode(rdev, e, m) (rdev)->asic->display.hdmi_setmode((e), (m)) |
2788 | #define radeon_hdmi_setmode(rdev, e, m) (rdev)->asic->display.hdmi_setmode((e), (m)) |
1812 | #define radeon_fence_ring_emit(rdev, r, fence) (rdev)->asic->ring[(r)].emit_fence((rdev), (fence)) |
2789 | #define radeon_fence_ring_emit(rdev, r, fence) (rdev)->asic->ring[(r)]->emit_fence((rdev), (fence)) |
1813 | #define radeon_semaphore_ring_emit(rdev, r, cp, semaphore, emit_wait) (rdev)->asic->ring[(r)].emit_semaphore((rdev), (cp), (semaphore), (emit_wait)) |
2790 | #define radeon_semaphore_ring_emit(rdev, r, cp, semaphore, emit_wait) (rdev)->asic->ring[(r)]->emit_semaphore((rdev), (cp), (semaphore), (emit_wait)) |
1814 | #define radeon_copy_blit(rdev, s, d, np, f) (rdev)->asic->copy.blit((rdev), (s), (d), (np), (f)) |
2791 | #define radeon_copy_blit(rdev, s, d, np, f) (rdev)->asic->copy.blit((rdev), (s), (d), (np), (f)) |
1815 | #define radeon_copy_dma(rdev, s, d, np, f) (rdev)->asic->copy.dma((rdev), (s), (d), (np), (f)) |
2792 | #define radeon_copy_dma(rdev, s, d, np, f) (rdev)->asic->copy.dma((rdev), (s), (d), (np), (f)) |
1816 | #define radeon_copy(rdev, s, d, np, f) (rdev)->asic->copy.copy((rdev), (s), (d), (np), (f)) |
2793 | #define radeon_copy(rdev, s, d, np, f) (rdev)->asic->copy.copy((rdev), (s), (d), (np), (f)) |
1817 | #define radeon_copy_blit_ring_index(rdev) (rdev)->asic->copy.blit_ring_index |
2794 | #define radeon_copy_blit_ring_index(rdev) (rdev)->asic->copy.blit_ring_index |
1818 | #define radeon_copy_dma_ring_index(rdev) (rdev)->asic->copy.dma_ring_index |
2795 | #define radeon_copy_dma_ring_index(rdev) (rdev)->asic->copy.dma_ring_index |
Line 1823... | Line 2800... | ||
1823 | #define radeon_set_memory_clock(rdev, e) (rdev)->asic->pm.set_memory_clock((rdev), (e)) |
2800 | #define radeon_set_memory_clock(rdev, e) (rdev)->asic->pm.set_memory_clock((rdev), (e)) |
1824 | #define radeon_get_pcie_lanes(rdev) (rdev)->asic->pm.get_pcie_lanes((rdev)) |
2801 | #define radeon_get_pcie_lanes(rdev) (rdev)->asic->pm.get_pcie_lanes((rdev)) |
1825 | #define radeon_set_pcie_lanes(rdev, l) (rdev)->asic->pm.set_pcie_lanes((rdev), (l)) |
2802 | #define radeon_set_pcie_lanes(rdev, l) (rdev)->asic->pm.set_pcie_lanes((rdev), (l)) |
1826 | #define radeon_set_clock_gating(rdev, e) (rdev)->asic->pm.set_clock_gating((rdev), (e)) |
2803 | #define radeon_set_clock_gating(rdev, e) (rdev)->asic->pm.set_clock_gating((rdev), (e)) |
1827 | #define radeon_set_uvd_clocks(rdev, v, d) (rdev)->asic->pm.set_uvd_clocks((rdev), (v), (d)) |
2804 | #define radeon_set_uvd_clocks(rdev, v, d) (rdev)->asic->pm.set_uvd_clocks((rdev), (v), (d)) |
- | 2805 | #define radeon_set_vce_clocks(rdev, ev, ec) (rdev)->asic->pm.set_vce_clocks((rdev), (ev), (ec)) |
|
- | 2806 | #define radeon_get_temperature(rdev) (rdev)->asic->pm.get_temperature((rdev)) |
|
1828 | #define radeon_set_surface_reg(rdev, r, f, p, o, s) ((rdev)->asic->surface.set_reg((rdev), (r), (f), (p), (o), (s))) |
2807 | #define radeon_set_surface_reg(rdev, r, f, p, o, s) ((rdev)->asic->surface.set_reg((rdev), (r), (f), (p), (o), (s))) |
1829 | #define radeon_clear_surface_reg(rdev, r) ((rdev)->asic->surface.clear_reg((rdev), (r))) |
2808 | #define radeon_clear_surface_reg(rdev, r) ((rdev)->asic->surface.clear_reg((rdev), (r))) |
1830 | #define radeon_bandwidth_update(rdev) (rdev)->asic->display.bandwidth_update((rdev)) |
2809 | #define radeon_bandwidth_update(rdev) (rdev)->asic->display.bandwidth_update((rdev)) |
1831 | #define radeon_hpd_init(rdev) (rdev)->asic->hpd.init((rdev)) |
2810 | #define radeon_hpd_init(rdev) (rdev)->asic->hpd.init((rdev)) |
1832 | #define radeon_hpd_fini(rdev) (rdev)->asic->hpd.fini((rdev)) |
2811 | #define radeon_hpd_fini(rdev) (rdev)->asic->hpd.fini((rdev)) |
Line 1836... | Line 2815... | ||
1836 | #define radeon_pm_misc(rdev) (rdev)->asic->pm.misc((rdev)) |
2815 | #define radeon_pm_misc(rdev) (rdev)->asic->pm.misc((rdev)) |
1837 | #define radeon_pm_prepare(rdev) (rdev)->asic->pm.prepare((rdev)) |
2816 | #define radeon_pm_prepare(rdev) (rdev)->asic->pm.prepare((rdev)) |
1838 | #define radeon_pm_finish(rdev) (rdev)->asic->pm.finish((rdev)) |
2817 | #define radeon_pm_finish(rdev) (rdev)->asic->pm.finish((rdev)) |
1839 | #define radeon_pm_init_profile(rdev) (rdev)->asic->pm.init_profile((rdev)) |
2818 | #define radeon_pm_init_profile(rdev) (rdev)->asic->pm.init_profile((rdev)) |
1840 | #define radeon_pm_get_dynpm_state(rdev) (rdev)->asic->pm.get_dynpm_state((rdev)) |
2819 | #define radeon_pm_get_dynpm_state(rdev) (rdev)->asic->pm.get_dynpm_state((rdev)) |
1841 | #define radeon_pre_page_flip(rdev, crtc) (rdev)->asic->pflip.pre_page_flip((rdev), (crtc)) |
- | |
1842 | #define radeon_page_flip(rdev, crtc, base) (rdev)->asic->pflip.page_flip((rdev), (crtc), (base)) |
2820 | #define radeon_page_flip(rdev, crtc, base) (rdev)->asic->pflip.page_flip((rdev), (crtc), (base)) |
1843 | #define radeon_post_page_flip(rdev, crtc) (rdev)->asic->pflip.post_page_flip((rdev), (crtc)) |
2821 | #define radeon_page_flip_pending(rdev, crtc) (rdev)->asic->pflip.page_flip_pending((rdev), (crtc)) |
1844 | #define radeon_wait_for_vblank(rdev, crtc) (rdev)->asic->display.wait_for_vblank((rdev), (crtc)) |
2822 | #define radeon_wait_for_vblank(rdev, crtc) (rdev)->asic->display.wait_for_vblank((rdev), (crtc)) |
1845 | #define radeon_mc_wait_for_idle(rdev) (rdev)->asic->mc_wait_for_idle((rdev)) |
2823 | #define radeon_mc_wait_for_idle(rdev) (rdev)->asic->mc_wait_for_idle((rdev)) |
1846 | #define radeon_get_xclk(rdev) (rdev)->asic->get_xclk((rdev)) |
2824 | #define radeon_get_xclk(rdev) (rdev)->asic->get_xclk((rdev)) |
1847 | #define radeon_get_gpu_clock_counter(rdev) (rdev)->asic->get_gpu_clock_counter((rdev)) |
2825 | #define radeon_get_gpu_clock_counter(rdev) (rdev)->asic->get_gpu_clock_counter((rdev)) |
- | 2826 | #define radeon_dpm_init(rdev) rdev->asic->dpm.init((rdev)) |
|
- | 2827 | #define radeon_dpm_setup_asic(rdev) rdev->asic->dpm.setup_asic((rdev)) |
|
- | 2828 | #define radeon_dpm_enable(rdev) rdev->asic->dpm.enable((rdev)) |
|
- | 2829 | #define radeon_dpm_late_enable(rdev) rdev->asic->dpm.late_enable((rdev)) |
|
- | 2830 | #define radeon_dpm_disable(rdev) rdev->asic->dpm.disable((rdev)) |
|
- | 2831 | #define radeon_dpm_pre_set_power_state(rdev) rdev->asic->dpm.pre_set_power_state((rdev)) |
|
- | 2832 | #define radeon_dpm_set_power_state(rdev) rdev->asic->dpm.set_power_state((rdev)) |
|
- | 2833 | #define radeon_dpm_post_set_power_state(rdev) rdev->asic->dpm.post_set_power_state((rdev)) |
|
- | 2834 | #define radeon_dpm_display_configuration_changed(rdev) rdev->asic->dpm.display_configuration_changed((rdev)) |
|
- | 2835 | #define radeon_dpm_fini(rdev) rdev->asic->dpm.fini((rdev)) |
|
- | 2836 | #define radeon_dpm_get_sclk(rdev, l) rdev->asic->dpm.get_sclk((rdev), (l)) |
|
- | 2837 | #define radeon_dpm_get_mclk(rdev, l) rdev->asic->dpm.get_mclk((rdev), (l)) |
|
- | 2838 | #define radeon_dpm_print_power_state(rdev, ps) rdev->asic->dpm.print_power_state((rdev), (ps)) |
|
- | 2839 | #define radeon_dpm_debugfs_print_current_performance_level(rdev, m) rdev->asic->dpm.debugfs_print_current_performance_level((rdev), (m)) |
|
- | 2840 | #define radeon_dpm_force_performance_level(rdev, l) rdev->asic->dpm.force_performance_level((rdev), (l)) |
|
- | 2841 | #define radeon_dpm_vblank_too_short(rdev) rdev->asic->dpm.vblank_too_short((rdev)) |
|
- | 2842 | #define radeon_dpm_powergate_uvd(rdev, g) rdev->asic->dpm.powergate_uvd((rdev), (g)) |
|
- | 2843 | #define radeon_dpm_enable_bapm(rdev, e) rdev->asic->dpm.enable_bapm((rdev), (e)) |
|
Line 1848... | Line 2844... | ||
1848 | 2844 | ||
1849 | /* Common functions */ |
2845 | /* Common functions */ |
1850 | /* AGP */ |
2846 | /* AGP */ |
- | 2847 | extern int radeon_gpu_reset(struct radeon_device *rdev); |
|
1851 | extern int radeon_gpu_reset(struct radeon_device *rdev); |
2848 | extern void radeon_pci_config_reset(struct radeon_device *rdev); |
1852 | extern void r600_set_bios_scratch_engine_hung(struct radeon_device *rdev, bool hung); |
2849 | extern void r600_set_bios_scratch_engine_hung(struct radeon_device *rdev, bool hung); |
1853 | extern void radeon_agp_disable(struct radeon_device *rdev); |
2850 | extern void radeon_agp_disable(struct radeon_device *rdev); |
1854 | extern int radeon_modeset_init(struct radeon_device *rdev); |
2851 | extern int radeon_modeset_init(struct radeon_device *rdev); |
1855 | extern void radeon_modeset_fini(struct radeon_device *rdev); |
2852 | extern void radeon_modeset_fini(struct radeon_device *rdev); |
Line 1867... | Line 2864... | ||
1867 | extern void radeon_atom_set_clock_gating(struct radeon_device *rdev, int enable); |
2864 | extern void radeon_atom_set_clock_gating(struct radeon_device *rdev, int enable); |
1868 | extern void radeon_ttm_placement_from_domain(struct radeon_bo *rbo, u32 domain); |
2865 | extern void radeon_ttm_placement_from_domain(struct radeon_bo *rbo, u32 domain); |
1869 | extern bool radeon_ttm_bo_is_radeon_bo(struct ttm_buffer_object *bo); |
2866 | extern bool radeon_ttm_bo_is_radeon_bo(struct ttm_buffer_object *bo); |
1870 | extern void radeon_vram_location(struct radeon_device *rdev, struct radeon_mc *mc, u64 base); |
2867 | extern void radeon_vram_location(struct radeon_device *rdev, struct radeon_mc *mc, u64 base); |
1871 | extern void radeon_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc); |
2868 | extern void radeon_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc); |
1872 | extern int radeon_resume_kms(struct drm_device *dev); |
2869 | extern int radeon_resume_kms(struct drm_device *dev, bool resume, bool fbcon); |
1873 | extern int radeon_suspend_kms(struct drm_device *dev, pm_message_t state); |
2870 | extern int radeon_suspend_kms(struct drm_device *dev, bool suspend, bool fbcon); |
1874 | extern void radeon_ttm_set_active_vram_size(struct radeon_device *rdev, u64 size); |
2871 | extern void radeon_ttm_set_active_vram_size(struct radeon_device *rdev, u64 size); |
1875 | extern void radeon_program_register_sequence(struct radeon_device *rdev, |
2872 | extern void radeon_program_register_sequence(struct radeon_device *rdev, |
1876 | const u32 *registers, |
2873 | const u32 *registers, |
1877 | const u32 array_size); |
2874 | const u32 array_size); |
Line 1878... | Line 2875... | ||
1878 | 2875 | ||
1879 | /* |
2876 | /* |
1880 | * vm |
2877 | * vm |
1881 | */ |
2878 | */ |
1882 | int radeon_vm_manager_init(struct radeon_device *rdev); |
2879 | int radeon_vm_manager_init(struct radeon_device *rdev); |
1883 | void radeon_vm_manager_fini(struct radeon_device *rdev); |
2880 | void radeon_vm_manager_fini(struct radeon_device *rdev); |
1884 | void radeon_vm_init(struct radeon_device *rdev, struct radeon_vm *vm); |
2881 | int radeon_vm_init(struct radeon_device *rdev, struct radeon_vm *vm); |
1885 | void radeon_vm_fini(struct radeon_device *rdev, struct radeon_vm *vm); |
2882 | void radeon_vm_fini(struct radeon_device *rdev, struct radeon_vm *vm); |
- | 2883 | struct radeon_cs_reloc *radeon_vm_get_bos(struct radeon_device *rdev, |
|
1886 | int radeon_vm_alloc_pt(struct radeon_device *rdev, struct radeon_vm *vm); |
2884 | struct radeon_vm *vm, |
1887 | void radeon_vm_add_to_lru(struct radeon_device *rdev, struct radeon_vm *vm); |
2885 | struct list_head *head); |
1888 | struct radeon_fence *radeon_vm_grab_id(struct radeon_device *rdev, |
2886 | struct radeon_fence *radeon_vm_grab_id(struct radeon_device *rdev, |
- | 2887 | struct radeon_vm *vm, int ring); |
|
- | 2888 | void radeon_vm_flush(struct radeon_device *rdev, |
|
- | 2889 | struct radeon_vm *vm, |
|
1889 | struct radeon_vm *vm, int ring); |
2890 | int ring); |
1890 | void radeon_vm_fence(struct radeon_device *rdev, |
2891 | void radeon_vm_fence(struct radeon_device *rdev, |
1891 | struct radeon_vm *vm, |
2892 | struct radeon_vm *vm, |
1892 | struct radeon_fence *fence); |
2893 | struct radeon_fence *fence); |
1893 | uint64_t radeon_vm_map_gart(struct radeon_device *rdev, uint64_t addr); |
2894 | uint64_t radeon_vm_map_gart(struct radeon_device *rdev, uint64_t addr); |
1894 | int radeon_vm_bo_update_pte(struct radeon_device *rdev, |
2895 | int radeon_vm_update_page_directory(struct radeon_device *rdev, |
- | 2896 | struct radeon_vm *vm); |
|
- | 2897 | int radeon_vm_clear_freed(struct radeon_device *rdev, |
|
- | 2898 | struct radeon_vm *vm); |
|
1895 | struct radeon_vm *vm, |
2899 | int radeon_vm_clear_invalids(struct radeon_device *rdev, |
- | 2900 | struct radeon_vm *vm); |
|
- | 2901 | int radeon_vm_bo_update(struct radeon_device *rdev, |
|
1896 | struct radeon_bo *bo, |
2902 | struct radeon_bo_va *bo_va, |
1897 | struct ttm_mem_reg *mem); |
2903 | struct ttm_mem_reg *mem); |
1898 | void radeon_vm_bo_invalidate(struct radeon_device *rdev, |
2904 | void radeon_vm_bo_invalidate(struct radeon_device *rdev, |
1899 | struct radeon_bo *bo); |
2905 | struct radeon_bo *bo); |
1900 | struct radeon_bo_va *radeon_vm_bo_find(struct radeon_vm *vm, |
2906 | struct radeon_bo_va *radeon_vm_bo_find(struct radeon_vm *vm, |
Line 1904... | Line 2910... | ||
1904 | struct radeon_bo *bo); |
2910 | struct radeon_bo *bo); |
1905 | int radeon_vm_bo_set_addr(struct radeon_device *rdev, |
2911 | int radeon_vm_bo_set_addr(struct radeon_device *rdev, |
1906 | struct radeon_bo_va *bo_va, |
2912 | struct radeon_bo_va *bo_va, |
1907 | uint64_t offset, |
2913 | uint64_t offset, |
1908 | uint32_t flags); |
2914 | uint32_t flags); |
1909 | int radeon_vm_bo_rmv(struct radeon_device *rdev, |
2915 | void radeon_vm_bo_rmv(struct radeon_device *rdev, |
1910 | struct radeon_bo_va *bo_va); |
2916 | struct radeon_bo_va *bo_va); |
Line 1911... | Line 2917... | ||
1911 | 2917 | ||
1912 | /* audio */ |
2918 | /* audio */ |
- | 2919 | void r600_audio_update_hdmi(struct work_struct *work); |
|
- | 2920 | struct r600_audio_pin *r600_audio_get_pin(struct radeon_device *rdev); |
|
- | 2921 | struct r600_audio_pin *dce6_audio_get_pin(struct radeon_device *rdev); |
|
- | 2922 | void r600_audio_enable(struct radeon_device *rdev, |
|
- | 2923 | struct r600_audio_pin *pin, |
|
- | 2924 | bool enable); |
|
- | 2925 | void dce6_audio_enable(struct radeon_device *rdev, |
|
- | 2926 | struct r600_audio_pin *pin, |
|
Line 1913... | Line 2927... | ||
1913 | void r600_audio_update_hdmi(struct work_struct *work); |
2927 | bool enable); |
1914 | 2928 | ||
1915 | /* |
2929 | /* |
1916 | * R600 vram scratch functions |
2930 | * R600 vram scratch functions |
Line 1962... | Line 2976... | ||
1962 | 2976 | ||
1963 | /* radeon_acpi.c */ |
2977 | /* radeon_acpi.c */ |
1964 | #if defined(CONFIG_ACPI) |
2978 | #if defined(CONFIG_ACPI) |
1965 | extern int radeon_acpi_init(struct radeon_device *rdev); |
2979 | extern int radeon_acpi_init(struct radeon_device *rdev); |
- | 2980 | extern void radeon_acpi_fini(struct radeon_device *rdev); |
|
- | 2981 | extern bool radeon_acpi_is_pcie_performance_request_supported(struct radeon_device *rdev); |
|
- | 2982 | extern int radeon_acpi_pcie_performance_request(struct radeon_device *rdev, |
|
- | 2983 | u8 perf_req, bool advertise); |
|
1966 | extern void radeon_acpi_fini(struct radeon_device *rdev); |
2984 | extern int radeon_acpi_pcie_notify_device_ready(struct radeon_device *rdev); |
1967 | #else |
2985 | #else |
1968 | static inline int radeon_acpi_init(struct radeon_device *rdev) { return 0; } |
2986 | static inline int radeon_acpi_init(struct radeon_device *rdev) { return 0; } |
1969 | static inline void radeon_acpi_fini(struct radeon_device *rdev) { } |
2987 | static inline void radeon_acpi_fini(struct radeon_device *rdev) { } |
Line -... | Line 2988... | ||
- | 2988 | #endif |
|
- | 2989 | ||
- | 2990 | int radeon_cs_packet_parse(struct radeon_cs_parser *p, |
|
- | 2991 | struct radeon_cs_packet *pkt, |
|
- | 2992 | unsigned idx); |
|
- | 2993 | bool radeon_cs_packet_next_is_pkt3_nop(struct radeon_cs_parser *p); |
|
- | 2994 | void radeon_cs_dump_packet(struct radeon_cs_parser *p, |
|
- | 2995 | struct radeon_cs_packet *pkt); |
|
- | 2996 | int radeon_cs_packet_next_reloc(struct radeon_cs_parser *p, |
|
- | 2997 | struct radeon_cs_reloc **cs_reloc, |
|
- | 2998 | int nomm); |
|
- | 2999 | int r600_cs_common_vline_parse(struct radeon_cs_parser *p, |
|
- | 3000 | uint32_t *vline_start_end, |
|
1970 | #endif |
3001 | uint32_t *vline_status); |
Line 1971... | Line 3002... | ||
1971 | 3002 | ||
Line 1972... | Line 3003... | ||
1972 | #include "radeon_object.h" |
3003 | #include "radeon_object.h" |
1973 | 3004 | ||
1974 | #define DRM_UDELAY(d) udelay(d) |
3005 | #define DRM_UDELAY(d) udelay(d) |
1975 | 3006 | ||
Line 1976... | Line -... | ||
1976 | resource_size_t |
- | |
1977 | drm_get_resource_start(struct drm_device *dev, unsigned int resource); |
- | |
1978 | resource_size_t |
- | |
1979 | drm_get_resource_len(struct drm_device *dev, unsigned int resource); |
- | |
1980 | - | ||
1981 | bool set_mode(struct drm_device *dev, struct drm_connector *connector, |
- | |
1982 | videomode_t *mode, bool strict); |
- | |
Line 1983... | Line 3007... | ||
1983 | 3007 | resource_size_t |