diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/vce_v4_0.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/vce_v4_0.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/vce_v4_0.c b/drivers/gpu/drm/amd/amdgpu/vce_v4_0.c index f3f5938430d4..c0ec27991c22 100644 --- a/drivers/gpu/drm/amd/amdgpu/vce_v4_0.c +++ b/drivers/gpu/drm/amd/amdgpu/vce_v4_0.c | |||
@@ -244,13 +244,18 @@ static int vce_v4_0_sriov_start(struct amdgpu_device *adev) | |||
244 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_LMI_SWAP_CNTL1), 0); | 244 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_LMI_SWAP_CNTL1), 0); |
245 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_LMI_VM_CTRL), 0); | 245 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_LMI_VM_CTRL), 0); |
246 | 246 | ||
247 | offset = AMDGPU_VCE_FIRMWARE_OFFSET; | ||
247 | if (adev->firmware.load_type == AMDGPU_FW_LOAD_PSP) { | 248 | if (adev->firmware.load_type == AMDGPU_FW_LOAD_PSP) { |
249 | uint32_t low = adev->firmware.ucode[AMDGPU_UCODE_ID_VCE].tmr_mc_addr_lo; | ||
250 | uint32_t hi = adev->firmware.ucode[AMDGPU_UCODE_ID_VCE].tmr_mc_addr_hi; | ||
251 | uint64_t tmr_mc_addr = (uint64_t)(hi) << 32 | low; | ||
252 | |||
248 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, | 253 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, |
249 | mmVCE_LMI_VCPU_CACHE_40BIT_BAR0), | 254 | mmVCE_LMI_VCPU_CACHE_40BIT_BAR0), tmr_mc_addr >> 8); |
250 | adev->firmware.ucode[AMDGPU_UCODE_ID_VCE].mc_addr >> 8); | ||
251 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, | 255 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, |
252 | mmVCE_LMI_VCPU_CACHE_64BIT_BAR0), | 256 | mmVCE_LMI_VCPU_CACHE_64BIT_BAR0), |
253 | (adev->firmware.ucode[AMDGPU_UCODE_ID_VCE].mc_addr >> 40) & 0xff); | 257 | (tmr_mc_addr >> 40) & 0xff); |
258 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_VCPU_CACHE_OFFSET0), 0); | ||
254 | } else { | 259 | } else { |
255 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, | 260 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, |
256 | mmVCE_LMI_VCPU_CACHE_40BIT_BAR0), | 261 | mmVCE_LMI_VCPU_CACHE_40BIT_BAR0), |
@@ -258,6 +263,9 @@ static int vce_v4_0_sriov_start(struct amdgpu_device *adev) | |||
258 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, | 263 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, |
259 | mmVCE_LMI_VCPU_CACHE_64BIT_BAR0), | 264 | mmVCE_LMI_VCPU_CACHE_64BIT_BAR0), |
260 | (adev->vce.gpu_addr >> 40) & 0xff); | 265 | (adev->vce.gpu_addr >> 40) & 0xff); |
266 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_VCPU_CACHE_OFFSET0), | ||
267 | offset & ~0x0f000000); | ||
268 | |||
261 | } | 269 | } |
262 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, | 270 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, |
263 | mmVCE_LMI_VCPU_CACHE_40BIT_BAR1), | 271 | mmVCE_LMI_VCPU_CACHE_40BIT_BAR1), |
@@ -272,10 +280,7 @@ static int vce_v4_0_sriov_start(struct amdgpu_device *adev) | |||
272 | mmVCE_LMI_VCPU_CACHE_64BIT_BAR2), | 280 | mmVCE_LMI_VCPU_CACHE_64BIT_BAR2), |
273 | (adev->vce.gpu_addr >> 40) & 0xff); | 281 | (adev->vce.gpu_addr >> 40) & 0xff); |
274 | 282 | ||
275 | offset = AMDGPU_VCE_FIRMWARE_OFFSET; | ||
276 | size = VCE_V4_0_FW_SIZE; | 283 | size = VCE_V4_0_FW_SIZE; |
277 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_VCPU_CACHE_OFFSET0), | ||
278 | offset & ~0x0f000000); | ||
279 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_VCPU_CACHE_SIZE0), size); | 284 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_VCPU_CACHE_SIZE0), size); |
280 | 285 | ||
281 | offset = (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP) ? offset + size : 0; | 286 | offset = (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP) ? offset + size : 0; |