Commit 162b786f authored by Jingwen Chen's avatar Jingwen Chen Committed by Alex Deucher
Browse files

drm/amd: Skip not used microcode loading in SRIOV



smc, sdma, sos, ta and asd fw is not used in SRIOV. Skip them to
accelerate sw_init for navi12.

v2: skip above fw in SRIOV for vega10 and sienna_cichlid
v3: directly skip psp fw loading in SRIOV
Signed-off-by: default avatarJingwen Chen <Jingwen.Chen2@amd.com>
Reviewed-by: default avatarEmily.Deng <Emily.Deng@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 7c67d74d
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -161,11 +161,13 @@ static int psp_sw_init(void *handle)
	struct psp_context *psp = &adev->psp;
	int ret;

	if (!amdgpu_sriov_vf(adev)) {
		ret = psp_init_microcode(psp);
		if (ret) {
			DRM_ERROR("Failed to load psp firmware!\n");
			return ret;
		}
	}

	ret = psp_memory_training_init(psp);
	if (ret) {
+3 −0
Original line number Diff line number Diff line
@@ -592,6 +592,9 @@ static int sdma_v4_0_init_microcode(struct amdgpu_device *adev)
	struct amdgpu_firmware_info *info = NULL;
	const struct common_firmware_header *header = NULL;

	if (amdgpu_sriov_vf(adev))
		return 0;

	DRM_DEBUG("\n");

	switch (adev->asic_type) {
+3 −0
Original line number Diff line number Diff line
@@ -203,6 +203,9 @@ static int sdma_v5_0_init_microcode(struct amdgpu_device *adev)
	const struct common_firmware_header *header = NULL;
	const struct sdma_firmware_header_v1_0 *hdr;

	if (amdgpu_sriov_vf(adev))
		return 0;

	DRM_DEBUG("\n");

	switch (adev->asic_type) {
+3 −0
Original line number Diff line number Diff line
@@ -148,6 +148,9 @@ static int sdma_v5_2_init_microcode(struct amdgpu_device *adev)
	struct amdgpu_firmware_info *info = NULL;
	const struct common_firmware_header *header = NULL;

	if (amdgpu_sriov_vf(adev))
		return 0;

	DRM_DEBUG("\n");

	switch (adev->asic_type) {
+7 −5
Original line number Diff line number Diff line
@@ -209,11 +209,13 @@ static int vega10_smu_init(struct pp_hwmgr *hwmgr)
	int ret;
	struct cgs_firmware_info info = {0};

	if (!amdgpu_sriov_vf((struct amdgpu_device *)hwmgr->adev)) {
		ret = cgs_get_firmware_info(hwmgr->device,
						CGS_UCODE_ID_SMU,
						&info);
		if (ret || !info.kptr)
			return -EINVAL;
	}

	priv = kzalloc(sizeof(struct vega10_smumgr), GFP_KERNEL);

Loading