aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3611-drm-amdgpu-move-WB_FREE-to-correct-place.patch
diff options
context:
space:
mode:
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.patch52
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
+