aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3288-drm-amdgpu-Fix-TLB-invalidation-for-gfx7-and-gfx8.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3288-drm-amdgpu-Fix-TLB-invalidation-for-gfx7-and-gfx8.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3288-drm-amdgpu-Fix-TLB-invalidation-for-gfx7-and-gfx8.patch60
1 files changed, 60 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3288-drm-amdgpu-Fix-TLB-invalidation-for-gfx7-and-gfx8.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3288-drm-amdgpu-Fix-TLB-invalidation-for-gfx7-and-gfx8.patch
new file mode 100644
index 00000000..3e5acc93
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3288-drm-amdgpu-Fix-TLB-invalidation-for-gfx7-and-gfx8.patch
@@ -0,0 +1,60 @@
+From 548557b21e061b5b3d2da422903376d2b7591112 Mon Sep 17 00:00:00 2001
+From: Oak Zeng <Oak.Zeng@amd.com>
+Date: Mon, 22 Jan 2018 15:28:21 -0500
+Subject: [PATCH 3288/4131] drm/amdgpu: Fix TLB invalidation for gfx7 and gfx8
+
+Read VM_INVALIDATE_RESPONSE register to make sure TLB invalidation
+is complete. However the value of ressponse register is ignored.
+Polling and clear bit in response register can cause HW hang. Simply
+read the register is enough to guarantee invalidation completion.
+
+Change-Id: I9f58dcc8e8cbdad3359c4181123a66ad00864ec7
+Signed-off-by: Oak Zeng <Oak.Zeng@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c | 2 ++
+ drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c | 2 ++
+ 2 files changed, 4 insertions(+)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
+index 3a4e5ed..fcc1add 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c
+@@ -852,6 +852,7 @@ static int invalidate_tlbs(struct kgd_dev *kgd, uint16_t pasid)
+ if ((tmp & ATC_VMID0_PASID_MAPPING__VALID_MASK) &&
+ (tmp & ATC_VMID0_PASID_MAPPING__PASID_MASK) == pasid) {
+ WREG32(mmVM_INVALIDATE_REQUEST, 1 << vmid);
++ RREG32(mmVM_INVALIDATE_RESPONSE);
+ break;
+ }
+ }
+@@ -869,6 +870,7 @@ static int invalidate_tlbs_vmid(struct kgd_dev *kgd, uint16_t vmid)
+ }
+
+ WREG32(mmVM_INVALIDATE_REQUEST, 1 << vmid);
++ RREG32(mmVM_INVALIDATE_RESPONSE);
+ return 0;
+ }
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
+index aa23fa3..ea8e948 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
+@@ -830,6 +830,7 @@ static int invalidate_tlbs(struct kgd_dev *kgd, uint16_t pasid)
+ if ((tmp & ATC_VMID0_PASID_MAPPING__VALID_MASK) &&
+ (tmp & ATC_VMID0_PASID_MAPPING__PASID_MASK) == pasid) {
+ WREG32(mmVM_INVALIDATE_REQUEST, 1 << vmid);
++ RREG32(mmVM_INVALIDATE_RESPONSE);
+ break;
+ }
+ }
+@@ -847,6 +848,7 @@ static int invalidate_tlbs_vmid(struct kgd_dev *kgd, uint16_t vmid)
+ }
+
+ WREG32(mmVM_INVALIDATE_REQUEST, 1 << vmid);
++ RREG32(mmVM_INVALIDATE_RESPONSE);
+ return 0;
+ }
+
+--
+2.7.4
+