summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLe Ma <le.ma@amd.com>2022-02-25 15:14:19 +0800
committerAlex Deucher <alexander.deucher@amd.com>2023-06-09 09:43:50 -0400
commit0d81101c190d1835f1bfba85dc3d65b9f9cacd68 (patch)
tree2182cb404319b19d19570d4d1eb1ff8da1788eda
parented42f2cc3b56955310a16da726886e684ed88432 (diff)
downloadlinux-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.c4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h6
-rw-r--r--drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c3
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);