@@ -523,6 +523,7 @@ static int amdgpu_virt_read_pf2vf_data(struct amdgpu_device *adev)
523
523
524
524
adev -> unique_id =
525
525
((struct amd_sriov_msg_pf2vf_info * )pf2vf_info )-> uuid ;
526
+ adev -> virt .ras_en_caps .all = ((struct amd_sriov_msg_pf2vf_info * )pf2vf_info )-> ras_en_caps .all ;
526
527
break ;
527
528
default :
528
529
dev_err (adev -> dev , "invalid pf2vf version: 0x%x\n" , pf2vf_info -> version );
@@ -1144,3 +1145,55 @@ bool amdgpu_sriov_xnack_support(struct amdgpu_device *adev)
1144
1145
1145
1146
return xnack_mode ;
1146
1147
}
1148
+
1149
+ bool amdgpu_virt_get_ras_capability (struct amdgpu_device * adev )
1150
+ {
1151
+ struct amdgpu_ras * con = amdgpu_ras_get_context (adev );
1152
+
1153
+ if (!amdgpu_sriov_ras_caps_en (adev ))
1154
+ return false;
1155
+
1156
+ if (adev -> virt .ras_en_caps .bits .block_umc )
1157
+ adev -> ras_hw_enabled |= BIT (AMDGPU_RAS_BLOCK__UMC );
1158
+ if (adev -> virt .ras_en_caps .bits .block_sdma )
1159
+ adev -> ras_hw_enabled |= BIT (AMDGPU_RAS_BLOCK__SDMA );
1160
+ if (adev -> virt .ras_en_caps .bits .block_gfx )
1161
+ adev -> ras_hw_enabled |= BIT (AMDGPU_RAS_BLOCK__GFX );
1162
+ if (adev -> virt .ras_en_caps .bits .block_mmhub )
1163
+ adev -> ras_hw_enabled |= BIT (AMDGPU_RAS_BLOCK__MMHUB );
1164
+ if (adev -> virt .ras_en_caps .bits .block_athub )
1165
+ adev -> ras_hw_enabled |= BIT (AMDGPU_RAS_BLOCK__ATHUB );
1166
+ if (adev -> virt .ras_en_caps .bits .block_pcie_bif )
1167
+ adev -> ras_hw_enabled |= BIT (AMDGPU_RAS_BLOCK__PCIE_BIF );
1168
+ if (adev -> virt .ras_en_caps .bits .block_hdp )
1169
+ adev -> ras_hw_enabled |= BIT (AMDGPU_RAS_BLOCK__HDP );
1170
+ if (adev -> virt .ras_en_caps .bits .block_xgmi_wafl )
1171
+ adev -> ras_hw_enabled |= BIT (AMDGPU_RAS_BLOCK__XGMI_WAFL );
1172
+ if (adev -> virt .ras_en_caps .bits .block_df )
1173
+ adev -> ras_hw_enabled |= BIT (AMDGPU_RAS_BLOCK__DF );
1174
+ if (adev -> virt .ras_en_caps .bits .block_smn )
1175
+ adev -> ras_hw_enabled |= BIT (AMDGPU_RAS_BLOCK__SMN );
1176
+ if (adev -> virt .ras_en_caps .bits .block_sem )
1177
+ adev -> ras_hw_enabled |= BIT (AMDGPU_RAS_BLOCK__SEM );
1178
+ if (adev -> virt .ras_en_caps .bits .block_mp0 )
1179
+ adev -> ras_hw_enabled |= BIT (AMDGPU_RAS_BLOCK__MP0 );
1180
+ if (adev -> virt .ras_en_caps .bits .block_mp1 )
1181
+ adev -> ras_hw_enabled |= BIT (AMDGPU_RAS_BLOCK__MP1 );
1182
+ if (adev -> virt .ras_en_caps .bits .block_fuse )
1183
+ adev -> ras_hw_enabled |= BIT (AMDGPU_RAS_BLOCK__FUSE );
1184
+ if (adev -> virt .ras_en_caps .bits .block_mca )
1185
+ adev -> ras_hw_enabled |= BIT (AMDGPU_RAS_BLOCK__MCA );
1186
+ if (adev -> virt .ras_en_caps .bits .block_vcn )
1187
+ adev -> ras_hw_enabled |= BIT (AMDGPU_RAS_BLOCK__VCN );
1188
+ if (adev -> virt .ras_en_caps .bits .block_jpeg )
1189
+ adev -> ras_hw_enabled |= BIT (AMDGPU_RAS_BLOCK__JPEG );
1190
+ if (adev -> virt .ras_en_caps .bits .block_ih )
1191
+ adev -> ras_hw_enabled |= BIT (AMDGPU_RAS_BLOCK__IH );
1192
+ if (adev -> virt .ras_en_caps .bits .block_mpio )
1193
+ adev -> ras_hw_enabled |= BIT (AMDGPU_RAS_BLOCK__MPIO );
1194
+
1195
+ if (adev -> virt .ras_en_caps .bits .poison_propogation_mode )
1196
+ con -> poison_supported = true; /* Poison is handled by host */
1197
+
1198
+ return true;
1199
+ }
0 commit comments