diff options
author | Leo Liu <leo.liu@amd.com> | 2017-02-07 16:11:20 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-05-24 17:41:38 -0400 |
commit | 81439659f4b88a0224110dacbadbd0a41a346bbc (patch) | |
tree | ad0654184bea41c61920cbd65dbc8e45cbe8167a /drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c | |
parent | ef80d30b0266c44e31bca49abd5d80cbaa2acd3f (diff) |
drm/amdgpu: implement new vcn cache window programming
Signed-off-by: Leo Liu <leo.liu@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c | 34 |
1 files changed, 16 insertions, 18 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c index adf8e525c6ea..ee27c79ea236 100644 --- a/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v1_0.c | |||
@@ -215,31 +215,29 @@ static int vcn_v1_0_resume(void *handle) | |||
215 | */ | 215 | */ |
216 | static void vcn_v1_0_mc_resume(struct amdgpu_device *adev) | 216 | static void vcn_v1_0_mc_resume(struct amdgpu_device *adev) |
217 | { | 217 | { |
218 | uint64_t offset; | 218 | uint32_t size = AMDGPU_GPU_PAGE_ALIGN(adev->vcn.fw->size + 4); |
219 | uint32_t size; | ||
220 | 219 | ||
221 | /* programm memory controller bits 0-27 */ | ||
222 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_LMI_VCPU_CACHE_64BIT_BAR_LOW), | 220 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_LMI_VCPU_CACHE_64BIT_BAR_LOW), |
223 | lower_32_bits(adev->vcn.gpu_addr)); | 221 | lower_32_bits(adev->vcn.gpu_addr)); |
224 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_LMI_VCPU_CACHE_64BIT_BAR_HIGH), | 222 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_LMI_VCPU_CACHE_64BIT_BAR_HIGH), |
225 | upper_32_bits(adev->vcn.gpu_addr)); | 223 | upper_32_bits(adev->vcn.gpu_addr)); |
226 | 224 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_VCPU_CACHE_OFFSET0), 0); | |
227 | /* Current FW has no signed header, but will be added later on */ | ||
228 | /* offset = AMDGPU_VCN_FIRMWARE_OFFSET; */ | ||
229 | offset = 0; | ||
230 | size = AMDGPU_GPU_PAGE_ALIGN(adev->vcn.fw->size + 4); | ||
231 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_VCPU_CACHE_OFFSET0), offset >> 3); | ||
232 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_VCPU_CACHE_SIZE0), size); | 225 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_VCPU_CACHE_SIZE0), size); |
233 | 226 | ||
234 | offset += size; | 227 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_LMI_VCPU_CACHE1_64BIT_BAR_LOW), |
235 | size = AMDGPU_VCN_HEAP_SIZE; | 228 | lower_32_bits(adev->vcn.gpu_addr + size)); |
236 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_VCPU_CACHE_OFFSET1), offset >> 3); | 229 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_LMI_VCPU_CACHE1_64BIT_BAR_HIGH), |
237 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_VCPU_CACHE_SIZE1), size); | 230 | upper_32_bits(adev->vcn.gpu_addr + size)); |
238 | 231 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_VCPU_CACHE_OFFSET1), 0); | |
239 | offset += size; | 232 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_VCPU_CACHE_SIZE1), AMDGPU_VCN_HEAP_SIZE); |
240 | size = AMDGPU_VCN_STACK_SIZE + (AMDGPU_VCN_SESSION_SIZE * 40); | 233 | |
241 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_VCPU_CACHE_OFFSET2), offset >> 3); | 234 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_LMI_VCPU_CACHE2_64BIT_BAR_LOW), |
242 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_VCPU_CACHE_SIZE2), size); | 235 | lower_32_bits(adev->vcn.gpu_addr + size + AMDGPU_VCN_HEAP_SIZE)); |
236 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_LMI_VCPU_CACHE2_64BIT_BAR_HIGH), | ||
237 | upper_32_bits(adev->vcn.gpu_addr + size + AMDGPU_VCN_HEAP_SIZE)); | ||
238 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_VCPU_CACHE_OFFSET2), 0); | ||
239 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_VCPU_CACHE_SIZE2), | ||
240 | AMDGPU_VCN_STACK_SIZE + (AMDGPU_VCN_SESSION_SIZE * 40)); | ||
243 | 241 | ||
244 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_UDEC_ADDR_CONFIG), | 242 | WREG32(SOC15_REG_OFFSET(UVD, 0, mmUVD_UDEC_ADDR_CONFIG), |
245 | adev->gfx.config.gb_addr_config); | 243 | adev->gfx.config.gb_addr_config); |