diff options
author | Le Ma <le.ma@amd.com> | 2022-02-25 15:14:19 +0800 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2023-06-09 09:43:50 -0400 |
commit | 0d81101c190d1835f1bfba85dc3d65b9f9cacd68 (patch) | |
tree | 2182cb404319b19d19570d4d1eb1ff8da1788eda | |
parent | ed42f2cc3b56955310a16da726886e684ed88432 (diff) | |
download | linux-0d81101c190d1835f1bfba85dc3d65b9f9cacd68.tar.gz linux-0d81101c190d1835f1bfba85dc3d65b9f9cacd68.tar.bz2 linux-0d81101c190d1835f1bfba85dc3d65b9f9cacd68.zip |
drm/amdgpu: complement the IH node_id table for multiple AIDs
With different node_id, the SDMA interrupt from multiple AIDs can be
distinguished by sw driver.
Signed-off-by: Le Ma <le.ma@amd.com>
Acked-by: Felix Kuehling <Felix.Kuehling@amd.com>
Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c | 3 |
3 files changed, 12 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c index 031610c1340a..3dafaf70c987 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c @@ -100,12 +100,16 @@ const char *soc15_ih_clientid_name[] = { }; const int node_id_to_phys_map[NODEID_MAX] = { + [AID0_NODEID] = 0, [XCD0_NODEID] = 0, [XCD1_NODEID] = 1, + [AID1_NODEID] = 1, [XCD2_NODEID] = 2, [XCD3_NODEID] = 3, + [AID2_NODEID] = 2, [XCD4_NODEID] = 4, [XCD5_NODEID] = 5, + [AID3_NODEID] = 3, [XCD6_NODEID] = 6, [XCD7_NODEID] = 7, }; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h index efe8a278cbdf..04c0b4fa17a4 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h @@ -102,13 +102,17 @@ struct amdgpu_irq { bool retry_cam_enabled; }; -enum interrupt_node_id_per_xcp { +enum interrupt_node_id_per_aid { + AID0_NODEID = 0, XCD0_NODEID = 1, XCD1_NODEID = 2, + AID1_NODEID = 4, XCD2_NODEID = 5, XCD3_NODEID = 6, + AID2_NODEID = 8, XCD4_NODEID = 9, XCD5_NODEID = 10, + AID3_NODEID = 12, XCD6_NODEID = 13, XCD7_NODEID = 14, NODEID_MAX, diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c b/drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c index 6935a24d1e89..d3c7f9a43ef1 100644 --- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c @@ -1492,6 +1492,9 @@ static int sdma_v4_4_2_process_trap_irq(struct amdgpu_device *adev, DRM_DEBUG("IH: SDMA trap\n"); instance = sdma_v4_4_2_irq_id_to_seq(entry->client_id); + instance += node_id_to_phys_map[entry->node_id] * + adev->sdma.num_inst_per_aid; + switch (entry->ring_id) { case 0: amdgpu_fence_process(&adev->sdma.instance[instance].ring); |