aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon/radeon.h
diff options
context:
space:
mode:
authorChristian König <deathsimple@vodafone.de>2013-04-08 06:41:29 -0400
committerAlex Deucher <alexander.deucher@amd.com>2013-04-09 10:31:33 -0400
commitf2ba57b5eab8817d86d0f108fdf1878e51dc0a37 (patch)
treee784f0573069f6341768968fe3d49df6d2c9a534 /drivers/gpu/drm/radeon/radeon.h
parent4474f3a91f95e3fcc62d97e36f1e8e3392c96ee0 (diff)
drm/radeon: UVD bringup v8
Just everything needed to decode videos using UVD. v6: just all the bugfixes and support for R7xx-SI merged in one patch v7: UVD_CGC_GATE is a write only register, lockup detection fix v8: split out VRAM fallback changes, remove support for RV770, add support for HEMLOCK, add buffer sizes checks Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Jerome Glisse <jglisse@redhat.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon.h')
-rw-r--r--drivers/gpu/drm/radeon/radeon.h41
1 files changed, 37 insertions, 4 deletions
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index 3db6b02c4263..66e68c1a578f 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -110,24 +110,27 @@ extern int radeon_fastfb;
110#define RADEON_BIOS_NUM_SCRATCH 8 110#define RADEON_BIOS_NUM_SCRATCH 8
111 111
112/* max number of rings */ 112/* max number of rings */
113#define RADEON_NUM_RINGS 5 113#define RADEON_NUM_RINGS 6
114 114
115/* fence seq are set to this number when signaled */ 115/* fence seq are set to this number when signaled */
116#define RADEON_FENCE_SIGNALED_SEQ 0LL 116#define RADEON_FENCE_SIGNALED_SEQ 0LL
117 117
118/* internal ring indices */ 118/* internal ring indices */
119/* r1xx+ has gfx CP ring */ 119/* r1xx+ has gfx CP ring */
120#define RADEON_RING_TYPE_GFX_INDEX 0 120#define RADEON_RING_TYPE_GFX_INDEX 0
121 121
122/* cayman has 2 compute CP rings */ 122/* cayman has 2 compute CP rings */
123#define CAYMAN_RING_TYPE_CP1_INDEX 1 123#define CAYMAN_RING_TYPE_CP1_INDEX 1
124#define CAYMAN_RING_TYPE_CP2_INDEX 2 124#define CAYMAN_RING_TYPE_CP2_INDEX 2
125 125
126/* R600+ has an async dma ring */ 126/* R600+ has an async dma ring */
127#define R600_RING_TYPE_DMA_INDEX 3 127#define R600_RING_TYPE_DMA_INDEX 3
128/* cayman add a second async dma ring */ 128/* cayman add a second async dma ring */
129#define CAYMAN_RING_TYPE_DMA1_INDEX 4 129#define CAYMAN_RING_TYPE_DMA1_INDEX 4
130 130
131/* R600+ */
132#define R600_RING_TYPE_UVD_INDEX 5
133
131/* hardcode those limit for now */ 134/* hardcode those limit for now */
132#define RADEON_VA_IB_OFFSET (1 << 20) 135#define RADEON_VA_IB_OFFSET (1 << 20)
133#define RADEON_VA_RESERVED_SIZE (8 << 20) 136#define RADEON_VA_RESERVED_SIZE (8 << 20)
@@ -921,6 +924,7 @@ struct radeon_wb {
921#define R600_WB_DMA_RPTR_OFFSET 1792 924#define R600_WB_DMA_RPTR_OFFSET 1792
922#define R600_WB_IH_WPTR_OFFSET 2048 925#define R600_WB_IH_WPTR_OFFSET 2048
923#define CAYMAN_WB_DMA1_RPTR_OFFSET 2304 926#define CAYMAN_WB_DMA1_RPTR_OFFSET 2304
927#define R600_WB_UVD_RPTR_OFFSET 2560
924#define R600_WB_EVENT_OFFSET 3072 928#define R600_WB_EVENT_OFFSET 3072
925 929
926/** 930/**
@@ -1121,6 +1125,33 @@ struct radeon_pm {
1121int radeon_pm_get_type_index(struct radeon_device *rdev, 1125int radeon_pm_get_type_index(struct radeon_device *rdev,
1122 enum radeon_pm_state_type ps_type, 1126 enum radeon_pm_state_type ps_type,
1123 int instance); 1127 int instance);
1128/*
1129 * UVD
1130 */
1131#define RADEON_MAX_UVD_HANDLES 10
1132#define RADEON_UVD_STACK_SIZE (1024*1024)
1133#define RADEON_UVD_HEAP_SIZE (1024*1024)
1134
1135struct radeon_uvd {
1136 struct radeon_bo *vcpu_bo;
1137 void *cpu_addr;
1138 uint64_t gpu_addr;
1139 atomic_t handles[RADEON_MAX_UVD_HANDLES];
1140 struct drm_file *filp[RADEON_MAX_UVD_HANDLES];
1141};
1142
1143int radeon_uvd_init(struct radeon_device *rdev);
1144void radeon_uvd_fini(struct radeon_device *rdev);
1145int radeon_uvd_suspend(struct radeon_device *rdev);
1146int radeon_uvd_resume(struct radeon_device *rdev);
1147int radeon_uvd_get_create_msg(struct radeon_device *rdev, int ring,
1148 uint32_t handle, struct radeon_fence **fence);
1149int radeon_uvd_get_destroy_msg(struct radeon_device *rdev, int ring,
1150 uint32_t handle, struct radeon_fence **fence);
1151void radeon_uvd_force_into_uvd_segment(struct radeon_bo *rbo);
1152void radeon_uvd_free_handles(struct radeon_device *rdev,
1153 struct drm_file *filp);
1154int radeon_uvd_cs_parse(struct radeon_cs_parser *parser);
1124 1155
1125struct r600_audio { 1156struct r600_audio {
1126 int channels; 1157 int channels;
@@ -1611,6 +1642,7 @@ struct radeon_device {
1611 struct radeon_asic *asic; 1642 struct radeon_asic *asic;
1612 struct radeon_gem gem; 1643 struct radeon_gem gem;
1613 struct radeon_pm pm; 1644 struct radeon_pm pm;
1645 struct radeon_uvd uvd;
1614 uint32_t bios_scratch[RADEON_BIOS_NUM_SCRATCH]; 1646 uint32_t bios_scratch[RADEON_BIOS_NUM_SCRATCH];
1615 struct radeon_wb wb; 1647 struct radeon_wb wb;
1616 struct radeon_dummy_page dummy_page; 1648 struct radeon_dummy_page dummy_page;
@@ -1625,6 +1657,7 @@ struct radeon_device {
1625 const struct firmware *rlc_fw; /* r6/700 RLC firmware */ 1657 const struct firmware *rlc_fw; /* r6/700 RLC firmware */
1626 const struct firmware *mc_fw; /* NI MC firmware */ 1658 const struct firmware *mc_fw; /* NI MC firmware */
1627 const struct firmware *ce_fw; /* SI CE firmware */ 1659 const struct firmware *ce_fw; /* SI CE firmware */
1660 const struct firmware *uvd_fw; /* UVD firmware */
1628 struct r600_blit r600_blit; 1661 struct r600_blit r600_blit;
1629 struct r600_vram_scratch vram_scratch; 1662 struct r600_vram_scratch vram_scratch;
1630 int msi_enabled; /* msi enabled */ 1663 int msi_enabled; /* msi enabled */