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

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
...@@ -161,10 +161,12 @@ static int psp_sw_init(void *handle) ...@@ -161,10 +161,12 @@ static int psp_sw_init(void *handle)
struct psp_context *psp = &adev->psp; struct psp_context *psp = &adev->psp;
int ret; int ret;
ret = psp_init_microcode(psp); if (!amdgpu_sriov_vf(adev)) {
if (ret) { ret = psp_init_microcode(psp);
DRM_ERROR("Failed to load psp firmware!\n"); if (ret) {
return ret; DRM_ERROR("Failed to load psp firmware!\n");
return ret;
}
} }
ret = psp_memory_training_init(psp); ret = psp_memory_training_init(psp);
......
...@@ -592,6 +592,9 @@ static int sdma_v4_0_init_microcode(struct amdgpu_device *adev) ...@@ -592,6 +592,9 @@ static int sdma_v4_0_init_microcode(struct amdgpu_device *adev)
struct amdgpu_firmware_info *info = NULL; struct amdgpu_firmware_info *info = NULL;
const struct common_firmware_header *header = NULL; const struct common_firmware_header *header = NULL;
if (amdgpu_sriov_vf(adev))
return 0;
DRM_DEBUG("\n"); DRM_DEBUG("\n");
switch (adev->asic_type) { switch (adev->asic_type) {
......
...@@ -203,6 +203,9 @@ static int sdma_v5_0_init_microcode(struct amdgpu_device *adev) ...@@ -203,6 +203,9 @@ static int sdma_v5_0_init_microcode(struct amdgpu_device *adev)
const struct common_firmware_header *header = NULL; const struct common_firmware_header *header = NULL;
const struct sdma_firmware_header_v1_0 *hdr; const struct sdma_firmware_header_v1_0 *hdr;
if (amdgpu_sriov_vf(adev))
return 0;
DRM_DEBUG("\n"); DRM_DEBUG("\n");
switch (adev->asic_type) { switch (adev->asic_type) {
......
...@@ -148,6 +148,9 @@ static int sdma_v5_2_init_microcode(struct amdgpu_device *adev) ...@@ -148,6 +148,9 @@ static int sdma_v5_2_init_microcode(struct amdgpu_device *adev)
struct amdgpu_firmware_info *info = NULL; struct amdgpu_firmware_info *info = NULL;
const struct common_firmware_header *header = NULL; const struct common_firmware_header *header = NULL;
if (amdgpu_sriov_vf(adev))
return 0;
DRM_DEBUG("\n"); DRM_DEBUG("\n");
switch (adev->asic_type) { switch (adev->asic_type) {
......
...@@ -209,11 +209,13 @@ static int vega10_smu_init(struct pp_hwmgr *hwmgr) ...@@ -209,11 +209,13 @@ static int vega10_smu_init(struct pp_hwmgr *hwmgr)
int ret; int ret;
struct cgs_firmware_info info = {0}; struct cgs_firmware_info info = {0};
ret = cgs_get_firmware_info(hwmgr->device, if (!amdgpu_sriov_vf((struct amdgpu_device *)hwmgr->adev)) {
CGS_UCODE_ID_SMU, ret = cgs_get_firmware_info(hwmgr->device,
&info); CGS_UCODE_ID_SMU,
if (ret || !info.kptr) &info);
return -EINVAL; if (ret || !info.kptr)
return -EINVAL;
}
priv = kzalloc(sizeof(struct vega10_smumgr), GFP_KERNEL); priv = kzalloc(sizeof(struct vega10_smumgr), GFP_KERNEL);
......
...@@ -832,10 +832,13 @@ static int smu_sw_init(void *handle) ...@@ -832,10 +832,13 @@ static int smu_sw_init(void *handle)
smu->smu_dpm.dpm_level = AMD_DPM_FORCED_LEVEL_AUTO; smu->smu_dpm.dpm_level = AMD_DPM_FORCED_LEVEL_AUTO;
smu->smu_dpm.requested_dpm_level = AMD_DPM_FORCED_LEVEL_AUTO; smu->smu_dpm.requested_dpm_level = AMD_DPM_FORCED_LEVEL_AUTO;
ret = smu_init_microcode(smu);
if (ret) { if (!amdgpu_sriov_vf(adev)) {
dev_err(adev->dev, "Failed to load smu firmware!\n"); ret = smu_init_microcode(smu);
return ret; if (ret) {
dev_err(adev->dev, "Failed to load smu firmware!\n");
return ret;
}
} }
ret = smu_smc_table_sw_init(smu); ret = smu_smc_table_sw_init(smu);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment