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.h151
1 files changed, 86 insertions, 65 deletions
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index 3a7095743d44..e9486630a467 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"
@@ -180,6 +181,7 @@ void rs690_pm_info(struct radeon_device *rdev);
180extern u32 rv6xx_get_temp(struct radeon_device *rdev); 181extern u32 rv6xx_get_temp(struct radeon_device *rdev);
181extern u32 rv770_get_temp(struct radeon_device *rdev); 182extern u32 rv770_get_temp(struct radeon_device *rdev);
182extern u32 evergreen_get_temp(struct radeon_device *rdev); 183extern u32 evergreen_get_temp(struct radeon_device *rdev);
184extern u32 sumo_get_temp(struct radeon_device *rdev);
183 185
184/* 186/*
185 * Fences. 187 * Fences.
@@ -259,13 +261,12 @@ struct radeon_bo {
259}; 261};
260 262
261struct radeon_bo_list { 263struct radeon_bo_list {
262 struct list_head list; 264 struct ttm_validate_buffer tv;
263 struct radeon_bo *bo; 265 struct radeon_bo *bo;
264 uint64_t gpu_offset; 266 uint64_t gpu_offset;
265 unsigned rdomain; 267 unsigned rdomain;
266 unsigned wdomain; 268 unsigned wdomain;
267 u32 tiling_flags; 269 u32 tiling_flags;
268 bool reserved;
269}; 270};
270 271
271/* 272/*
@@ -377,11 +378,56 @@ void radeon_scratch_free(struct radeon_device *rdev, uint32_t reg);
377/* 378/*
378 * IRQS. 379 * IRQS.
379 */ 380 */
381
382struct radeon_unpin_work {
383 struct work_struct work;
384 struct radeon_device *rdev;
385 int crtc_id;
386 struct radeon_fence *fence;
387 struct drm_pending_vblank_event *event;
388 struct radeon_bo *old_rbo;
389 u64 new_crtc_base;
390};
391
392struct r500_irq_stat_regs {
393 u32 disp_int;
394};
395
396struct r600_irq_stat_regs {
397 u32 disp_int;
398 u32 disp_int_cont;
399 u32 disp_int_cont2;
400 u32 d1grph_int;
401 u32 d2grph_int;
402};
403
404struct evergreen_irq_stat_regs {
405 u32 disp_int;
406 u32 disp_int_cont;
407 u32 disp_int_cont2;
408 u32 disp_int_cont3;
409 u32 disp_int_cont4;
410 u32 disp_int_cont5;
411 u32 d1grph_int;
412 u32 d2grph_int;
413 u32 d3grph_int;
414 u32 d4grph_int;
415 u32 d5grph_int;
416 u32 d6grph_int;
417};
418
419union radeon_irq_stat_regs {
420 struct r500_irq_stat_regs r500;
421 struct r600_irq_stat_regs r600;
422 struct evergreen_irq_stat_regs evergreen;
423};
424
380struct radeon_irq { 425struct radeon_irq {
381 bool installed; 426 bool installed;
382 bool sw_int; 427 bool sw_int;
383 /* FIXME: use a define max crtc rather than hardcode it */ 428 /* FIXME: use a define max crtc rather than hardcode it */
384 bool crtc_vblank_int[6]; 429 bool crtc_vblank_int[6];
430 bool pflip[6];
385 wait_queue_head_t vblank_queue; 431 wait_queue_head_t vblank_queue;
386 /* FIXME: use defines for max hpd/dacs */ 432 /* FIXME: use defines for max hpd/dacs */
387 bool hpd[6]; 433 bool hpd[6];
@@ -392,12 +438,17 @@ struct radeon_irq {
392 bool hdmi[2]; 438 bool hdmi[2];
393 spinlock_t sw_lock; 439 spinlock_t sw_lock;
394 int sw_refcount; 440 int sw_refcount;
441 union radeon_irq_stat_regs stat_regs;
442 spinlock_t pflip_lock[6];
443 int pflip_refcount[6];
395}; 444};
396 445
397int radeon_irq_kms_init(struct radeon_device *rdev); 446int radeon_irq_kms_init(struct radeon_device *rdev);
398void radeon_irq_kms_fini(struct radeon_device *rdev); 447void radeon_irq_kms_fini(struct radeon_device *rdev);
399void radeon_irq_kms_sw_irq_get(struct radeon_device *rdev); 448void radeon_irq_kms_sw_irq_get(struct radeon_device *rdev);
400void radeon_irq_kms_sw_irq_put(struct radeon_device *rdev); 449void radeon_irq_kms_sw_irq_put(struct radeon_device *rdev);
450void radeon_irq_kms_pflip_irq_get(struct radeon_device *rdev, int crtc);
451void radeon_irq_kms_pflip_irq_put(struct radeon_device *rdev, int crtc);
401 452
402/* 453/*
403 * CP & ring. 454 * CP & ring.
@@ -687,6 +738,8 @@ enum radeon_int_thermal_type {
687 THERMAL_TYPE_RV6XX, 738 THERMAL_TYPE_RV6XX,
688 THERMAL_TYPE_RV770, 739 THERMAL_TYPE_RV770,
689 THERMAL_TYPE_EVERGREEN, 740 THERMAL_TYPE_EVERGREEN,
741 THERMAL_TYPE_SUMO,
742 THERMAL_TYPE_NI,
690}; 743};
691 744
692struct radeon_voltage { 745struct radeon_voltage {
@@ -770,6 +823,9 @@ struct radeon_pm {
770 u32 current_sclk; 823 u32 current_sclk;
771 u32 current_mclk; 824 u32 current_mclk;
772 u32 current_vddc; 825 u32 current_vddc;
826 u32 default_sclk;
827 u32 default_mclk;
828 u32 default_vddc;
773 struct radeon_i2c_chan *i2c_bus; 829 struct radeon_i2c_chan *i2c_bus;
774 /* selected pm method */ 830 /* selected pm method */
775 enum radeon_pm_method pm_method; 831 enum radeon_pm_method pm_method;
@@ -881,6 +937,10 @@ struct radeon_asic {
881 void (*pm_finish)(struct radeon_device *rdev); 937 void (*pm_finish)(struct radeon_device *rdev);
882 void (*pm_init_profile)(struct radeon_device *rdev); 938 void (*pm_init_profile)(struct radeon_device *rdev);
883 void (*pm_get_dynpm_state)(struct radeon_device *rdev); 939 void (*pm_get_dynpm_state)(struct radeon_device *rdev);
940 /* pageflipping */
941 void (*pre_page_flip)(struct radeon_device *rdev, int crtc);
942 u32 (*page_flip)(struct radeon_device *rdev, int crtc, u64 crtc_base);
943 void (*post_page_flip)(struct radeon_device *rdev, int crtc);
884}; 944};
885 945
886/* 946/*
@@ -975,6 +1035,7 @@ struct evergreen_asic {
975 unsigned tiling_npipes; 1035 unsigned tiling_npipes;
976 unsigned tiling_group_size; 1036 unsigned tiling_group_size;
977 unsigned tile_config; 1037 unsigned tile_config;
1038 struct r100_gpu_lockup lockup;
978}; 1039};
979 1040
980union radeon_asic_config { 1041union radeon_asic_config {
@@ -1091,11 +1152,11 @@ struct radeon_device {
1091 const struct firmware *me_fw; /* all family ME firmware */ 1152 const struct firmware *me_fw; /* all family ME firmware */
1092 const struct firmware *pfp_fw; /* r6/700 PFP firmware */ 1153 const struct firmware *pfp_fw; /* r6/700 PFP firmware */
1093 const struct firmware *rlc_fw; /* r6/700 RLC firmware */ 1154 const struct firmware *rlc_fw; /* r6/700 RLC firmware */
1155 const struct firmware *mc_fw; /* NI MC firmware */
1094 struct r600_blit r600_blit; 1156 struct r600_blit r600_blit;
1095 struct r700_vram_scratch vram_scratch; 1157 struct r700_vram_scratch vram_scratch;
1096 int msi_enabled; /* msi enabled */ 1158 int msi_enabled; /* msi enabled */
1097 struct r600_ih ih; /* r6/700 interrupt ring */ 1159 struct r600_ih ih; /* r6/700 interrupt ring */
1098 struct workqueue_struct *wq;
1099 struct work_struct hotplug_work; 1160 struct work_struct hotplug_work;
1100 int num_crtc; /* number of crtcs */ 1161 int num_crtc; /* number of crtcs */
1101 struct mutex dc_hw_i2c_mutex; /* display controller hw i2c mutex */ 1162 struct mutex dc_hw_i2c_mutex; /* display controller hw i2c mutex */
@@ -1110,10 +1171,10 @@ struct radeon_device {
1110 uint8_t audio_status_bits; 1171 uint8_t audio_status_bits;
1111 uint8_t audio_category_code; 1172 uint8_t audio_category_code;
1112 1173
1113 bool powered_down;
1114 struct notifier_block acpi_nb; 1174 struct notifier_block acpi_nb;
1115 /* only one userspace can use Hyperz features at a time */ 1175 /* only one userspace can use Hyperz features or CMASK at a time */
1116 struct drm_file *hyperz_filp; 1176 struct drm_file *hyperz_filp;
1177 struct drm_file *cmask_filp;
1117 /* i2c buses */ 1178 /* i2c buses */
1118 struct radeon_i2c_chan *i2c_bus[RADEON_MAX_I2C_BUS]; 1179 struct radeon_i2c_chan *i2c_bus[RADEON_MAX_I2C_BUS];
1119}; 1180};
@@ -1188,6 +1249,8 @@ static inline void r100_io_wreg(struct radeon_device *rdev, u32 reg, u32 v)
1188 */ 1249 */
1189#define RREG8(reg) readb(((void __iomem *)rdev->rmmio) + (reg)) 1250#define RREG8(reg) readb(((void __iomem *)rdev->rmmio) + (reg))
1190#define WREG8(reg, v) writeb(v, ((void __iomem *)rdev->rmmio) + (reg)) 1251#define WREG8(reg, v) writeb(v, ((void __iomem *)rdev->rmmio) + (reg))
1252#define RREG16(reg) readw(((void __iomem *)rdev->rmmio) + (reg))
1253#define WREG16(reg, v) writew(v, ((void __iomem *)rdev->rmmio) + (reg))
1191#define RREG32(reg) r100_mm_rreg(rdev, (reg)) 1254#define RREG32(reg) r100_mm_rreg(rdev, (reg))
1192#define DREG32(reg) printk(KERN_INFO "REGISTER: " #reg " : 0x%08X\n", r100_mm_rreg(rdev, (reg))) 1255#define DREG32(reg) printk(KERN_INFO "REGISTER: " #reg " : 0x%08X\n", r100_mm_rreg(rdev, (reg)))
1193#define WREG32(reg, v) r100_mm_wreg(rdev, (reg), (v)) 1256#define WREG32(reg, v) r100_mm_wreg(rdev, (reg), (v))
@@ -1261,6 +1324,14 @@ void r100_pll_errata_after_index(struct radeon_device *rdev);
1261 (rdev->family == CHIP_RV410) || \ 1324 (rdev->family == CHIP_RV410) || \
1262 (rdev->family == CHIP_RS400) || \ 1325 (rdev->family == CHIP_RS400) || \
1263 (rdev->family == CHIP_RS480)) 1326 (rdev->family == CHIP_RS480))
1327#define ASIC_IS_X2(rdev) ((rdev->ddev->pdev->device == 0x9441) || \
1328 (rdev->ddev->pdev->device == 0x9443) || \
1329 (rdev->ddev->pdev->device == 0x944B) || \
1330 (rdev->ddev->pdev->device == 0x9506) || \
1331 (rdev->ddev->pdev->device == 0x9509) || \
1332 (rdev->ddev->pdev->device == 0x950F) || \
1333 (rdev->ddev->pdev->device == 0x689C) || \
1334 (rdev->ddev->pdev->device == 0x689D))
1264#define ASIC_IS_AVIVO(rdev) ((rdev->family >= CHIP_RS600)) 1335#define ASIC_IS_AVIVO(rdev) ((rdev->family >= CHIP_RS600))
1265#define ASIC_IS_DCE2(rdev) ((rdev->family == CHIP_RS600) || \ 1336#define ASIC_IS_DCE2(rdev) ((rdev->family == CHIP_RS600) || \
1266 (rdev->family == CHIP_RS690) || \ 1337 (rdev->family == CHIP_RS690) || \
@@ -1269,6 +1340,9 @@ void r100_pll_errata_after_index(struct radeon_device *rdev);
1269#define ASIC_IS_DCE3(rdev) ((rdev->family >= CHIP_RV620)) 1340#define ASIC_IS_DCE3(rdev) ((rdev->family >= CHIP_RV620))
1270#define ASIC_IS_DCE32(rdev) ((rdev->family >= CHIP_RV730)) 1341#define ASIC_IS_DCE32(rdev) ((rdev->family >= CHIP_RV730))
1271#define ASIC_IS_DCE4(rdev) ((rdev->family >= CHIP_CEDAR)) 1342#define ASIC_IS_DCE4(rdev) ((rdev->family >= CHIP_CEDAR))
1343#define ASIC_IS_DCE41(rdev) ((rdev->family >= CHIP_PALM) && \
1344 (rdev->flags & RADEON_IS_IGP))
1345#define ASIC_IS_DCE5(rdev) ((rdev->family >= CHIP_BARTS))
1272 1346
1273/* 1347/*
1274 * BIOS helpers. 1348 * BIOS helpers.
@@ -1344,6 +1418,9 @@ static inline void radeon_ring_write(struct radeon_device *rdev, uint32_t v)
1344#define radeon_pm_finish(rdev) (rdev)->asic->pm_finish((rdev)) 1418#define radeon_pm_finish(rdev) (rdev)->asic->pm_finish((rdev))
1345#define radeon_pm_init_profile(rdev) (rdev)->asic->pm_init_profile((rdev)) 1419#define radeon_pm_init_profile(rdev) (rdev)->asic->pm_init_profile((rdev))
1346#define radeon_pm_get_dynpm_state(rdev) (rdev)->asic->pm_get_dynpm_state((rdev)) 1420#define radeon_pm_get_dynpm_state(rdev) (rdev)->asic->pm_get_dynpm_state((rdev))
1421#define radeon_pre_page_flip(rdev, crtc) rdev->asic->pre_page_flip((rdev), (crtc))
1422#define radeon_page_flip(rdev, crtc, base) rdev->asic->page_flip((rdev), (crtc), (base))
1423#define radeon_post_page_flip(rdev, crtc) rdev->asic->post_page_flip((rdev), (crtc))
1347 1424
1348/* Common functions */ 1425/* Common functions */
1349/* AGP */ 1426/* AGP */
@@ -1372,67 +1449,7 @@ extern void radeon_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc
1372extern int radeon_resume_kms(struct drm_device *dev); 1449extern int radeon_resume_kms(struct drm_device *dev);
1373extern int radeon_suspend_kms(struct drm_device *dev, pm_message_t state); 1450extern int radeon_suspend_kms(struct drm_device *dev, pm_message_t state);
1374 1451
1375/* r100,rv100,rs100,rv200,rs200,r200,rv250,rs300,rv280 */
1376extern void r100_gpu_lockup_update(struct r100_gpu_lockup *lockup, struct radeon_cp *cp);
1377extern bool r100_gpu_cp_is_lockup(struct radeon_device *rdev, struct r100_gpu_lockup *lockup, struct radeon_cp *cp);
1378
1379/* rv200,rv250,rv280 */
1380extern void r200_set_safe_registers(struct radeon_device *rdev);
1381
1382/* r300,r350,rv350,rv370,rv380 */
1383extern void r300_set_reg_safe(struct radeon_device *rdev);
1384extern void r300_mc_program(struct radeon_device *rdev);
1385extern void r300_mc_init(struct radeon_device *rdev);
1386extern void r300_clock_startup(struct radeon_device *rdev);
1387extern int r300_mc_wait_for_idle(struct radeon_device *rdev);
1388extern int rv370_pcie_gart_init(struct radeon_device *rdev);
1389extern void rv370_pcie_gart_fini(struct radeon_device *rdev);
1390extern int rv370_pcie_gart_enable(struct radeon_device *rdev);
1391extern void rv370_pcie_gart_disable(struct radeon_device *rdev);
1392
1393/* r420,r423,rv410 */
1394extern u32 r420_mc_rreg(struct radeon_device *rdev, u32 reg);
1395extern void r420_mc_wreg(struct radeon_device *rdev, u32 reg, u32 v);
1396extern int r420_debugfs_pipes_info_init(struct radeon_device *rdev);
1397extern void r420_pipes_init(struct radeon_device *rdev);
1398
1399/* rv515 */
1400struct rv515_mc_save {
1401 u32 d1vga_control;
1402 u32 d2vga_control;
1403 u32 vga_render_control;
1404 u32 vga_hdp_control;
1405 u32 d1crtc_control;
1406 u32 d2crtc_control;
1407};
1408extern void rv515_bandwidth_avivo_update(struct radeon_device *rdev);
1409extern void rv515_vga_render_disable(struct radeon_device *rdev);
1410extern void rv515_set_safe_registers(struct radeon_device *rdev);
1411extern void rv515_mc_stop(struct radeon_device *rdev, struct rv515_mc_save *save);
1412extern void rv515_mc_resume(struct radeon_device *rdev, struct rv515_mc_save *save);
1413extern void rv515_clock_startup(struct radeon_device *rdev);
1414extern void rv515_debugfs(struct radeon_device *rdev);
1415extern int rv515_suspend(struct radeon_device *rdev);
1416
1417/* rs400 */
1418extern int rs400_gart_init(struct radeon_device *rdev);
1419extern int rs400_gart_enable(struct radeon_device *rdev);
1420extern void rs400_gart_adjust_size(struct radeon_device *rdev);
1421extern void rs400_gart_disable(struct radeon_device *rdev);
1422extern void rs400_gart_fini(struct radeon_device *rdev);
1423
1424/* rs600 */
1425extern void rs600_set_safe_registers(struct radeon_device *rdev);
1426extern int rs600_irq_set(struct radeon_device *rdev);
1427extern void rs600_irq_disable(struct radeon_device *rdev);
1428
1429/* rs690, rs740 */
1430extern void rs690_line_buffer_adjust(struct radeon_device *rdev,
1431 struct drm_display_mode *mode1,
1432 struct drm_display_mode *mode2);
1433
1434/* r600, rv610, rv630, rv620, rv635, rv670, rs780, rs880 */ 1452/* r600, rv610, rv630, rv620, rv635, rv670, rs780, rs880 */
1435extern void r600_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc);
1436extern bool r600_card_posted(struct radeon_device *rdev); 1453extern bool r600_card_posted(struct radeon_device *rdev);
1437extern void r600_cp_stop(struct radeon_device *rdev); 1454extern void r600_cp_stop(struct radeon_device *rdev);
1438extern int r600_cp_start(struct radeon_device *rdev); 1455extern int r600_cp_start(struct radeon_device *rdev);
@@ -1478,6 +1495,7 @@ extern void r600_hdmi_setmode(struct drm_encoder *encoder, struct drm_display_mo
1478extern int r600_hdmi_buffer_status_changed(struct drm_encoder *encoder); 1495extern int r600_hdmi_buffer_status_changed(struct drm_encoder *encoder);
1479extern void r600_hdmi_update_audio_settings(struct drm_encoder *encoder); 1496extern void r600_hdmi_update_audio_settings(struct drm_encoder *encoder);
1480 1497
1498extern void r700_vram_gtt_location(struct radeon_device *rdev, struct radeon_mc *mc);
1481extern void r700_cp_stop(struct radeon_device *rdev); 1499extern void r700_cp_stop(struct radeon_device *rdev);
1482extern void r700_cp_fini(struct radeon_device *rdev); 1500extern void r700_cp_fini(struct radeon_device *rdev);
1483extern void evergreen_disable_interrupt_state(struct radeon_device *rdev); 1501extern void evergreen_disable_interrupt_state(struct radeon_device *rdev);
@@ -1485,6 +1503,9 @@ extern int evergreen_irq_set(struct radeon_device *rdev);
1485extern int evergreen_blit_init(struct radeon_device *rdev); 1503extern int evergreen_blit_init(struct radeon_device *rdev);
1486extern void evergreen_blit_fini(struct radeon_device *rdev); 1504extern void evergreen_blit_fini(struct radeon_device *rdev);
1487 1505
1506extern int ni_init_microcode(struct radeon_device *rdev);
1507extern int btc_mc_load_microcode(struct radeon_device *rdev);
1508
1488/* radeon_acpi.c */ 1509/* radeon_acpi.c */
1489#if defined(CONFIG_ACPI) 1510#if defined(CONFIG_ACPI)
1490extern int radeon_acpi_init(struct radeon_device *rdev); 1511extern int radeon_acpi_init(struct radeon_device *rdev);