Commit c81761f2 authored by Hawking Zhang's avatar Hawking Zhang Committed by Alex Deucher
Browse files

drm/amdgpu: Use memcpy to update IPD table for sriov guest



On some hardware configuration, sriov guests
cannot access mm_index and mm_data. Update the
IPD table via memcpy in these cases

Signed-off-by: default avatarHawking Zhang <Hawking.Zhang@amd.com>
Reviewed-by: default avatarLikun Gao <Likun.Gao@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 01bdc7e2
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -356,10 +356,15 @@ static int amdgpu_discovery_read_binary_from_mem(struct amdgpu_device *adev,
	int ret = 0;

	if (!is_tmr_in_sysmem) {
		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);
	}
+4 −0
Original line number Diff line number Diff line
@@ -162,6 +162,7 @@ enum AMDGIM_FEATURE_FLAG {
	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 {
@@ -412,6 +413,9 @@ struct amdgpu_video_codec_info;
#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)
+2 −1
Original line number Diff line number Diff line
@@ -161,7 +161,8 @@ union amd_sriov_msg_feature_flags {
		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;
};