Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amdgpu: vce use multiple cache surface starting from stoney

Signed-off-by: Leo Liu <leo.liu@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Leo Liu and committed by
Alex Deucher
3c0ff9f1 d6c29c30

+14 -5
+14 -5
drivers/gpu/drm/amd/amdgpu/vce_v3_0.c
··· 40 40 41 41 #define GRBM_GFX_INDEX__VCE_INSTANCE__SHIFT 0x04 42 42 #define GRBM_GFX_INDEX__VCE_INSTANCE_MASK 0x10 43 + #define mmVCE_LMI_VCPU_CACHE_40BIT_BAR0 0x8616 44 + #define mmVCE_LMI_VCPU_CACHE_40BIT_BAR1 0x8617 45 + #define mmVCE_LMI_VCPU_CACHE_40BIT_BAR2 0x8618 43 46 44 47 #define VCE_V3_0_FW_SIZE (384 * 1024) 45 48 #define VCE_V3_0_STACK_SIZE (64 * 1024) ··· 133 130 134 131 /* set BUSY flag */ 135 132 WREG32_P(mmVCE_STATUS, 1, ~1); 136 - 137 - WREG32_P(mmVCE_VCPU_CNTL, VCE_VCPU_CNTL__CLK_EN_MASK, 138 - ~VCE_VCPU_CNTL__CLK_EN_MASK); 133 + if (adev->asic_type >= CHIP_STONEY) 134 + WREG32_P(mmVCE_VCPU_CNTL, 1, ~0x200001); 135 + else 136 + WREG32_P(mmVCE_VCPU_CNTL, VCE_VCPU_CNTL__CLK_EN_MASK, 137 + ~VCE_VCPU_CNTL__CLK_EN_MASK); 139 138 140 139 WREG32_P(mmVCE_SOFT_RESET, 141 140 VCE_SOFT_RESET__ECPU_SOFT_RESET_MASK, ··· 396 391 WREG32(mmVCE_LMI_SWAP_CNTL, 0); 397 392 WREG32(mmVCE_LMI_SWAP_CNTL1, 0); 398 393 WREG32(mmVCE_LMI_VM_CTRL, 0); 399 - 400 - WREG32(mmVCE_LMI_VCPU_CACHE_40BIT_BAR, (adev->vce.gpu_addr >> 8)); 394 + if (adev->asic_type >= CHIP_STONEY) { 395 + WREG32(mmVCE_LMI_VCPU_CACHE_40BIT_BAR0, (adev->vce.gpu_addr >> 8)); 396 + WREG32(mmVCE_LMI_VCPU_CACHE_40BIT_BAR1, (adev->vce.gpu_addr >> 8)); 397 + WREG32(mmVCE_LMI_VCPU_CACHE_40BIT_BAR2, (adev->vce.gpu_addr >> 8)); 398 + } else 399 + WREG32(mmVCE_LMI_VCPU_CACHE_40BIT_BAR, (adev->vce.gpu_addr >> 8)); 401 400 offset = AMDGPU_VCE_FIRMWARE_OFFSET; 402 401 size = VCE_V3_0_FW_SIZE; 403 402 WREG32(mmVCE_VCPU_CACHE_OFFSET0, offset & 0x7fffffff);