@@ -1406,6 +1406,12 @@ static int sdma_v4_4_2_sw_init(struct amdgpu_ip_block *ip_block)
1406
1406
& adev -> sdma .srbm_write_irq );
1407
1407
if (r )
1408
1408
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 ;
1409
1415
}
1410
1416
1411
1417
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,
1814
1820
return 0 ;
1815
1821
}
1816
1822
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
+
1817
1833
static void sdma_v4_4_2_inst_update_medium_grain_light_sleep (
1818
1834
struct amdgpu_device * adev , bool enable , uint32_t inst_mask )
1819
1835
{
@@ -2096,6 +2112,10 @@ static const struct amdgpu_irq_src_funcs sdma_v4_4_2_srbm_write_irq_funcs = {
2096
2112
.process = sdma_v4_4_2_process_srbm_write_irq ,
2097
2113
};
2098
2114
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
+
2099
2119
static void sdma_v4_4_2_set_irq_funcs (struct amdgpu_device * adev )
2100
2120
{
2101
2121
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)
2104
2124
adev -> sdma .doorbell_invalid_irq .num_types = adev -> sdma .num_instances ;
2105
2125
adev -> sdma .pool_timeout_irq .num_types = adev -> sdma .num_instances ;
2106
2126
adev -> sdma .srbm_write_irq .num_types = adev -> sdma .num_instances ;
2127
+ adev -> sdma .ctxt_empty_irq .num_types = adev -> sdma .num_instances ;
2107
2128
2108
2129
adev -> sdma .trap_irq .funcs = & sdma_v4_4_2_trap_irq_funcs ;
2109
2130
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)
2112
2133
adev -> sdma .doorbell_invalid_irq .funcs = & sdma_v4_4_2_doorbell_invalid_irq_funcs ;
2113
2134
adev -> sdma .pool_timeout_irq .funcs = & sdma_v4_4_2_pool_timeout_irq_funcs ;
2114
2135
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 ;
2115
2137
}
2116
2138
2117
2139
/**
0 commit comments