aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2018-10-11 00:53:40 -0400
committerDave Airlie <airlied@redhat.com>2018-10-11 00:53:45 -0400
commitca4b869240d5810ebac6b1570ad7beffcfbac2f5 (patch)
treed7e36e551b058316ab35e28f1bb992ce06b2ce0c /drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
parent46972c03ab667dc298cad0c9db517fb9b1521b5f (diff)
parentdf2fc43d09d3ee5ede82cab9299df5e78aa427b5 (diff)
Merge branch 'drm-next-4.20' of git://people.freedesktop.org/~agd5f/linux into drm-next
Add a new list.h helper for doing bulk updates. Used by ttm. - Fixes for display underflow on VI APUs at 4K with UVD running - Endian fixes for powerplay on vega - DC fixes for interlaced video - Vega20 powerplay fixes - RV/RV2/PCO powerplay fixes - Fix for spurious ACPI events on HG laptops - Fix a memory leak in DC on driver unload - Fixes for manual fan control mode switching - Suspend/resume robustness fixes - Fix display handling on RV2 - VCN fixes for DPG on PCO - Misc code cleanups and warning fixes Signed-off-by: Dave Airlie <airlied@redhat.com> From: Alex Deucher <alexdeucher@gmail.com> Link: https://patchwork.freedesktop.org/patch/msgid/20181011014739.3117-1-alexander.deucher@amd.com
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
index 64e527b1c02f..27da13df2f11 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c
@@ -121,8 +121,7 @@ int amdgpu_vcn_sw_init(struct amdgpu_device *adev)
121 version_major, version_minor, family_id); 121 version_major, version_minor, family_id);
122 } 122 }
123 123
124 bo_size = AMDGPU_VCN_STACK_SIZE + AMDGPU_VCN_HEAP_SIZE 124 bo_size = AMDGPU_VCN_STACK_SIZE + AMDGPU_VCN_CONTEXT_SIZE;
125 + AMDGPU_VCN_SESSION_SIZE * 40;
126 if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP) 125 if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP)
127 bo_size += AMDGPU_GPU_PAGE_ALIGN(le32_to_cpu(hdr->ucode_size_bytes) + 8); 126 bo_size += AMDGPU_GPU_PAGE_ALIGN(le32_to_cpu(hdr->ucode_size_bytes) + 8);
128 r = amdgpu_bo_create_kernel(adev, bo_size, PAGE_SIZE, 127 r = amdgpu_bo_create_kernel(adev, bo_size, PAGE_SIZE,
@@ -263,7 +262,7 @@ static int amdgpu_vcn_pause_dpg_mode(struct amdgpu_device *adev,
263 262
264 ring = &adev->vcn.ring_dec; 263 ring = &adev->vcn.ring_dec;
265 WREG32_SOC15(UVD, 0, mmUVD_RBC_RB_WPTR, 264 WREG32_SOC15(UVD, 0, mmUVD_RBC_RB_WPTR,
266 lower_32_bits(ring->wptr) | 0x80000000); 265 RREG32_SOC15(UVD, 0, mmUVD_SCRATCH2));
267 SOC15_WAIT_ON_RREG(UVD, 0, mmUVD_POWER_STATUS, 266 SOC15_WAIT_ON_RREG(UVD, 0, mmUVD_POWER_STATUS,
268 UVD_PGFSM_CONFIG__UVDM_UVDU_PWR_ON, 267 UVD_PGFSM_CONFIG__UVDM_UVDU_PWR_ON,
269 UVD_POWER_STATUS__UVD_POWER_STATUS_MASK, ret_code); 268 UVD_POWER_STATUS__UVD_POWER_STATUS_MASK, ret_code);
@@ -309,18 +308,21 @@ static int amdgpu_vcn_pause_dpg_mode(struct amdgpu_device *adev,
309 /* Restore */ 308 /* Restore */
310 ring = &adev->vcn.ring_jpeg; 309 ring = &adev->vcn.ring_jpeg;
311 WREG32_SOC15(UVD, 0, mmUVD_LMI_JRBC_RB_VMID, 0); 310 WREG32_SOC15(UVD, 0, mmUVD_LMI_JRBC_RB_VMID, 0);
312 WREG32_SOC15(UVD, 0, mmUVD_JRBC_RB_CNTL, 0x00000001L | 0x00000002L); 311 WREG32_SOC15(UVD, 0, mmUVD_JRBC_RB_CNTL,
312 UVD_JRBC_RB_CNTL__RB_NO_FETCH_MASK |
313 UVD_JRBC_RB_CNTL__RB_RPTR_WR_EN_MASK);
313 WREG32_SOC15(UVD, 0, mmUVD_LMI_JRBC_RB_64BIT_BAR_LOW, 314 WREG32_SOC15(UVD, 0, mmUVD_LMI_JRBC_RB_64BIT_BAR_LOW,
314 lower_32_bits(ring->gpu_addr)); 315 lower_32_bits(ring->gpu_addr));
315 WREG32_SOC15(UVD, 0, mmUVD_LMI_JRBC_RB_64BIT_BAR_HIGH, 316 WREG32_SOC15(UVD, 0, mmUVD_LMI_JRBC_RB_64BIT_BAR_HIGH,
316 upper_32_bits(ring->gpu_addr)); 317 upper_32_bits(ring->gpu_addr));
317 WREG32_SOC15(UVD, 0, mmUVD_JRBC_RB_RPTR, ring->wptr); 318 WREG32_SOC15(UVD, 0, mmUVD_JRBC_RB_RPTR, ring->wptr);
318 WREG32_SOC15(UVD, 0, mmUVD_JRBC_RB_WPTR, ring->wptr); 319 WREG32_SOC15(UVD, 0, mmUVD_JRBC_RB_WPTR, ring->wptr);
319 WREG32_SOC15(UVD, 0, mmUVD_JRBC_RB_CNTL, 0x00000002L); 320 WREG32_SOC15(UVD, 0, mmUVD_JRBC_RB_CNTL,
321 UVD_JRBC_RB_CNTL__RB_RPTR_WR_EN_MASK);
320 322
321 ring = &adev->vcn.ring_dec; 323 ring = &adev->vcn.ring_dec;
322 WREG32_SOC15(UVD, 0, mmUVD_RBC_RB_WPTR, 324 WREG32_SOC15(UVD, 0, mmUVD_RBC_RB_WPTR,
323 lower_32_bits(ring->wptr) | 0x80000000); 325 RREG32_SOC15(UVD, 0, mmUVD_SCRATCH2));
324 SOC15_WAIT_ON_RREG(UVD, 0, mmUVD_POWER_STATUS, 326 SOC15_WAIT_ON_RREG(UVD, 0, mmUVD_POWER_STATUS,
325 UVD_PGFSM_CONFIG__UVDM_UVDU_PWR_ON, 327 UVD_PGFSM_CONFIG__UVDM_UVDU_PWR_ON,
326 UVD_POWER_STATUS__UVD_POWER_STATUS_MASK, ret_code); 328 UVD_POWER_STATUS__UVD_POWER_STATUS_MASK, ret_code);