@@ -523,6 +523,7 @@ static int amdgpu_virt_read_pf2vf_data(struct amdgpu_device *adev)
523523
524524 adev -> unique_id =
525525 ((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 ;
526527 break ;
527528 default :
528529 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)
11441145
11451146 return xnack_mode ;
11461147}
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