diff options
author | Christian König <deathsimple@vodafone.de> | 2013-04-08 06:41:29 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2013-04-09 10:31:33 -0400 |
commit | f2ba57b5eab8817d86d0f108fdf1878e51dc0a37 (patch) | |
tree | e784f0573069f6341768968fe3d49df6d2c9a534 /drivers/gpu/drm/radeon/radeon.h | |
parent | 4474f3a91f95e3fcc62d97e36f1e8e3392c96ee0 (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.h | 41 |
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 { | |||
1121 | int radeon_pm_get_type_index(struct radeon_device *rdev, | 1125 | int 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 | |||
1135 | struct 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 | |||
1143 | int radeon_uvd_init(struct radeon_device *rdev); | ||
1144 | void radeon_uvd_fini(struct radeon_device *rdev); | ||
1145 | int radeon_uvd_suspend(struct radeon_device *rdev); | ||
1146 | int radeon_uvd_resume(struct radeon_device *rdev); | ||
1147 | int radeon_uvd_get_create_msg(struct radeon_device *rdev, int ring, | ||
1148 | uint32_t handle, struct radeon_fence **fence); | ||
1149 | int radeon_uvd_get_destroy_msg(struct radeon_device *rdev, int ring, | ||
1150 | uint32_t handle, struct radeon_fence **fence); | ||
1151 | void radeon_uvd_force_into_uvd_segment(struct radeon_bo *rbo); | ||
1152 | void radeon_uvd_free_handles(struct radeon_device *rdev, | ||
1153 | struct drm_file *filp); | ||
1154 | int radeon_uvd_cs_parse(struct radeon_cs_parser *parser); | ||
1124 | 1155 | ||
1125 | struct r600_audio { | 1156 | struct 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 */ |