Skip to content

Commit b1df805

Browse files
Lijo Lazaralexdeucher
authored andcommitted
drm/amdgpu: Add handler for SDMA context empty
Context empty interrupt is enabled for SDMA 4.4.2. Add a handler for context empty interrupt so that it is disposed of fast, and not propagated to KFD layer. Signed-off-by: Lijo Lazar <[email protected]> Reviewed-by: Hawking Zhang <[email protected]> Suggested-by: Alex Deucher <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent 9d63fbf commit b1df805

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ struct amdgpu_sdma {
107107
struct amdgpu_irq_src doorbell_invalid_irq;
108108
struct amdgpu_irq_src pool_timeout_irq;
109109
struct amdgpu_irq_src srbm_write_irq;
110+
struct amdgpu_irq_src ctxt_empty_irq;
110111

111112
int num_instances;
112113
uint32_t sdma_mask;

drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1406,6 +1406,12 @@ static int sdma_v4_4_2_sw_init(struct amdgpu_ip_block *ip_block)
14061406
&adev->sdma.srbm_write_irq);
14071407
if (r)
14081408
return r;
1409+
1410+
r = amdgpu_irq_add_id(adev, sdma_v4_4_2_seq_to_irq_id(i),
1411+
SDMA0_4_0__SRCID__SDMA_CTXEMPTY,
1412+
&adev->sdma.ctxt_empty_irq);
1413+
if (r)
1414+
return r;
14091415
}
14101416

14111417
for (i = 0; i < adev->sdma.num_instances; i++) {
@@ -1814,6 +1820,16 @@ static int sdma_v4_4_2_process_srbm_write_irq(struct amdgpu_device *adev,
18141820
return 0;
18151821
}
18161822

1823+
static int sdma_v4_4_2_process_ctxt_empty_irq(struct amdgpu_device *adev,
1824+
struct amdgpu_irq_src *source,
1825+
struct amdgpu_iv_entry *entry)
1826+
{
1827+
/* There is nothing useful to be done here, only kept for debug */
1828+
dev_dbg_ratelimited(adev->dev, "SDMA context empty interrupt");
1829+
sdma_v4_4_2_print_iv_entry(adev, entry);
1830+
return 0;
1831+
}
1832+
18171833
static void sdma_v4_4_2_inst_update_medium_grain_light_sleep(
18181834
struct amdgpu_device *adev, bool enable, uint32_t inst_mask)
18191835
{
@@ -2096,6 +2112,10 @@ static const struct amdgpu_irq_src_funcs sdma_v4_4_2_srbm_write_irq_funcs = {
20962112
.process = sdma_v4_4_2_process_srbm_write_irq,
20972113
};
20982114

2115+
static const struct amdgpu_irq_src_funcs sdma_v4_4_2_ctxt_empty_irq_funcs = {
2116+
.process = sdma_v4_4_2_process_ctxt_empty_irq,
2117+
};
2118+
20992119
static void sdma_v4_4_2_set_irq_funcs(struct amdgpu_device *adev)
21002120
{
21012121
adev->sdma.trap_irq.num_types = adev->sdma.num_instances;
@@ -2104,6 +2124,7 @@ static void sdma_v4_4_2_set_irq_funcs(struct amdgpu_device *adev)
21042124
adev->sdma.doorbell_invalid_irq.num_types = adev->sdma.num_instances;
21052125
adev->sdma.pool_timeout_irq.num_types = adev->sdma.num_instances;
21062126
adev->sdma.srbm_write_irq.num_types = adev->sdma.num_instances;
2127+
adev->sdma.ctxt_empty_irq.num_types = adev->sdma.num_instances;
21072128

21082129
adev->sdma.trap_irq.funcs = &sdma_v4_4_2_trap_irq_funcs;
21092130
adev->sdma.illegal_inst_irq.funcs = &sdma_v4_4_2_illegal_inst_irq_funcs;
@@ -2112,6 +2133,7 @@ static void sdma_v4_4_2_set_irq_funcs(struct amdgpu_device *adev)
21122133
adev->sdma.doorbell_invalid_irq.funcs = &sdma_v4_4_2_doorbell_invalid_irq_funcs;
21132134
adev->sdma.pool_timeout_irq.funcs = &sdma_v4_4_2_pool_timeout_irq_funcs;
21142135
adev->sdma.srbm_write_irq.funcs = &sdma_v4_4_2_srbm_write_irq_funcs;
2136+
adev->sdma.ctxt_empty_irq.funcs = &sdma_v4_4_2_ctxt_empty_irq_funcs;
21152137
}
21162138

21172139
/**

0 commit comments

Comments
 (0)