diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon.h')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon.h | 321 |
1 files changed, 178 insertions, 143 deletions
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h index 9ff38c99a6ea..ef0e0e016914 100644 --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h | |||
@@ -69,6 +69,7 @@ | |||
69 | #include <ttm/ttm_bo_driver.h> | 69 | #include <ttm/ttm_bo_driver.h> |
70 | #include <ttm/ttm_placement.h> | 70 | #include <ttm/ttm_placement.h> |
71 | #include <ttm/ttm_module.h> | 71 | #include <ttm/ttm_module.h> |
72 | #include <ttm/ttm_execbuf_util.h> | ||
72 | 73 | ||
73 | #include "radeon_family.h" | 74 | #include "radeon_family.h" |
74 | #include "radeon_mode.h" | 75 | #include "radeon_mode.h" |
@@ -88,10 +89,10 @@ extern int radeon_benchmarking; | |||
88 | extern int radeon_testing; | 89 | extern int radeon_testing; |
89 | extern int radeon_connector_table; | 90 | extern int radeon_connector_table; |
90 | extern int radeon_tv; | 91 | extern int radeon_tv; |
91 | extern int radeon_new_pll; | ||
92 | extern int radeon_audio; | 92 | extern int radeon_audio; |
93 | extern int radeon_disp_priority; | 93 | extern int radeon_disp_priority; |
94 | extern int radeon_hw_i2c; | 94 | extern int radeon_hw_i2c; |
95 | extern int radeon_pcie_gen2; | ||
95 | 96 | ||
96 | /* | 97 | /* |
97 | * Copy from radeon_drv.h so we don't have to include both and have conflicting | 98 | * Copy from radeon_drv.h so we don't have to include both and have conflicting |
@@ -164,6 +165,7 @@ struct radeon_clock { | |||
164 | uint32_t default_sclk; | 165 | uint32_t default_sclk; |
165 | uint32_t default_dispclk; | 166 | uint32_t default_dispclk; |
166 | uint32_t dp_extclk; | 167 | uint32_t dp_extclk; |
168 | uint32_t max_pixel_clock; | ||
167 | }; | 169 | }; |
168 | 170 | ||
169 | /* | 171 | /* |
@@ -176,11 +178,13 @@ void radeon_pm_suspend(struct radeon_device *rdev); | |||
176 | void radeon_pm_resume(struct radeon_device *rdev); | 178 | void radeon_pm_resume(struct radeon_device *rdev); |
177 | void radeon_combios_get_power_modes(struct radeon_device *rdev); | 179 | void radeon_combios_get_power_modes(struct radeon_device *rdev); |
178 | void radeon_atombios_get_power_modes(struct radeon_device *rdev); | 180 | void radeon_atombios_get_power_modes(struct radeon_device *rdev); |
179 | void radeon_atom_set_voltage(struct radeon_device *rdev, u16 level); | 181 | void radeon_atom_set_voltage(struct radeon_device *rdev, u16 voltage_level, u8 voltage_type); |
182 | int radeon_atom_get_max_vddc(struct radeon_device *rdev, u16 *voltage); | ||
180 | void rs690_pm_info(struct radeon_device *rdev); | 183 | void rs690_pm_info(struct radeon_device *rdev); |
181 | extern u32 rv6xx_get_temp(struct radeon_device *rdev); | 184 | extern int rv6xx_get_temp(struct radeon_device *rdev); |
182 | extern u32 rv770_get_temp(struct radeon_device *rdev); | 185 | extern int rv770_get_temp(struct radeon_device *rdev); |
183 | extern u32 evergreen_get_temp(struct radeon_device *rdev); | 186 | extern int evergreen_get_temp(struct radeon_device *rdev); |
187 | extern int sumo_get_temp(struct radeon_device *rdev); | ||
184 | 188 | ||
185 | /* | 189 | /* |
186 | * Fences. | 190 | * Fences. |
@@ -256,17 +260,17 @@ struct radeon_bo { | |||
256 | int surface_reg; | 260 | int surface_reg; |
257 | /* Constant after initialization */ | 261 | /* Constant after initialization */ |
258 | struct radeon_device *rdev; | 262 | struct radeon_device *rdev; |
259 | struct drm_gem_object *gobj; | 263 | struct drm_gem_object gem_base; |
260 | }; | 264 | }; |
265 | #define gem_to_radeon_bo(gobj) container_of((gobj), struct radeon_bo, gem_base) | ||
261 | 266 | ||
262 | struct radeon_bo_list { | 267 | struct radeon_bo_list { |
263 | struct list_head list; | 268 | struct ttm_validate_buffer tv; |
264 | struct radeon_bo *bo; | 269 | struct radeon_bo *bo; |
265 | uint64_t gpu_offset; | 270 | uint64_t gpu_offset; |
266 | unsigned rdomain; | 271 | unsigned rdomain; |
267 | unsigned wdomain; | 272 | unsigned wdomain; |
268 | u32 tiling_flags; | 273 | u32 tiling_flags; |
269 | bool reserved; | ||
270 | }; | 274 | }; |
271 | 275 | ||
272 | /* | 276 | /* |
@@ -287,6 +291,15 @@ int radeon_gem_object_pin(struct drm_gem_object *obj, uint32_t pin_domain, | |||
287 | uint64_t *gpu_addr); | 291 | uint64_t *gpu_addr); |
288 | void radeon_gem_object_unpin(struct drm_gem_object *obj); | 292 | void radeon_gem_object_unpin(struct drm_gem_object *obj); |
289 | 293 | ||
294 | int radeon_mode_dumb_create(struct drm_file *file_priv, | ||
295 | struct drm_device *dev, | ||
296 | struct drm_mode_create_dumb *args); | ||
297 | int radeon_mode_dumb_mmap(struct drm_file *filp, | ||
298 | struct drm_device *dev, | ||
299 | uint32_t handle, uint64_t *offset_p); | ||
300 | int radeon_mode_dumb_destroy(struct drm_file *file_priv, | ||
301 | struct drm_device *dev, | ||
302 | uint32_t handle); | ||
290 | 303 | ||
291 | /* | 304 | /* |
292 | * GART structures, functions & helpers | 305 | * GART structures, functions & helpers |
@@ -318,6 +331,7 @@ struct radeon_gart { | |||
318 | union radeon_gart_table table; | 331 | union radeon_gart_table table; |
319 | struct page **pages; | 332 | struct page **pages; |
320 | dma_addr_t *pages_addr; | 333 | dma_addr_t *pages_addr; |
334 | bool *ttm_alloced; | ||
321 | bool ready; | 335 | bool ready; |
322 | }; | 336 | }; |
323 | 337 | ||
@@ -330,7 +344,8 @@ void radeon_gart_fini(struct radeon_device *rdev); | |||
330 | void radeon_gart_unbind(struct radeon_device *rdev, unsigned offset, | 344 | void radeon_gart_unbind(struct radeon_device *rdev, unsigned offset, |
331 | int pages); | 345 | int pages); |
332 | int radeon_gart_bind(struct radeon_device *rdev, unsigned offset, | 346 | int radeon_gart_bind(struct radeon_device *rdev, unsigned offset, |
333 | int pages, struct page **pagelist); | 347 | int pages, struct page **pagelist, |
348 | dma_addr_t *dma_addr); | ||
334 | 349 | ||
335 | 350 | ||
336 | /* | 351 | /* |
@@ -344,7 +359,6 @@ struct radeon_mc { | |||
344 | * about vram size near mc fb location */ | 359 | * about vram size near mc fb location */ |
345 | u64 mc_vram_size; | 360 | u64 mc_vram_size; |
346 | u64 visible_vram_size; | 361 | u64 visible_vram_size; |
347 | u64 active_vram_size; | ||
348 | u64 gtt_size; | 362 | u64 gtt_size; |
349 | u64 gtt_start; | 363 | u64 gtt_start; |
350 | u64 gtt_end; | 364 | u64 gtt_end; |
@@ -366,6 +380,7 @@ bool radeon_atombios_sideport_present(struct radeon_device *rdev); | |||
366 | */ | 380 | */ |
367 | struct radeon_scratch { | 381 | struct radeon_scratch { |
368 | unsigned num_reg; | 382 | unsigned num_reg; |
383 | uint32_t reg_base; | ||
369 | bool free[32]; | 384 | bool free[32]; |
370 | uint32_t reg[32]; | 385 | uint32_t reg[32]; |
371 | }; | 386 | }; |
@@ -377,11 +392,56 @@ void radeon_scratch_free(struct radeon_device *rdev, uint32_t reg); | |||
377 | /* | 392 | /* |
378 | * IRQS. | 393 | * IRQS. |
379 | */ | 394 | */ |
395 | |||
396 | struct radeon_unpin_work { | ||
397 | struct work_struct work; | ||
398 | struct radeon_device *rdev; | ||
399 | int crtc_id; | ||
400 | struct radeon_fence *fence; | ||
401 | struct drm_pending_vblank_event *event; | ||
402 | struct radeon_bo *old_rbo; | ||
403 | u64 new_crtc_base; | ||
404 | }; | ||
405 | |||
406 | struct r500_irq_stat_regs { | ||
407 | u32 disp_int; | ||
408 | }; | ||
409 | |||
410 | struct r600_irq_stat_regs { | ||
411 | u32 disp_int; | ||
412 | u32 disp_int_cont; | ||
413 | u32 disp_int_cont2; | ||
414 | u32 d1grph_int; | ||
415 | u32 d2grph_int; | ||
416 | }; | ||
417 | |||
418 | struct evergreen_irq_stat_regs { | ||
419 | u32 disp_int; | ||
420 | u32 disp_int_cont; | ||
421 | u32 disp_int_cont2; | ||
422 | u32 disp_int_cont3; | ||
423 | u32 disp_int_cont4; | ||
424 | u32 disp_int_cont5; | ||
425 | u32 d1grph_int; | ||
426 | u32 d2grph_int; | ||
427 | u32 d3grph_int; | ||
428 | u32 d4grph_int; | ||
429 | u32 d5grph_int; | ||
430 | u32 d6grph_int; | ||
431 | }; | ||
432 | |||
433 | union radeon_irq_stat_regs { | ||
434 | struct r500_irq_stat_regs r500; | ||
435 | struct r600_irq_stat_regs r600; | ||
436 | struct evergreen_irq_stat_regs evergreen; | ||
437 | }; | ||
438 | |||
380 | struct radeon_irq { | 439 | struct radeon_irq { |
381 | bool installed; | 440 | bool installed; |
382 | bool sw_int; | 441 | bool sw_int; |
383 | /* FIXME: use a define max crtc rather than hardcode it */ | 442 | /* FIXME: use a define max crtc rather than hardcode it */ |
384 | bool crtc_vblank_int[6]; | 443 | bool crtc_vblank_int[6]; |
444 | bool pflip[6]; | ||
385 | wait_queue_head_t vblank_queue; | 445 | wait_queue_head_t vblank_queue; |
386 | /* FIXME: use defines for max hpd/dacs */ | 446 | /* FIXME: use defines for max hpd/dacs */ |
387 | bool hpd[6]; | 447 | bool hpd[6]; |
@@ -392,12 +452,17 @@ struct radeon_irq { | |||
392 | bool hdmi[2]; | 452 | bool hdmi[2]; |
393 | spinlock_t sw_lock; | 453 | spinlock_t sw_lock; |
394 | int sw_refcount; | 454 | int sw_refcount; |
455 | union radeon_irq_stat_regs stat_regs; | ||
456 | spinlock_t pflip_lock[6]; | ||
457 | int pflip_refcount[6]; | ||
395 | }; | 458 | }; |
396 | 459 | ||
397 | int radeon_irq_kms_init(struct radeon_device *rdev); | 460 | int radeon_irq_kms_init(struct radeon_device *rdev); |
398 | void radeon_irq_kms_fini(struct radeon_device *rdev); | 461 | void radeon_irq_kms_fini(struct radeon_device *rdev); |
399 | void radeon_irq_kms_sw_irq_get(struct radeon_device *rdev); | 462 | void radeon_irq_kms_sw_irq_get(struct radeon_device *rdev); |
400 | void radeon_irq_kms_sw_irq_put(struct radeon_device *rdev); | 463 | void radeon_irq_kms_sw_irq_put(struct radeon_device *rdev); |
464 | void radeon_irq_kms_pflip_irq_get(struct radeon_device *rdev, int crtc); | ||
465 | void radeon_irq_kms_pflip_irq_put(struct radeon_device *rdev, int crtc); | ||
401 | 466 | ||
402 | /* | 467 | /* |
403 | * CP & ring. | 468 | * CP & ring. |
@@ -594,8 +659,17 @@ struct radeon_wb { | |||
594 | struct radeon_bo *wb_obj; | 659 | struct radeon_bo *wb_obj; |
595 | volatile uint32_t *wb; | 660 | volatile uint32_t *wb; |
596 | uint64_t gpu_addr; | 661 | uint64_t gpu_addr; |
662 | bool enabled; | ||
663 | bool use_event; | ||
597 | }; | 664 | }; |
598 | 665 | ||
666 | #define RADEON_WB_SCRATCH_OFFSET 0 | ||
667 | #define RADEON_WB_CP_RPTR_OFFSET 1024 | ||
668 | #define RADEON_WB_CP1_RPTR_OFFSET 1280 | ||
669 | #define RADEON_WB_CP2_RPTR_OFFSET 1536 | ||
670 | #define R600_WB_IH_WPTR_OFFSET 2048 | ||
671 | #define R600_WB_EVENT_OFFSET 3072 | ||
672 | |||
599 | /** | 673 | /** |
600 | * struct radeon_pm - power management datas | 674 | * struct radeon_pm - power management datas |
601 | * @max_bandwidth: maximum bandwidth the gpu has (MByte/s) | 675 | * @max_bandwidth: maximum bandwidth the gpu has (MByte/s) |
@@ -607,11 +681,11 @@ struct radeon_wb { | |||
607 | * @sideport_bandwidth: sideport bandwidth the gpu has (MByte/s) (IGP) | 681 | * @sideport_bandwidth: sideport bandwidth the gpu has (MByte/s) (IGP) |
608 | * @ht_bandwidth: ht bandwidth the gpu has (MByte/s) (IGP) | 682 | * @ht_bandwidth: ht bandwidth the gpu has (MByte/s) (IGP) |
609 | * @core_bandwidth: core GPU bandwidth the gpu has (MByte/s) (IGP) | 683 | * @core_bandwidth: core GPU bandwidth the gpu has (MByte/s) (IGP) |
610 | * @sclk: GPU clock Mhz (core bandwith depends of this clock) | 684 | * @sclk: GPU clock Mhz (core bandwidth depends of this clock) |
611 | * @needed_bandwidth: current bandwidth needs | 685 | * @needed_bandwidth: current bandwidth needs |
612 | * | 686 | * |
613 | * It keeps track of various data needed to take powermanagement decision. | 687 | * It keeps track of various data needed to take powermanagement decision. |
614 | * Bandwith need is used to determine minimun clock of the GPU and memory. | 688 | * Bandwidth need is used to determine minimun clock of the GPU and memory. |
615 | * Equation between gpu/memory clock and available bandwidth is hw dependent | 689 | * Equation between gpu/memory clock and available bandwidth is hw dependent |
616 | * (type of memory, bus size, efficiency, ...) | 690 | * (type of memory, bus size, efficiency, ...) |
617 | */ | 691 | */ |
@@ -680,6 +754,8 @@ enum radeon_int_thermal_type { | |||
680 | THERMAL_TYPE_RV6XX, | 754 | THERMAL_TYPE_RV6XX, |
681 | THERMAL_TYPE_RV770, | 755 | THERMAL_TYPE_RV770, |
682 | THERMAL_TYPE_EVERGREEN, | 756 | THERMAL_TYPE_EVERGREEN, |
757 | THERMAL_TYPE_SUMO, | ||
758 | THERMAL_TYPE_NI, | ||
683 | }; | 759 | }; |
684 | 760 | ||
685 | struct radeon_voltage { | 761 | struct radeon_voltage { |
@@ -693,7 +769,9 @@ struct radeon_voltage { | |||
693 | u8 vddci_id; /* index into vddci voltage table */ | 769 | u8 vddci_id; /* index into vddci voltage table */ |
694 | bool vddci_enabled; | 770 | bool vddci_enabled; |
695 | /* r6xx+ sw */ | 771 | /* r6xx+ sw */ |
696 | u32 voltage; | 772 | u16 voltage; |
773 | /* evergreen+ vddci */ | ||
774 | u16 vddci; | ||
697 | }; | 775 | }; |
698 | 776 | ||
699 | /* clock mode flags */ | 777 | /* clock mode flags */ |
@@ -751,8 +829,7 @@ struct radeon_pm { | |||
751 | fixed20_12 sclk; | 829 | fixed20_12 sclk; |
752 | fixed20_12 mclk; | 830 | fixed20_12 mclk; |
753 | fixed20_12 needed_bandwidth; | 831 | fixed20_12 needed_bandwidth; |
754 | /* XXX: use a define for num power modes */ | 832 | struct radeon_power_state *power_state; |
755 | struct radeon_power_state power_state[8]; | ||
756 | /* number of valid power states */ | 833 | /* number of valid power states */ |
757 | int num_power_states; | 834 | int num_power_states; |
758 | int current_power_state_index; | 835 | int current_power_state_index; |
@@ -762,7 +839,12 @@ struct radeon_pm { | |||
762 | int default_power_state_index; | 839 | int default_power_state_index; |
763 | u32 current_sclk; | 840 | u32 current_sclk; |
764 | u32 current_mclk; | 841 | u32 current_mclk; |
765 | u32 current_vddc; | 842 | u16 current_vddc; |
843 | u16 current_vddci; | ||
844 | u32 default_sclk; | ||
845 | u32 default_mclk; | ||
846 | u16 default_vddc; | ||
847 | u16 default_vddci; | ||
766 | struct radeon_i2c_chan *i2c_bus; | 848 | struct radeon_i2c_chan *i2c_bus; |
767 | /* selected pm method */ | 849 | /* selected pm method */ |
768 | enum radeon_pm_method pm_method; | 850 | enum radeon_pm_method pm_method; |
@@ -874,6 +956,10 @@ struct radeon_asic { | |||
874 | void (*pm_finish)(struct radeon_device *rdev); | 956 | void (*pm_finish)(struct radeon_device *rdev); |
875 | void (*pm_init_profile)(struct radeon_device *rdev); | 957 | void (*pm_init_profile)(struct radeon_device *rdev); |
876 | void (*pm_get_dynpm_state)(struct radeon_device *rdev); | 958 | void (*pm_get_dynpm_state)(struct radeon_device *rdev); |
959 | /* pageflipping */ | ||
960 | void (*pre_page_flip)(struct radeon_device *rdev, int crtc); | ||
961 | u32 (*page_flip)(struct radeon_device *rdev, int crtc, u64 crtc_base); | ||
962 | void (*post_page_flip)(struct radeon_device *rdev, int crtc); | ||
877 | }; | 963 | }; |
878 | 964 | ||
879 | /* | 965 | /* |
@@ -968,6 +1054,46 @@ struct evergreen_asic { | |||
968 | unsigned tiling_npipes; | 1054 | unsigned tiling_npipes; |
969 | unsigned tiling_group_size; | 1055 | unsigned tiling_group_size; |
970 | unsigned tile_config; | 1056 | unsigned tile_config; |
1057 | struct r100_gpu_lockup lockup; | ||
1058 | }; | ||
1059 | |||
1060 | struct cayman_asic { | ||
1061 | unsigned max_shader_engines; | ||
1062 | unsigned max_pipes_per_simd; | ||
1063 | unsigned max_tile_pipes; | ||
1064 | unsigned max_simds_per_se; | ||
1065 | unsigned max_backends_per_se; | ||
1066 | unsigned max_texture_channel_caches; | ||
1067 | unsigned max_gprs; | ||
1068 | unsigned max_threads; | ||
1069 | unsigned max_gs_threads; | ||
1070 | unsigned max_stack_entries; | ||
1071 | unsigned sx_num_of_sets; | ||
1072 | unsigned sx_max_export_size; | ||
1073 | unsigned sx_max_export_pos_size; | ||
1074 | unsigned sx_max_export_smx_size; | ||
1075 | unsigned max_hw_contexts; | ||
1076 | unsigned sq_num_cf_insts; | ||
1077 | unsigned sc_prim_fifo_size; | ||
1078 | unsigned sc_hiz_tile_fifo_size; | ||
1079 | unsigned sc_earlyz_tile_fifo_size; | ||
1080 | |||
1081 | unsigned num_shader_engines; | ||
1082 | unsigned num_shader_pipes_per_simd; | ||
1083 | unsigned num_tile_pipes; | ||
1084 | unsigned num_simds_per_se; | ||
1085 | unsigned num_backends_per_se; | ||
1086 | unsigned backend_disable_mask_per_asic; | ||
1087 | unsigned backend_map; | ||
1088 | unsigned num_texture_channel_caches; | ||
1089 | unsigned mem_max_burst_length_bytes; | ||
1090 | unsigned mem_row_size_in_kb; | ||
1091 | unsigned shader_engine_tile_size; | ||
1092 | unsigned num_gpus; | ||
1093 | unsigned multi_gpu_tile_size; | ||
1094 | |||
1095 | unsigned tile_config; | ||
1096 | struct r100_gpu_lockup lockup; | ||
971 | }; | 1097 | }; |
972 | 1098 | ||
973 | union radeon_asic_config { | 1099 | union radeon_asic_config { |
@@ -976,6 +1102,7 @@ union radeon_asic_config { | |||
976 | struct r600_asic r600; | 1102 | struct r600_asic r600; |
977 | struct rv770_asic rv770; | 1103 | struct rv770_asic rv770; |
978 | struct evergreen_asic evergreen; | 1104 | struct evergreen_asic evergreen; |
1105 | struct cayman_asic cayman; | ||
979 | }; | 1106 | }; |
980 | 1107 | ||
981 | /* | 1108 | /* |
@@ -1066,6 +1193,9 @@ struct radeon_device { | |||
1066 | struct radeon_mman mman; | 1193 | struct radeon_mman mman; |
1067 | struct radeon_fence_driver fence_drv; | 1194 | struct radeon_fence_driver fence_drv; |
1068 | struct radeon_cp cp; | 1195 | struct radeon_cp cp; |
1196 | /* cayman compute rings */ | ||
1197 | struct radeon_cp cp1; | ||
1198 | struct radeon_cp cp2; | ||
1069 | struct radeon_ib_pool ib_pool; | 1199 | struct radeon_ib_pool ib_pool; |
1070 | struct radeon_irq irq; | 1200 | struct radeon_irq irq; |
1071 | struct radeon_asic *asic; | 1201 | struct radeon_asic *asic; |
@@ -1084,11 +1214,11 @@ struct radeon_device { | |||
1084 | const struct firmware *me_fw; /* all family ME firmware */ | 1214 | const struct firmware *me_fw; /* all family ME firmware */ |
1085 | const struct firmware *pfp_fw; /* r6/700 PFP firmware */ | 1215 | const struct firmware *pfp_fw; /* r6/700 PFP firmware */ |
1086 | const struct firmware *rlc_fw; /* r6/700 RLC firmware */ | 1216 | const struct firmware *rlc_fw; /* r6/700 RLC firmware */ |
1217 | const struct firmware *mc_fw; /* NI MC firmware */ | ||
1087 | struct r600_blit r600_blit; | 1218 | struct r600_blit r600_blit; |
1088 | struct r700_vram_scratch vram_scratch; | 1219 | struct r700_vram_scratch vram_scratch; |
1089 | int msi_enabled; /* msi enabled */ | 1220 | int msi_enabled; /* msi enabled */ |
1090 | struct r600_ih ih; /* r6/700 interrupt ring */ | 1221 | struct r600_ih ih; /* r6/700 interrupt ring */ |
1091 | struct workqueue_struct *wq; | ||
1092 | struct work_struct hotplug_work; | 1222 | struct work_struct hotplug_work; |
1093 | int num_crtc; /* number of crtcs */ | 1223 | int num_crtc; /* number of crtcs */ |
1094 | struct mutex dc_hw_i2c_mutex; /* display controller hw i2c mutex */ | 1224 | struct mutex dc_hw_i2c_mutex; /* display controller hw i2c mutex */ |
@@ -1103,10 +1233,10 @@ struct radeon_device { | |||
1103 | uint8_t audio_status_bits; | 1233 | uint8_t audio_status_bits; |
1104 | uint8_t audio_category_code; | 1234 | uint8_t audio_category_code; |
1105 | 1235 | ||
1106 | bool powered_down; | ||
1107 | struct notifier_block acpi_nb; | 1236 | struct notifier_block acpi_nb; |
1108 | /* only one userspace can use Hyperz features at a time */ | 1237 | /* only one userspace can use Hyperz features or CMASK at a time */ |
1109 | struct drm_file *hyperz_filp; | 1238 | struct drm_file *hyperz_filp; |
1239 | struct drm_file *cmask_filp; | ||
1110 | /* i2c buses */ | 1240 | /* i2c buses */ |
1111 | struct radeon_i2c_chan *i2c_bus[RADEON_MAX_I2C_BUS]; | 1241 | struct radeon_i2c_chan *i2c_bus[RADEON_MAX_I2C_BUS]; |
1112 | }; | 1242 | }; |
@@ -1118,13 +1248,6 @@ int radeon_device_init(struct radeon_device *rdev, | |||
1118 | void radeon_device_fini(struct radeon_device *rdev); | 1248 | void radeon_device_fini(struct radeon_device *rdev); |
1119 | int radeon_gpu_wait_for_idle(struct radeon_device *rdev); | 1249 | int radeon_gpu_wait_for_idle(struct radeon_device *rdev); |
1120 | 1250 | ||
1121 | /* r600 blit */ | ||
1122 | int r600_blit_prepare_copy(struct radeon_device *rdev, int size_bytes); | ||
1123 | void r600_blit_done_copy(struct radeon_device *rdev, struct radeon_fence *fence); | ||
1124 | void r600_kms_blit_copy(struct radeon_device *rdev, | ||
1125 | u64 src_gpu_addr, u64 dst_gpu_addr, | ||
1126 | int size_bytes); | ||
1127 | |||
1128 | static inline uint32_t r100_mm_rreg(struct radeon_device *rdev, uint32_t reg) | 1251 | static inline uint32_t r100_mm_rreg(struct radeon_device *rdev, uint32_t reg) |
1129 | { | 1252 | { |
1130 | if (reg < rdev->rmmio_size) | 1253 | if (reg < rdev->rmmio_size) |
@@ -1175,6 +1298,8 @@ static inline void r100_io_wreg(struct radeon_device *rdev, u32 reg, u32 v) | |||
1175 | */ | 1298 | */ |
1176 | #define RREG8(reg) readb(((void __iomem *)rdev->rmmio) + (reg)) | 1299 | #define RREG8(reg) readb(((void __iomem *)rdev->rmmio) + (reg)) |
1177 | #define WREG8(reg, v) writeb(v, ((void __iomem *)rdev->rmmio) + (reg)) | 1300 | #define WREG8(reg, v) writeb(v, ((void __iomem *)rdev->rmmio) + (reg)) |
1301 | #define RREG16(reg) readw(((void __iomem *)rdev->rmmio) + (reg)) | ||
1302 | #define WREG16(reg, v) writew(v, ((void __iomem *)rdev->rmmio) + (reg)) | ||
1178 | #define RREG32(reg) r100_mm_rreg(rdev, (reg)) | 1303 | #define RREG32(reg) r100_mm_rreg(rdev, (reg)) |
1179 | #define DREG32(reg) printk(KERN_INFO "REGISTER: " #reg " : 0x%08X\n", r100_mm_rreg(rdev, (reg))) | 1304 | #define DREG32(reg) printk(KERN_INFO "REGISTER: " #reg " : 0x%08X\n", r100_mm_rreg(rdev, (reg))) |
1180 | #define WREG32(reg, v) r100_mm_wreg(rdev, (reg), (v)) | 1305 | #define WREG32(reg, v) r100_mm_wreg(rdev, (reg), (v)) |
@@ -1248,10 +1373,25 @@ void r100_pll_errata_after_index(struct radeon_device *rdev); | |||
1248 | (rdev->family == CHIP_RV410) || \ | 1373 | (rdev->family == CHIP_RV410) || \ |
1249 | (rdev->family == CHIP_RS400) || \ | 1374 | (rdev->family == CHIP_RS400) || \ |
1250 | (rdev->family == CHIP_RS480)) | 1375 | (rdev->family == CHIP_RS480)) |
1376 | #define ASIC_IS_X2(rdev) ((rdev->ddev->pdev->device == 0x9441) || \ | ||
1377 | (rdev->ddev->pdev->device == 0x9443) || \ | ||
1378 | (rdev->ddev->pdev->device == 0x944B) || \ | ||
1379 | (rdev->ddev->pdev->device == 0x9506) || \ | ||
1380 | (rdev->ddev->pdev->device == 0x9509) || \ | ||
1381 | (rdev->ddev->pdev->device == 0x950F) || \ | ||
1382 | (rdev->ddev->pdev->device == 0x689C) || \ | ||
1383 | (rdev->ddev->pdev->device == 0x689D)) | ||
1251 | #define ASIC_IS_AVIVO(rdev) ((rdev->family >= CHIP_RS600)) | 1384 | #define ASIC_IS_AVIVO(rdev) ((rdev->family >= CHIP_RS600)) |
1385 | #define ASIC_IS_DCE2(rdev) ((rdev->family == CHIP_RS600) || \ | ||
1386 | (rdev->family == CHIP_RS690) || \ | ||
1387 | (rdev->family == CHIP_RS740) || \ | ||
1388 | (rdev->family >= CHIP_R600)) | ||
1252 | #define ASIC_IS_DCE3(rdev) ((rdev->family >= CHIP_RV620)) | 1389 | #define ASIC_IS_DCE3(rdev) ((rdev->family >= CHIP_RV620)) |
1253 | #define ASIC_IS_DCE32(rdev) ((rdev->family >= CHIP_RV730)) | 1390 | #define ASIC_IS_DCE32(rdev) ((rdev->family >= CHIP_RV730)) |
1254 | #define ASIC_IS_DCE4(rdev) ((rdev->family >= CHIP_CEDAR)) | 1391 | #define ASIC_IS_DCE4(rdev) ((rdev->family >= CHIP_CEDAR)) |
1392 | #define ASIC_IS_DCE41(rdev) ((rdev->family >= CHIP_PALM) && \ | ||
1393 | (rdev->flags & RADEON_IS_IGP)) | ||
1394 | #define ASIC_IS_DCE5(rdev) ((rdev->family >= CHIP_BARTS)) | ||
1255 | 1395 | ||
1256 | /* | 1396 | /* |
1257 | * BIOS helpers. | 1397 | * BIOS helpers. |
@@ -1327,6 +1467,9 @@ static inline void radeon_ring_write(struct radeon_device *rdev, uint32_t v) | |||
1327 | #define radeon_pm_finish(rdev) (rdev)->asic->pm_finish((rdev)) | 1467 | #define radeon_pm_finish(rdev) (rdev)->asic->pm_finish((rdev)) |
1328 | #define radeon_pm_init_profile(rdev) (rdev)->asic->pm_init_profile((rdev)) | 1468 | #define radeon_pm_init_profile(rdev) (rdev)->asic->pm_init_profile((rdev)) |
1329 | #define radeon_pm_get_dynpm_state(rdev) (rdev)->asic->pm_get_dynpm_state((rdev)) | 1469 | #define radeon_pm_get_dynpm_state(rdev) (rdev)->asic->pm_get_dynpm_state((rdev)) |
1470 | #define radeon_pre_page_flip(rdev, crtc) rdev->asic->pre_page_flip((rdev), (crtc)) | ||
1471 | #define radeon_page_flip(rdev, crtc, base) rdev->asic->page_flip((rdev), (crtc), (base)) | ||
1472 | #define radeon_post_page_flip(rdev, crtc) rdev->asic->post_page_flip((rdev), (crtc)) | ||
1330 | 1473 | ||
1331 | /* Common functions */ | 1474 | /* Common functions */ |
1332 | /* AGP */ | 1475 | /* AGP */ |
@@ -1341,6 +1484,9 @@ extern void radeon_update_bandwidth_info(struct radeon_device *rdev); | |||
1341 | extern void radeon_update_display_priority(struct radeon_device *rdev); | 1484 | extern void radeon_update_display_priority(struct radeon_device *rdev); |
1342 | extern bool radeon_boot_test_post_card(struct radeon_device *rdev); | 1485 | extern bool radeon_boot_test_post_card(struct radeon_device *rdev); |
1343 | extern void radeon_scratch_init(struct radeon_device *rdev); | 1486 | extern void radeon_scratch_init(struct radeon_device *rdev); |
1487 | extern void radeon_wb_fini(struct radeon_device *rdev); | ||
1488 | extern int radeon_wb_init(struct radeon_device *rdev); | ||
1489 | extern void radeon_wb_disable(struct radeon_device *rdev); | ||
1344 | extern void radeon_surface_init(struct radeon_device *rdev); | 1490 | extern void radeon_surface_init(struct radeon_device *rdev); |
1345 | extern int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data); | 1491 | extern int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data); |
1346 | extern void radeon_legacy_set_clock_gating(struct radeon_device *rdev, int enable); | 1492 | extern void radeon_legacy_set_clock_gating(struct radeon_device *rdev, int enable); |
@@ -1351,120 +1497,17 @@ extern void radeon_vram_location(struct radeon_device *rdev, struct radeon_mc *m | |||
1351 | extern void radeon_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc); | 1497 | extern void radeon_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc); |
1352 | extern int radeon_resume_kms(struct drm_device *dev); | 1498 | extern int radeon_resume_kms(struct drm_device *dev); |
1353 | extern int radeon_suspend_kms(struct drm_device *dev, pm_message_t state); | 1499 | extern int radeon_suspend_kms(struct drm_device *dev, pm_message_t state); |
1500 | extern void radeon_ttm_set_active_vram_size(struct radeon_device *rdev, u64 size); | ||
1354 | 1501 | ||
1355 | /* r100,rv100,rs100,rv200,rs200,r200,rv250,rs300,rv280 */ | 1502 | /* |
1356 | extern void r100_gpu_lockup_update(struct r100_gpu_lockup *lockup, struct radeon_cp *cp); | 1503 | * r600 functions used by radeon_encoder.c |
1357 | extern bool r100_gpu_cp_is_lockup(struct radeon_device *rdev, struct r100_gpu_lockup *lockup, struct radeon_cp *cp); | 1504 | */ |
1358 | |||
1359 | /* rv200,rv250,rv280 */ | ||
1360 | extern void r200_set_safe_registers(struct radeon_device *rdev); | ||
1361 | |||
1362 | /* r300,r350,rv350,rv370,rv380 */ | ||
1363 | extern void r300_set_reg_safe(struct radeon_device *rdev); | ||
1364 | extern void r300_mc_program(struct radeon_device *rdev); | ||
1365 | extern void r300_mc_init(struct radeon_device *rdev); | ||
1366 | extern void r300_clock_startup(struct radeon_device *rdev); | ||
1367 | extern int r300_mc_wait_for_idle(struct radeon_device *rdev); | ||
1368 | extern int rv370_pcie_gart_init(struct radeon_device *rdev); | ||
1369 | extern void rv370_pcie_gart_fini(struct radeon_device *rdev); | ||
1370 | extern int rv370_pcie_gart_enable(struct radeon_device *rdev); | ||
1371 | extern void rv370_pcie_gart_disable(struct radeon_device *rdev); | ||
1372 | |||
1373 | /* r420,r423,rv410 */ | ||
1374 | extern u32 r420_mc_rreg(struct radeon_device *rdev, u32 reg); | ||
1375 | extern void r420_mc_wreg(struct radeon_device *rdev, u32 reg, u32 v); | ||
1376 | extern int r420_debugfs_pipes_info_init(struct radeon_device *rdev); | ||
1377 | extern void r420_pipes_init(struct radeon_device *rdev); | ||
1378 | |||
1379 | /* rv515 */ | ||
1380 | struct rv515_mc_save { | ||
1381 | u32 d1vga_control; | ||
1382 | u32 d2vga_control; | ||
1383 | u32 vga_render_control; | ||
1384 | u32 vga_hdp_control; | ||
1385 | u32 d1crtc_control; | ||
1386 | u32 d2crtc_control; | ||
1387 | }; | ||
1388 | extern void rv515_bandwidth_avivo_update(struct radeon_device *rdev); | ||
1389 | extern void rv515_vga_render_disable(struct radeon_device *rdev); | ||
1390 | extern void rv515_set_safe_registers(struct radeon_device *rdev); | ||
1391 | extern void rv515_mc_stop(struct radeon_device *rdev, struct rv515_mc_save *save); | ||
1392 | extern void rv515_mc_resume(struct radeon_device *rdev, struct rv515_mc_save *save); | ||
1393 | extern void rv515_clock_startup(struct radeon_device *rdev); | ||
1394 | extern void rv515_debugfs(struct radeon_device *rdev); | ||
1395 | extern int rv515_suspend(struct radeon_device *rdev); | ||
1396 | |||
1397 | /* rs400 */ | ||
1398 | extern int rs400_gart_init(struct radeon_device *rdev); | ||
1399 | extern int rs400_gart_enable(struct radeon_device *rdev); | ||
1400 | extern void rs400_gart_adjust_size(struct radeon_device *rdev); | ||
1401 | extern void rs400_gart_disable(struct radeon_device *rdev); | ||
1402 | extern void rs400_gart_fini(struct radeon_device *rdev); | ||
1403 | |||
1404 | /* rs600 */ | ||
1405 | extern void rs600_set_safe_registers(struct radeon_device *rdev); | ||
1406 | extern int rs600_irq_set(struct radeon_device *rdev); | ||
1407 | extern void rs600_irq_disable(struct radeon_device *rdev); | ||
1408 | |||
1409 | /* rs690, rs740 */ | ||
1410 | extern void rs690_line_buffer_adjust(struct radeon_device *rdev, | ||
1411 | struct drm_display_mode *mode1, | ||
1412 | struct drm_display_mode *mode2); | ||
1413 | |||
1414 | /* r600, rv610, rv630, rv620, rv635, rv670, rs780, rs880 */ | ||
1415 | extern void r600_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc); | ||
1416 | extern bool r600_card_posted(struct radeon_device *rdev); | ||
1417 | extern void r600_cp_stop(struct radeon_device *rdev); | ||
1418 | extern int r600_cp_start(struct radeon_device *rdev); | ||
1419 | extern void r600_ring_init(struct radeon_device *rdev, unsigned ring_size); | ||
1420 | extern int r600_cp_resume(struct radeon_device *rdev); | ||
1421 | extern void r600_cp_fini(struct radeon_device *rdev); | ||
1422 | extern int r600_count_pipe_bits(uint32_t val); | ||
1423 | extern int r600_mc_wait_for_idle(struct radeon_device *rdev); | ||
1424 | extern int r600_pcie_gart_init(struct radeon_device *rdev); | ||
1425 | extern void r600_pcie_gart_tlb_flush(struct radeon_device *rdev); | ||
1426 | extern int r600_ib_test(struct radeon_device *rdev); | ||
1427 | extern int r600_ring_test(struct radeon_device *rdev); | ||
1428 | extern void r600_wb_fini(struct radeon_device *rdev); | ||
1429 | extern int r600_wb_enable(struct radeon_device *rdev); | ||
1430 | extern void r600_wb_disable(struct radeon_device *rdev); | ||
1431 | extern void r600_scratch_init(struct radeon_device *rdev); | ||
1432 | extern int r600_blit_init(struct radeon_device *rdev); | ||
1433 | extern void r600_blit_fini(struct radeon_device *rdev); | ||
1434 | extern int r600_init_microcode(struct radeon_device *rdev); | ||
1435 | extern int r600_asic_reset(struct radeon_device *rdev); | ||
1436 | /* r600 irq */ | ||
1437 | extern int r600_irq_init(struct radeon_device *rdev); | ||
1438 | extern void r600_irq_fini(struct radeon_device *rdev); | ||
1439 | extern void r600_ih_ring_init(struct radeon_device *rdev, unsigned ring_size); | ||
1440 | extern int r600_irq_set(struct radeon_device *rdev); | ||
1441 | extern void r600_irq_suspend(struct radeon_device *rdev); | ||
1442 | extern void r600_disable_interrupts(struct radeon_device *rdev); | ||
1443 | extern void r600_rlc_stop(struct radeon_device *rdev); | ||
1444 | /* r600 audio */ | ||
1445 | extern int r600_audio_init(struct radeon_device *rdev); | ||
1446 | extern int r600_audio_tmds_index(struct drm_encoder *encoder); | ||
1447 | extern void r600_audio_set_clock(struct drm_encoder *encoder, int clock); | ||
1448 | extern int r600_audio_channels(struct radeon_device *rdev); | ||
1449 | extern int r600_audio_bits_per_sample(struct radeon_device *rdev); | ||
1450 | extern int r600_audio_rate(struct radeon_device *rdev); | ||
1451 | extern uint8_t r600_audio_status_bits(struct radeon_device *rdev); | ||
1452 | extern uint8_t r600_audio_category_code(struct radeon_device *rdev); | ||
1453 | extern void r600_audio_schedule_polling(struct radeon_device *rdev); | ||
1454 | extern void r600_audio_enable_polling(struct drm_encoder *encoder); | ||
1455 | extern void r600_audio_disable_polling(struct drm_encoder *encoder); | ||
1456 | extern void r600_audio_fini(struct radeon_device *rdev); | ||
1457 | extern void r600_hdmi_init(struct drm_encoder *encoder); | ||
1458 | extern void r600_hdmi_enable(struct drm_encoder *encoder); | 1505 | extern void r600_hdmi_enable(struct drm_encoder *encoder); |
1459 | extern void r600_hdmi_disable(struct drm_encoder *encoder); | 1506 | extern void r600_hdmi_disable(struct drm_encoder *encoder); |
1460 | extern void r600_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode *mode); | 1507 | extern void r600_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode *mode); |
1461 | extern int r600_hdmi_buffer_status_changed(struct drm_encoder *encoder); | ||
1462 | extern void r600_hdmi_update_audio_settings(struct drm_encoder *encoder); | ||
1463 | 1508 | ||
1464 | extern void r700_cp_stop(struct radeon_device *rdev); | 1509 | extern int ni_init_microcode(struct radeon_device *rdev); |
1465 | extern void r700_cp_fini(struct radeon_device *rdev); | 1510 | extern int ni_mc_load_microcode(struct radeon_device *rdev); |
1466 | extern void evergreen_disable_interrupt_state(struct radeon_device *rdev); | ||
1467 | extern int evergreen_irq_set(struct radeon_device *rdev); | ||
1468 | 1511 | ||
1469 | /* radeon_acpi.c */ | 1512 | /* radeon_acpi.c */ |
1470 | #if defined(CONFIG_ACPI) | 1513 | #if defined(CONFIG_ACPI) |
@@ -1473,14 +1516,6 @@ extern int radeon_acpi_init(struct radeon_device *rdev); | |||
1473 | static inline int radeon_acpi_init(struct radeon_device *rdev) { return 0; } | 1516 | static inline int radeon_acpi_init(struct radeon_device *rdev) { return 0; } |
1474 | #endif | 1517 | #endif |
1475 | 1518 | ||
1476 | /* evergreen */ | ||
1477 | struct evergreen_mc_save { | ||
1478 | u32 vga_control[6]; | ||
1479 | u32 vga_render_control; | ||
1480 | u32 vga_hdp_control; | ||
1481 | u32 crtc_control[6]; | ||
1482 | }; | ||
1483 | |||
1484 | #include "radeon_object.h" | 1519 | #include "radeon_object.h" |
1485 | 1520 | ||
1486 | #endif | 1521 | #endif |