@@ -139,7 +139,7 @@ static int vcn_v4_0_sw_init(void *handle)
139
139
140
140
/* VCN POISON TRAP */
141
141
r = amdgpu_irq_add_id (adev , amdgpu_ih_clientid_vcns [i ],
142
- VCN_4_0__SRCID_UVD_POISON , & adev -> vcn .inst [i ].irq );
142
+ VCN_4_0__SRCID_UVD_POISON , & adev -> vcn .inst [i ].ras_poison_irq );
143
143
if (r )
144
144
return r ;
145
145
@@ -305,8 +305,8 @@ static int vcn_v4_0_hw_fini(void *handle)
305
305
vcn_v4_0_set_powergating_state (adev , AMD_PG_STATE_GATE );
306
306
}
307
307
}
308
-
309
- amdgpu_irq_put (adev , & adev -> vcn .inst [i ].irq , 0 );
308
+ if ( amdgpu_ras_is_supported ( adev , AMDGPU_RAS_BLOCK__VCN ))
309
+ amdgpu_irq_put (adev , & adev -> vcn .inst [i ].ras_poison_irq , 0 );
310
310
}
311
311
312
312
return 0 ;
@@ -1975,6 +1975,24 @@ static int vcn_v4_0_set_interrupt_state(struct amdgpu_device *adev, struct amdgp
1975
1975
return 0 ;
1976
1976
}
1977
1977
1978
+ /**
1979
+ * vcn_v4_0_set_ras_interrupt_state - set VCN block RAS interrupt state
1980
+ *
1981
+ * @adev: amdgpu_device pointer
1982
+ * @source: interrupt sources
1983
+ * @type: interrupt types
1984
+ * @state: interrupt states
1985
+ *
1986
+ * Set VCN block RAS interrupt state
1987
+ */
1988
+ static int vcn_v4_0_set_ras_interrupt_state (struct amdgpu_device * adev ,
1989
+ struct amdgpu_irq_src * source ,
1990
+ unsigned int type ,
1991
+ enum amdgpu_interrupt_state state )
1992
+ {
1993
+ return 0 ;
1994
+ }
1995
+
1978
1996
/**
1979
1997
* vcn_v4_0_process_interrupt - process VCN block interrupt
1980
1998
*
@@ -2007,9 +2025,6 @@ static int vcn_v4_0_process_interrupt(struct amdgpu_device *adev, struct amdgpu_
2007
2025
case VCN_4_0__SRCID__UVD_ENC_GENERAL_PURPOSE :
2008
2026
amdgpu_fence_process (& adev -> vcn .inst [ip_instance ].ring_enc [0 ]);
2009
2027
break ;
2010
- case VCN_4_0__SRCID_UVD_POISON :
2011
- amdgpu_vcn_process_poison_irq (adev , source , entry );
2012
- break ;
2013
2028
default :
2014
2029
DRM_ERROR ("Unhandled interrupt: %d %d\n" ,
2015
2030
entry -> src_id , entry -> src_data [0 ]);
@@ -2024,6 +2039,11 @@ static const struct amdgpu_irq_src_funcs vcn_v4_0_irq_funcs = {
2024
2039
.process = vcn_v4_0_process_interrupt ,
2025
2040
};
2026
2041
2042
+ static const struct amdgpu_irq_src_funcs vcn_v4_0_ras_irq_funcs = {
2043
+ .set = vcn_v4_0_set_ras_interrupt_state ,
2044
+ .process = amdgpu_vcn_process_poison_irq ,
2045
+ };
2046
+
2027
2047
/**
2028
2048
* vcn_v4_0_set_irq_funcs - set VCN block interrupt irq functions
2029
2049
*
@@ -2041,6 +2061,9 @@ static void vcn_v4_0_set_irq_funcs(struct amdgpu_device *adev)
2041
2061
2042
2062
adev -> vcn .inst [i ].irq .num_types = adev -> vcn .num_enc_rings + 1 ;
2043
2063
adev -> vcn .inst [i ].irq .funcs = & vcn_v4_0_irq_funcs ;
2064
+
2065
+ adev -> vcn .inst [i ].ras_poison_irq .num_types = adev -> vcn .num_enc_rings + 1 ;
2066
+ adev -> vcn .inst [i ].ras_poison_irq .funcs = & vcn_v4_0_ras_irq_funcs ;
2044
2067
}
2045
2068
}
2046
2069
@@ -2114,6 +2137,7 @@ const struct amdgpu_ras_block_hw_ops vcn_v4_0_ras_hw_ops = {
2114
2137
static struct amdgpu_vcn_ras vcn_v4_0_ras = {
2115
2138
.ras_block = {
2116
2139
.hw_ops = & vcn_v4_0_ras_hw_ops ,
2140
+ .ras_late_init = amdgpu_vcn_ras_late_init ,
2117
2141
},
2118
2142
};
2119
2143
0 commit comments