diff options
author | Frank Min <Frank.Min@amd.com> | 2017-11-06 02:34:55 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-12-06 12:48:28 -0500 |
commit | 722570435bb066c17ff42bb40fb0bbe581b2eba5 (patch) | |
tree | 9f981d37d15cef9704d9531c3d996f188cddd1d7 | |
parent | 38636603d8768eba027344dfb6b6dcdc0157081e (diff) |
drm/amdgpu: correct vce4.0 fw config for SRIOV (V2)
1. program vce 4.0 fw with 48 bit address
2. correct vce 4.0 fw stack and date offset
Acked-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Frank Min <Frank.Min@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rwxr-xr-x[-rw-r--r--] | drivers/gpu/drm/amd/amdgpu/vce_v4_0.c | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/vce_v4_0.c b/drivers/gpu/drm/amd/amdgpu/vce_v4_0.c index d06bafe28c2e..f2f713650074 100644..100755 --- a/drivers/gpu/drm/amd/amdgpu/vce_v4_0.c +++ b/drivers/gpu/drm/amd/amdgpu/vce_v4_0.c | |||
@@ -243,37 +243,49 @@ static int vce_v4_0_sriov_start(struct amdgpu_device *adev) | |||
243 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_LMI_VM_CTRL), 0); | 243 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_LMI_VM_CTRL), 0); |
244 | 244 | ||
245 | if (adev->firmware.load_type == AMDGPU_FW_LOAD_PSP) { | 245 | if (adev->firmware.load_type == AMDGPU_FW_LOAD_PSP) { |
246 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_LMI_VCPU_CACHE_40BIT_BAR0), | 246 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, |
247 | adev->firmware.ucode[AMDGPU_UCODE_ID_VCE].mc_addr >> 8); | 247 | mmVCE_LMI_VCPU_CACHE_40BIT_BAR0), |
248 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_LMI_VCPU_CACHE_40BIT_BAR1), | ||
249 | adev->firmware.ucode[AMDGPU_UCODE_ID_VCE].mc_addr >> 8); | ||
250 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_LMI_VCPU_CACHE_40BIT_BAR2), | ||
251 | adev->firmware.ucode[AMDGPU_UCODE_ID_VCE].mc_addr >> 8); | 248 | adev->firmware.ucode[AMDGPU_UCODE_ID_VCE].mc_addr >> 8); |
249 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, | ||
250 | mmVCE_LMI_VCPU_CACHE_64BIT_BAR0), | ||
251 | (adev->firmware.ucode[AMDGPU_UCODE_ID_VCE].mc_addr >> 40) & 0xff); | ||
252 | } else { | 252 | } else { |
253 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_LMI_VCPU_CACHE_40BIT_BAR0), | 253 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, |
254 | mmVCE_LMI_VCPU_CACHE_40BIT_BAR0), | ||
254 | adev->vce.gpu_addr >> 8); | 255 | adev->vce.gpu_addr >> 8); |
255 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_LMI_VCPU_CACHE_40BIT_BAR1), | 256 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, |
257 | mmVCE_LMI_VCPU_CACHE_64BIT_BAR0), | ||
258 | (adev->vce.gpu_addr >> 40) & 0xff); | ||
259 | } | ||
260 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, | ||
261 | mmVCE_LMI_VCPU_CACHE_40BIT_BAR1), | ||
256 | adev->vce.gpu_addr >> 8); | 262 | adev->vce.gpu_addr >> 8); |
257 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_LMI_VCPU_CACHE_40BIT_BAR2), | 263 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, |
264 | mmVCE_LMI_VCPU_CACHE_64BIT_BAR1), | ||
265 | (adev->vce.gpu_addr >> 40) & 0xff); | ||
266 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, | ||
267 | mmVCE_LMI_VCPU_CACHE_40BIT_BAR2), | ||
258 | adev->vce.gpu_addr >> 8); | 268 | adev->vce.gpu_addr >> 8); |
259 | } | 269 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, |
270 | mmVCE_LMI_VCPU_CACHE_64BIT_BAR2), | ||
271 | (adev->vce.gpu_addr >> 40) & 0xff); | ||
260 | 272 | ||
261 | offset = AMDGPU_VCE_FIRMWARE_OFFSET; | 273 | offset = AMDGPU_VCE_FIRMWARE_OFFSET; |
262 | size = VCE_V4_0_FW_SIZE; | 274 | size = VCE_V4_0_FW_SIZE; |
263 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_VCPU_CACHE_OFFSET0), | 275 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_VCPU_CACHE_OFFSET0), |
264 | offset & 0x7FFFFFFF); | 276 | offset & ~0x0f000000); |
265 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_VCPU_CACHE_SIZE0), size); | 277 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_VCPU_CACHE_SIZE0), size); |
266 | 278 | ||
267 | offset += size; | 279 | offset = (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP) ? offset + size : 0; |
268 | size = VCE_V4_0_STACK_SIZE; | 280 | size = VCE_V4_0_STACK_SIZE; |
269 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_VCPU_CACHE_OFFSET1), | 281 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_VCPU_CACHE_OFFSET1), |
270 | offset & 0x7FFFFFFF); | 282 | (offset & ~0x0f000000) | (1 << 24)); |
271 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_VCPU_CACHE_SIZE1), size); | 283 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_VCPU_CACHE_SIZE1), size); |
272 | 284 | ||
273 | offset += size; | 285 | offset += size; |
274 | size = VCE_V4_0_DATA_SIZE; | 286 | size = VCE_V4_0_DATA_SIZE; |
275 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_VCPU_CACHE_OFFSET2), | 287 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_VCPU_CACHE_OFFSET2), |
276 | offset & 0x7FFFFFFF); | 288 | (offset & ~0x0f000000) | (2 << 24)); |
277 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_VCPU_CACHE_SIZE2), size); | 289 | MMSCH_V1_0_INSERT_DIRECT_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_VCPU_CACHE_SIZE2), size); |
278 | 290 | ||
279 | MMSCH_V1_0_INSERT_DIRECT_RD_MOD_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_LMI_CTRL2), ~0x100, 0); | 291 | MMSCH_V1_0_INSERT_DIRECT_RD_MOD_WT(SOC15_REG_OFFSET(VCE, 0, mmVCE_LMI_CTRL2), ~0x100, 0); |