aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3607-drm-amdkfd-gfx10-Calling-amdgpu-functions-to-invalid.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3607-drm-amdkfd-gfx10-Calling-amdgpu-functions-to-invalid.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3607-drm-amdkfd-gfx10-Calling-amdgpu-functions-to-invalid.patch86
1 files changed, 86 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3607-drm-amdkfd-gfx10-Calling-amdgpu-functions-to-invalid.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3607-drm-amdkfd-gfx10-Calling-amdgpu-functions-to-invalid.patch
new file mode 100644
index 00000000..2bb5db11
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3607-drm-amdkfd-gfx10-Calling-amdgpu-functions-to-invalid.patch
@@ -0,0 +1,86 @@
+From 43bb6e7a0eb8ef14ee67fa8399d4051941879232 Mon Sep 17 00:00:00 2001
+From: Oak Zeng <Oak.Zeng@amd.com>
+Date: Thu, 1 Aug 2019 14:24:42 -0500
+Subject: [PATCH 3607/4256] drm/amdkfd/gfx10: Calling amdgpu functions to
+ invalidate TLB
+
+Calling amdgpu function to invalidate TLB, instead of using a
+kfd implementation. Delete the kfd local TLB invalidation
+implementation.
+
+Change-Id: I569f716179d9a5d8492140c0cd277cd0e56ca054
+Signed-off-by: Oak Zeng <Oak.Zeng@amd.com>
+Reviewed-by: Christian Konig <christian.koenig@amd.com>
+---
+ .../drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c | 41 ++-----------------
+ 1 file changed, 3 insertions(+), 38 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c
+index 39ffb078beb4..3aff2b5758e0 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.c
+@@ -802,42 +802,6 @@ static uint16_t get_atc_vmid_pasid_mapping_pasid(struct kgd_dev *kgd,
+ return reg & ATC_VMID0_PASID_MAPPING__PASID_MASK;
+ }
+
+-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) |
+- (0 << GCVM_INVALIDATE_ENG0_REQ__FLUSH_TYPE__SHIFT) |/* legacy */
+- GCVM_INVALIDATE_ENG0_REQ__INVALIDATE_L2_PTES_MASK |
+- GCVM_INVALIDATE_ENG0_REQ__INVALIDATE_L2_PDE0_MASK |
+- GCVM_INVALIDATE_ENG0_REQ__INVALIDATE_L2_PDE1_MASK |
+- GCVM_INVALIDATE_ENG0_REQ__INVALIDATE_L2_PDE2_MASK |
+- GCVM_INVALIDATE_ENG0_REQ__INVALIDATE_L1_PTES_MASK;
+-
+- mutex_lock(&adev->srbm_mutex);
+-
+- /* Use light weight invalidation.
+- *
+- * TODO 1: agree on the right set of invalidation registers for
+- * KFD use. Use the last one for now. Invalidate only GCHUB as
+- * SDMA is now moved to GCHUB
+- *
+- * TODO 2: support range-based invalidation, requires kfg2kgd
+- * interface change
+- */
+- WREG32(SOC15_REG_OFFSET(GC, 0, mmGCVM_INVALIDATE_ENG0_ADDR_RANGE_LO32),
+- 0xffffffff);
+- WREG32(SOC15_REG_OFFSET(GC, 0, mmGCVM_INVALIDATE_ENG0_ADDR_RANGE_HI32),
+- 0x0000001f);
+-
+- WREG32(SOC15_REG_OFFSET(GC, 0, mmGCVM_INVALIDATE_ENG0_REQ), req);
+-
+- while (!(RREG32(SOC15_REG_OFFSET(GC, 0, mmGCVM_INVALIDATE_ENG0_ACK)) &
+- (1 << vmid)))
+- cpu_relax();
+-
+- mutex_unlock(&adev->srbm_mutex);
+-}
+-
+ static int invalidate_tlbs_with_kiq(struct amdgpu_device *adev, uint16_t pasid)
+ {
+ signed long r;
+@@ -878,7 +842,8 @@ static int invalidate_tlbs(struct kgd_dev *kgd, uint16_t pasid)
+ if (get_atc_vmid_pasid_mapping_valid(kgd, vmid)) {
+ if (get_atc_vmid_pasid_mapping_pasid(kgd, vmid)
+ == pasid) {
+- write_vmid_invalidate_request(kgd, vmid);
++ amdgpu_gmc_flush_gpu_tlb(adev, vmid,
++ AMDGPU_GFXHUB_0, 0);
+ break;
+ }
+ }
+@@ -896,7 +861,7 @@ static int invalidate_tlbs_vmid(struct kgd_dev *kgd, uint16_t vmid)
+ return 0;
+ }
+
+- write_vmid_invalidate_request(kgd, vmid);
++ amdgpu_gmc_flush_gpu_tlb(adev, vmid, AMDGPU_GFXHUB_0, 0);
+ return 0;
+ }
+
+--
+2.17.1
+