Commit 15091a6f authored by Le Ma's avatar Le Ma Committed by Alex Deucher
Browse files

drm/amdgpu: add node_id to physical id conversion in EOP handler



A new field nodeid in interrupt cookie indicates the node ID.

Signed-off-by: default avatarLe Ma <le.ma@amd.com>
Reviewed-by: default avatarShiwu Zhang <shiwu.zhang@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 147862d0
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -99,6 +99,17 @@ const char *soc15_ih_clientid_name[] = {
	"MP1"
};

const int node_id_to_phys_map[NODEID_MAX] = {
	[XCD0_NODEID] = 0,
	[XCD1_NODEID] = 1,
	[XCD2_NODEID] = 2,
	[XCD3_NODEID] = 3,
	[XCD4_NODEID] = 4,
	[XCD5_NODEID] = 5,
	[XCD6_NODEID] = 6,
	[XCD7_NODEID] = 7,
};

/**
 * amdgpu_irq_disable_all - disable *all* interrupts
 *
+14 −0
Original line number Diff line number Diff line
@@ -102,6 +102,20 @@ struct amdgpu_irq {
	bool                            retry_cam_enabled;
};

enum interrupt_node_id_per_xcp {
	XCD0_NODEID = 1,
	XCD1_NODEID = 2,
	XCD2_NODEID = 5,
	XCD3_NODEID = 6,
	XCD4_NODEID = 9,
	XCD5_NODEID = 10,
	XCD6_NODEID = 13,
	XCD7_NODEID = 14,
	NODEID_MAX,
};

extern const int node_id_to_phys_map[NODEID_MAX];

void amdgpu_irq_disable_all(struct amdgpu_device *adev);

int amdgpu_irq_init(struct amdgpu_device *adev);
+4 −2
Original line number Diff line number Diff line
@@ -2799,7 +2799,7 @@ static int gfx_v9_4_3_eop_irq(struct amdgpu_device *adev,
			    struct amdgpu_irq_src *source,
			    struct amdgpu_iv_entry *entry)
{
	int i;
	int i, phys_id;
	u8 me_id, pipe_id, queue_id;
	struct amdgpu_ring *ring;

@@ -2808,12 +2808,14 @@ static int gfx_v9_4_3_eop_irq(struct amdgpu_device *adev,
	pipe_id = (entry->ring_id & 0x03) >> 0;
	queue_id = (entry->ring_id & 0x70) >> 4;

	phys_id = node_id_to_phys_map[entry->node_id];

	switch (me_id) {
	case 0:
	case 1:
	case 2:
		for (i = 0; i < adev->gfx.num_compute_rings; i++) {
			ring = &adev->gfx.compute_ring[i];
			ring = &adev->gfx.compute_ring[i + phys_id * adev->gfx.num_compute_rings];
			/* Per-queue interrupt is supported for MEC starting from VI.
			  * The interrupt can only be enabled/disabled per pipe instead of per queue.
			  */