aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/radeon.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon.h')
-rw-r--r--drivers/gpu/drm/radeon/radeon.h321
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;
88extern int radeon_testing; 89extern int radeon_testing;
89extern int radeon_connector_table; 90extern int radeon_connector_table;
90extern int radeon_tv; 91extern int radeon_tv;
91extern int radeon_new_pll;
92extern int radeon_audio; 92extern int radeon_audio;
93extern int radeon_disp_priority; 93extern int radeon_disp_priority;
94extern int radeon_hw_i2c; 94extern int radeon_hw_i2c;
95extern 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);
176void radeon_pm_resume(struct radeon_device *rdev); 178void radeon_pm_resume(struct radeon_device *rdev);
177void radeon_combios_get_power_modes(struct radeon_device *rdev); 179void radeon_combios_get_power_modes(struct radeon_device *rdev);
178void radeon_atombios_get_power_modes(struct radeon_device *rdev); 180void radeon_atombios_get_power_modes(struct radeon_device *rdev);
179void radeon_atom_set_voltage(struct radeon_device *rdev, u16 level); 181void radeon_atom_set_voltage(struct radeon_device *rdev, u16 voltage_level, u8 voltage_type);
182int radeon_atom_get_max_vddc(struct radeon_device *rdev, u16 *voltage);
180void rs690_pm_info(struct radeon_device *rdev); 183void rs690_pm_info(struct radeon_device *rdev);
181extern u32 rv6xx_get_temp(struct radeon_device *rdev); 184extern int rv6xx_get_temp(struct radeon_device *rdev);
182extern u32 rv770_get_temp(struct radeon_device *rdev); 185extern int rv770_get_temp(struct radeon_device *rdev);
183extern u32 evergreen_get_temp(struct radeon_device *rdev); 186extern int evergreen_get_temp(struct radeon_device *rdev);
187extern 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
262struct radeon_bo_list { 267struct 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);
288void radeon_gem_object_unpin(struct drm_gem_object *obj); 292void radeon_gem_object_unpin(struct drm_gem_object *obj);
289 293
294int radeon_mode_dumb_create(struct drm_file *file_priv,
295 struct drm_device *dev,
296 struct drm_mode_create_dumb *args);
297int radeon_mode_dumb_mmap(struct drm_file *filp,
298 struct drm_device *dev,
299 uint32_t handle, uint64_t *offset_p);
300int 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);
330void radeon_gart_unbind(struct radeon_device *rdev, unsigned offset, 344void radeon_gart_unbind(struct radeon_device *rdev, unsigned offset,
331 int pages); 345 int pages);
332int radeon_gart_bind(struct radeon_device *rdev, unsigned offset, 346int 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 */
367struct radeon_scratch { 381struct 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
396struct 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
406struct r500_irq_stat_regs {
407 u32 disp_int;
408};
409
410struct 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
418struct 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
433union 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
380struct radeon_irq { 439struct 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
397int radeon_irq_kms_init(struct radeon_device *rdev); 460int radeon_irq_kms_init(struct radeon_device *rdev);
398void radeon_irq_kms_fini(struct radeon_device *rdev); 461void radeon_irq_kms_fini(struct radeon_device *rdev);
399void radeon_irq_kms_sw_irq_get(struct radeon_device *rdev); 462void radeon_irq_kms_sw_irq_get(struct radeon_device *rdev);
400void radeon_irq_kms_sw_irq_put(struct radeon_device *rdev); 463void radeon_irq_kms_sw_irq_put(struct radeon_device *rdev);
464void radeon_irq_kms_pflip_irq_get(struct radeon_device *rdev, int crtc);
465void 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
685struct radeon_voltage { 761struct 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
1060struct 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
973union radeon_asic_config { 1099union 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,
1118void radeon_device_fini(struct radeon_device *rdev); 1248void radeon_device_fini(struct radeon_device *rdev);
1119int radeon_gpu_wait_for_idle(struct radeon_device *rdev); 1249int radeon_gpu_wait_for_idle(struct radeon_device *rdev);
1120 1250
1121/* r600 blit */
1122int r600_blit_prepare_copy(struct radeon_device *rdev, int size_bytes);
1123void r600_blit_done_copy(struct radeon_device *rdev, struct radeon_fence *fence);
1124void r600_kms_blit_copy(struct radeon_device *rdev,
1125 u64 src_gpu_addr, u64 dst_gpu_addr,
1126 int size_bytes);
1127
1128static inline uint32_t r100_mm_rreg(struct radeon_device *rdev, uint32_t reg) 1251static 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);
1341extern void radeon_update_display_priority(struct radeon_device *rdev); 1484extern void radeon_update_display_priority(struct radeon_device *rdev);
1342extern bool radeon_boot_test_post_card(struct radeon_device *rdev); 1485extern bool radeon_boot_test_post_card(struct radeon_device *rdev);
1343extern void radeon_scratch_init(struct radeon_device *rdev); 1486extern void radeon_scratch_init(struct radeon_device *rdev);
1487extern void radeon_wb_fini(struct radeon_device *rdev);
1488extern int radeon_wb_init(struct radeon_device *rdev);
1489extern void radeon_wb_disable(struct radeon_device *rdev);
1344extern void radeon_surface_init(struct radeon_device *rdev); 1490extern void radeon_surface_init(struct radeon_device *rdev);
1345extern int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data); 1491extern int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data);
1346extern void radeon_legacy_set_clock_gating(struct radeon_device *rdev, int enable); 1492extern 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
1351extern void radeon_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc); 1497extern void radeon_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc);
1352extern int radeon_resume_kms(struct drm_device *dev); 1498extern int radeon_resume_kms(struct drm_device *dev);
1353extern int radeon_suspend_kms(struct drm_device *dev, pm_message_t state); 1499extern int radeon_suspend_kms(struct drm_device *dev, pm_message_t state);
1500extern 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/*
1356extern void r100_gpu_lockup_update(struct r100_gpu_lockup *lockup, struct radeon_cp *cp); 1503 * r600 functions used by radeon_encoder.c
1357extern 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 */
1360extern void r200_set_safe_registers(struct radeon_device *rdev);
1361
1362/* r300,r350,rv350,rv370,rv380 */
1363extern void r300_set_reg_safe(struct radeon_device *rdev);
1364extern void r300_mc_program(struct radeon_device *rdev);
1365extern void r300_mc_init(struct radeon_device *rdev);
1366extern void r300_clock_startup(struct radeon_device *rdev);
1367extern int r300_mc_wait_for_idle(struct radeon_device *rdev);
1368extern int rv370_pcie_gart_init(struct radeon_device *rdev);
1369extern void rv370_pcie_gart_fini(struct radeon_device *rdev);
1370extern int rv370_pcie_gart_enable(struct radeon_device *rdev);
1371extern void rv370_pcie_gart_disable(struct radeon_device *rdev);
1372
1373/* r420,r423,rv410 */
1374extern u32 r420_mc_rreg(struct radeon_device *rdev, u32 reg);
1375extern void r420_mc_wreg(struct radeon_device *rdev, u32 reg, u32 v);
1376extern int r420_debugfs_pipes_info_init(struct radeon_device *rdev);
1377extern void r420_pipes_init(struct radeon_device *rdev);
1378
1379/* rv515 */
1380struct 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};
1388extern void rv515_bandwidth_avivo_update(struct radeon_device *rdev);
1389extern void rv515_vga_render_disable(struct radeon_device *rdev);
1390extern void rv515_set_safe_registers(struct radeon_device *rdev);
1391extern void rv515_mc_stop(struct radeon_device *rdev, struct rv515_mc_save *save);
1392extern void rv515_mc_resume(struct radeon_device *rdev, struct rv515_mc_save *save);
1393extern void rv515_clock_startup(struct radeon_device *rdev);
1394extern void rv515_debugfs(struct radeon_device *rdev);
1395extern int rv515_suspend(struct radeon_device *rdev);
1396
1397/* rs400 */
1398extern int rs400_gart_init(struct radeon_device *rdev);
1399extern int rs400_gart_enable(struct radeon_device *rdev);
1400extern void rs400_gart_adjust_size(struct radeon_device *rdev);
1401extern void rs400_gart_disable(struct radeon_device *rdev);
1402extern void rs400_gart_fini(struct radeon_device *rdev);
1403
1404/* rs600 */
1405extern void rs600_set_safe_registers(struct radeon_device *rdev);
1406extern int rs600_irq_set(struct radeon_device *rdev);
1407extern void rs600_irq_disable(struct radeon_device *rdev);
1408
1409/* rs690, rs740 */
1410extern 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 */
1415extern void r600_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc);
1416extern bool r600_card_posted(struct radeon_device *rdev);
1417extern void r600_cp_stop(struct radeon_device *rdev);
1418extern int r600_cp_start(struct radeon_device *rdev);
1419extern void r600_ring_init(struct radeon_device *rdev, unsigned ring_size);
1420extern int r600_cp_resume(struct radeon_device *rdev);
1421extern void r600_cp_fini(struct radeon_device *rdev);
1422extern int r600_count_pipe_bits(uint32_t val);
1423extern int r600_mc_wait_for_idle(struct radeon_device *rdev);
1424extern int r600_pcie_gart_init(struct radeon_device *rdev);
1425extern void r600_pcie_gart_tlb_flush(struct radeon_device *rdev);
1426extern int r600_ib_test(struct radeon_device *rdev);
1427extern int r600_ring_test(struct radeon_device *rdev);
1428extern void r600_wb_fini(struct radeon_device *rdev);
1429extern int r600_wb_enable(struct radeon_device *rdev);
1430extern void r600_wb_disable(struct radeon_device *rdev);
1431extern void r600_scratch_init(struct radeon_device *rdev);
1432extern int r600_blit_init(struct radeon_device *rdev);
1433extern void r600_blit_fini(struct radeon_device *rdev);
1434extern int r600_init_microcode(struct radeon_device *rdev);
1435extern int r600_asic_reset(struct radeon_device *rdev);
1436/* r600 irq */
1437extern int r600_irq_init(struct radeon_device *rdev);
1438extern void r600_irq_fini(struct radeon_device *rdev);
1439extern void r600_ih_ring_init(struct radeon_device *rdev, unsigned ring_size);
1440extern int r600_irq_set(struct radeon_device *rdev);
1441extern void r600_irq_suspend(struct radeon_device *rdev);
1442extern void r600_disable_interrupts(struct radeon_device *rdev);
1443extern void r600_rlc_stop(struct radeon_device *rdev);
1444/* r600 audio */
1445extern int r600_audio_init(struct radeon_device *rdev);
1446extern int r600_audio_tmds_index(struct drm_encoder *encoder);
1447extern void r600_audio_set_clock(struct drm_encoder *encoder, int clock);
1448extern int r600_audio_channels(struct radeon_device *rdev);
1449extern int r600_audio_bits_per_sample(struct radeon_device *rdev);
1450extern int r600_audio_rate(struct radeon_device *rdev);
1451extern uint8_t r600_audio_status_bits(struct radeon_device *rdev);
1452extern uint8_t r600_audio_category_code(struct radeon_device *rdev);
1453extern void r600_audio_schedule_polling(struct radeon_device *rdev);
1454extern void r600_audio_enable_polling(struct drm_encoder *encoder);
1455extern void r600_audio_disable_polling(struct drm_encoder *encoder);
1456extern void r600_audio_fini(struct radeon_device *rdev);
1457extern void r600_hdmi_init(struct drm_encoder *encoder);
1458extern void r600_hdmi_enable(struct drm_encoder *encoder); 1505extern void r600_hdmi_enable(struct drm_encoder *encoder);
1459extern void r600_hdmi_disable(struct drm_encoder *encoder); 1506extern void r600_hdmi_disable(struct drm_encoder *encoder);
1460extern void r600_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode *mode); 1507extern void r600_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mode *mode);
1461extern int r600_hdmi_buffer_status_changed(struct drm_encoder *encoder);
1462extern void r600_hdmi_update_audio_settings(struct drm_encoder *encoder);
1463 1508
1464extern void r700_cp_stop(struct radeon_device *rdev); 1509extern int ni_init_microcode(struct radeon_device *rdev);
1465extern void r700_cp_fini(struct radeon_device *rdev); 1510extern int ni_mc_load_microcode(struct radeon_device *rdev);
1466extern void evergreen_disable_interrupt_state(struct radeon_device *rdev);
1467extern 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);
1473static inline int radeon_acpi_init(struct radeon_device *rdev) { return 0; } 1516static inline int radeon_acpi_init(struct radeon_device *rdev) { return 0; }
1474#endif 1517#endif
1475 1518
1476/* evergreen */
1477struct 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