aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2901-drm-amdgpu-update-vmc-interrupt-routine-to-support-3.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2901-drm-amdgpu-update-vmc-interrupt-routine-to-support-3.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2901-drm-amdgpu-update-vmc-interrupt-routine-to-support-3.patch63
1 files changed, 63 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2901-drm-amdgpu-update-vmc-interrupt-routine-to-support-3.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2901-drm-amdgpu-update-vmc-interrupt-routine-to-support-3.patch
new file mode 100644
index 00000000..6e820b71
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2901-drm-amdgpu-update-vmc-interrupt-routine-to-support-3.patch
@@ -0,0 +1,63 @@
+From aa06bf966ef259e32c44ce23cfda8c8bebfb29d8 Mon Sep 17 00:00:00 2001
+From: Le Ma <le.ma@amd.com>
+Date: Thu, 6 Sep 2018 19:37:51 +0800
+Subject: [PATCH 2901/2940] drm/amdgpu: update vmc interrupt routine to support
+ 3 vmhubs
+
+There is one more vmc interrupt and mmhub on Arcturus.
+
+Signed-off-by: Le Ma <le.ma@amd.com>
+Acked-by: Snow Zhang < Snow.Zhang@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 17 ++++++++++++++---
+ 1 file changed, 14 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
+index 0c0a9f5b997c..ebc95c743733 100644
+--- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
+@@ -312,10 +312,11 @@ static int gmc_v9_0_process_interrupt(struct amdgpu_device *adev,
+ struct amdgpu_irq_src *source,
+ struct amdgpu_iv_entry *entry)
+ {
+- struct amdgpu_vmhub *hub = &adev->vmhub[entry->vmid_src];
++ struct amdgpu_vmhub *hub;
+ bool retry_fault = !!(entry->src_data[1] & 0x80);
+ uint32_t status = 0;
+ u64 addr;
++ char hub_name[10];
+
+ addr = (u64)entry->src_data[0] << 12;
+ addr |= ((u64)entry->src_data[1] & 0xf) << 44;
+@@ -324,6 +325,17 @@ static int gmc_v9_0_process_interrupt(struct amdgpu_device *adev,
+ entry->timestamp))
+ return 1; /* This also prevents sending it to KFD */
+
++ if (entry->client_id == SOC15_IH_CLIENTID_VMC) {
++ snprintf(hub_name, sizeof(hub_name), "mmhub0");
++ hub = &adev->vmhub[AMDGPU_MMHUB_0];
++ } else if (entry->client_id == SOC15_IH_CLIENTID_VMC1) {
++ snprintf(hub_name, sizeof(hub_name), "mmhub1");
++ hub = &adev->vmhub[AMDGPU_MMHUB_1];
++ } else {
++ snprintf(hub_name, sizeof(hub_name), "gfxhub0");
++ hub = &adev->vmhub[AMDGPU_GFXHUB_0];
++ }
++
+ /* If it's the first fault for this address, process it normally */
+ if (!amdgpu_sriov_vf(adev)) {
+ status = RREG32(hub->vm_l2_pro_fault_status);
+@@ -339,8 +351,7 @@ static int gmc_v9_0_process_interrupt(struct amdgpu_device *adev,
+ dev_err(adev->dev,
+ "[%s] %s page fault (src_id:%u ring:%u vmid:%u "
+ "pasid:%u, for process %s pid %d thread %s pid %d)\n",
+- entry->vmid_src ? "mmhub" : "gfxhub",
+- retry_fault ? "retry" : "no-retry",
++ hub_name, retry_fault ? "retry" : "no-retry",
+ entry->src_id, entry->ring_id, entry->vmid,
+ entry->pasid, task_info.process_name, task_info.tgid,
+ task_info.task_name, task_info.pid);
+--
+2.17.1
+