diff options
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.patch | 63 |
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 + |