int ret = 0;
if (!is_tmr_in_sysmem) {
- amdgpu_device_vram_access(adev, adev->discovery.offset,
- (uint32_t *)binary,
- adev->discovery.size, false);
- adev->discovery.reserve_tmr = true;
+ if (amdgpu_sriov_vf(adev) &&
+ amdgpu_sriov_xgmi_connected_to_cpu(adev)) {
+ ret = amdgpu_discovery_read_binary_from_sysmem(adev, binary);
+ } else {
+ amdgpu_device_vram_access(adev, adev->discovery.offset,
+ (uint32_t *)binary,
+ adev->discovery.size, false);
+ adev->discovery.reserve_tmr = true;
+ }
} else {
ret = amdgpu_discovery_read_binary_from_sysmem(adev, binary);
}
AMDGIM_FEATURE_RAS_TELEMETRY = (1 << 10),
AMDGIM_FEATURE_RAS_CPER = (1 << 11),
AMDGIM_FEATURE_XGMI_TA_EXT_PEER_LINK = (1 << 12),
+ AMDGIM_FEATURE_XGMI_CONNECTED_TO_CPU = (1 << 13),
};
enum AMDGIM_REG_ACCESS_FLAG {
#define amdgpu_sriov_xgmi_ta_ext_peer_link_en(adev) \
((adev)->virt.gim_feature & AMDGIM_FEATURE_XGMI_TA_EXT_PEER_LINK)
+#define amdgpu_sriov_xgmi_connected_to_cpu(adev) \
+((adev)->virt.gim_feature & AMDGIM_FEATURE_XGMI_CONNECTED_TO_CPU)
+
static inline bool is_virtual_machine(void)
{
#if defined(CONFIG_X86)
uint32_t ras_telemetry : 1;
uint32_t ras_cper : 1;
uint32_t xgmi_ta_ext_peer_link : 1;
- uint32_t reserved : 19;
+ uint32_t xgmi_connected_to_cpu : 1;
+ uint32_t reserved : 18;
} flags;
uint32_t all;
};