aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3181-drm-amdkfd-Use-legacy-mode-to-do-tlb-invalidation.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3181-drm-amdkfd-Use-legacy-mode-to-do-tlb-invalidation.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3181-drm-amdkfd-Use-legacy-mode-to-do-tlb-invalidation.patch56
1 files changed, 56 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3181-drm-amdkfd-Use-legacy-mode-to-do-tlb-invalidation.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3181-drm-amdkfd-Use-legacy-mode-to-do-tlb-invalidation.patch
new file mode 100644
index 00000000..eb616c47
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3181-drm-amdkfd-Use-legacy-mode-to-do-tlb-invalidation.patch
@@ -0,0 +1,56 @@
+From ffcdc0fed91641f126c98038f96a11310b839ce1 Mon Sep 17 00:00:00 2001
+From: Yong Zhao <yong.zhao@amd.com>
+Date: Fri, 12 Jan 2018 13:53:29 -0500
+Subject: [PATCH 3181/4131] drm/amdkfd: Use legacy mode to do tlb invalidation
+
+After clarifying with UTCL2 team, legacy mode suffices our use cases.
+In addition, on Raven there is a HW bug for anything but legacy mode
+when MMHUB power gating is enabled. Therefore, we should all use legacy
+mode.
+
+Change-Id: Ibc6b80f16b414180e07bc148f18df9fa962b9e0d
+Signed-off-by: Yong Zhao <yong.zhao@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
+index 8eae0a7..25aa7ce 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.c
+@@ -920,7 +920,7 @@ static void write_vmid_invalidate_request(struct kgd_dev *kgd, uint8_t vmid)
+ {
+ struct amdgpu_device *adev = (struct amdgpu_device *) kgd;
+ uint32_t req = (1 << vmid) |
+- (1 << VM_INVALIDATE_ENG16_REQ__FLUSH_TYPE__SHIFT) | /* light */
++ (0 << VM_INVALIDATE_ENG16_REQ__FLUSH_TYPE__SHIFT) | /* legacy */
+ VM_INVALIDATE_ENG16_REQ__INVALIDATE_L2_PTES_MASK |
+ VM_INVALIDATE_ENG16_REQ__INVALIDATE_L2_PDE0_MASK |
+ VM_INVALIDATE_ENG16_REQ__INVALIDATE_L2_PDE1_MASK |
+@@ -929,7 +929,13 @@ static void write_vmid_invalidate_request(struct kgd_dev *kgd, uint8_t vmid)
+
+ spin_lock(&adev->tlb_invalidation_lock);
+
+- /* Use light weight invalidation.
++ /* Use legacy mode tlb invalidation.
++ *
++ * Currently on Raven the code below is broken for anything but
++ * legacy mode due to a MMHUB power gating problem. A workaround
++ * is for MMHUB to wait until the condition PER_VMID_INVALIDATE_REQ
++ * == PER_VMID_INVALIDATE_ACK instead of simply waiting for the ack
++ * bit.
+ *
+ * TODO 1: agree on the right set of invalidation registers for
+ * KFD use. Use the last one for now. Invalidate both GC and
+@@ -980,7 +986,7 @@ static int invalidate_tlbs_with_kiq(struct amdgpu_device *adev, uint16_t pasid)
+ PACKET3_INVALIDATE_TLBS_DST_SEL(1) |
+ PACKET3_INVALIDATE_TLBS_ALL_HUB(1) |
+ PACKET3_INVALIDATE_TLBS_PASID(pasid) |
+- PACKET3_INVALIDATE_TLBS_FLUSH_TYPE(2));
++ PACKET3_INVALIDATE_TLBS_FLUSH_TYPE(0)); /* legacy */
+ amdgpu_fence_emit_polling(ring, &seq);
+ amdgpu_ring_commit(ring);
+ spin_unlock(&adev->gfx.kiq.ring_lock);
+--
+2.7.4
+