@@ -143,7 +143,7 @@ static int vcn_v2_5_sw_init(void *handle)
143
143
144
144
/* VCN POISON TRAP */
145
145
r = amdgpu_irq_add_id (adev , amdgpu_ih_clientid_vcns [j ],
146
- VCN_2_6__SRCID_UVD_POISON , & adev -> vcn .inst [j ].irq );
146
+ VCN_2_6__SRCID_UVD_POISON , & adev -> vcn .inst [j ].ras_poison_irq );
147
147
if (r )
148
148
return r ;
149
149
}
@@ -354,6 +354,9 @@ static int vcn_v2_5_hw_fini(void *handle)
354
354
(adev -> vcn .cur_state != AMD_PG_STATE_GATE &&
355
355
RREG32_SOC15 (VCN , i , mmUVD_STATUS )))
356
356
vcn_v2_5_set_powergating_state (adev , AMD_PG_STATE_GATE );
357
+
358
+ if (amdgpu_ras_is_supported (adev , AMDGPU_RAS_BLOCK__VCN ))
359
+ amdgpu_irq_put (adev , & adev -> vcn .inst [i ].ras_poison_irq , 0 );
357
360
}
358
361
359
362
return 0 ;
@@ -1807,6 +1810,14 @@ static int vcn_v2_5_set_interrupt_state(struct amdgpu_device *adev,
1807
1810
return 0 ;
1808
1811
}
1809
1812
1813
+ static int vcn_v2_6_set_ras_interrupt_state (struct amdgpu_device * adev ,
1814
+ struct amdgpu_irq_src * source ,
1815
+ unsigned int type ,
1816
+ enum amdgpu_interrupt_state state )
1817
+ {
1818
+ return 0 ;
1819
+ }
1820
+
1810
1821
static int vcn_v2_5_process_interrupt (struct amdgpu_device * adev ,
1811
1822
struct amdgpu_irq_src * source ,
1812
1823
struct amdgpu_iv_entry * entry )
@@ -1837,9 +1848,6 @@ static int vcn_v2_5_process_interrupt(struct amdgpu_device *adev,
1837
1848
case VCN_2_0__SRCID__UVD_ENC_LOW_LATENCY :
1838
1849
amdgpu_fence_process (& adev -> vcn .inst [ip_instance ].ring_enc [1 ]);
1839
1850
break ;
1840
- case VCN_2_6__SRCID_UVD_POISON :
1841
- amdgpu_vcn_process_poison_irq (adev , source , entry );
1842
- break ;
1843
1851
default :
1844
1852
DRM_ERROR ("Unhandled interrupt: %d %d\n" ,
1845
1853
entry -> src_id , entry -> src_data [0 ]);
@@ -1854,6 +1862,11 @@ static const struct amdgpu_irq_src_funcs vcn_v2_5_irq_funcs = {
1854
1862
.process = vcn_v2_5_process_interrupt ,
1855
1863
};
1856
1864
1865
+ static const struct amdgpu_irq_src_funcs vcn_v2_6_ras_irq_funcs = {
1866
+ .set = vcn_v2_6_set_ras_interrupt_state ,
1867
+ .process = amdgpu_vcn_process_poison_irq ,
1868
+ };
1869
+
1857
1870
static void vcn_v2_5_set_irq_funcs (struct amdgpu_device * adev )
1858
1871
{
1859
1872
int i ;
@@ -1863,6 +1876,9 @@ static void vcn_v2_5_set_irq_funcs(struct amdgpu_device *adev)
1863
1876
continue ;
1864
1877
adev -> vcn .inst [i ].irq .num_types = adev -> vcn .num_enc_rings + 1 ;
1865
1878
adev -> vcn .inst [i ].irq .funcs = & vcn_v2_5_irq_funcs ;
1879
+
1880
+ adev -> vcn .inst [i ].ras_poison_irq .num_types = adev -> vcn .num_enc_rings + 1 ;
1881
+ adev -> vcn .inst [i ].ras_poison_irq .funcs = & vcn_v2_6_ras_irq_funcs ;
1866
1882
}
1867
1883
}
1868
1884
@@ -1965,6 +1981,7 @@ const struct amdgpu_ras_block_hw_ops vcn_v2_6_ras_hw_ops = {
1965
1981
static struct amdgpu_vcn_ras vcn_v2_6_ras = {
1966
1982
.ras_block = {
1967
1983
.hw_ops = & vcn_v2_6_ras_hw_ops ,
1984
+ .ras_late_init = amdgpu_vcn_ras_late_init ,
1968
1985
},
1969
1986
};
1970
1987
0 commit comments