diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3611-drm-amdgpu-move-WB_FREE-to-correct-place.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3611-drm-amdgpu-move-WB_FREE-to-correct-place.patch | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3611-drm-amdgpu-move-WB_FREE-to-correct-place.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3611-drm-amdgpu-move-WB_FREE-to-correct-place.patch new file mode 100644 index 00000000..054d0150 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3611-drm-amdgpu-move-WB_FREE-to-correct-place.patch @@ -0,0 +1,52 @@ +From 60a1a3c9150540264dcbb95126ae898d8d557ca0 Mon Sep 17 00:00:00 2001 +From: Monk Liu <Monk.Liu@amd.com> +Date: Wed, 24 Jan 2018 12:20:32 +0800 +Subject: [PATCH 3611/4131] drm/amdgpu: move WB_FREE to correct place + +WB_FREE should be put after all engines's hw_fini +done, otherwise the invalid wptr/rptr_addr would still +be used by engines which trigger abnormal bugs. + +This fixes couple DMAR reading error in host side for SRIOV +after guest kmd is unloaded. + +Change-Id: If721cfd06d8c3113929306378793713fd05fc929 +Signed-off-by: Monk Liu <Monk.Liu@amd.com> +Reviewed-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +index b70ed6a..1619263 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +@@ -1485,11 +1485,6 @@ static int amdgpu_device_ip_fini(struct amdgpu_device *adev) + for (i = adev->num_ip_blocks - 1; i >= 0; i--) { + if (!adev->ip_blocks[i].status.hw) + continue; +- if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC) { +- amdgpu_free_static_csa(adev); +- amdgpu_device_wb_fini(adev); +- amdgpu_device_vram_scratch_fini(adev); +- } + + if (adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_UVD && + adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_VCE) { +@@ -1522,6 +1517,13 @@ static int amdgpu_device_ip_fini(struct amdgpu_device *adev) + for (i = adev->num_ip_blocks - 1; i >= 0; i--) { + if (!adev->ip_blocks[i].status.sw) + continue; ++ ++ if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC) { ++ amdgpu_free_static_csa(adev); ++ amdgpu_device_wb_fini(adev); ++ amdgpu_device_vram_scratch_fini(adev); ++ } ++ + r = adev->ip_blocks[i].version->funcs->sw_fini((void *)adev); + /* XXX handle errors */ + if (r) { +-- +2.7.4 + |