Commit 32806038 authored by Mario Limonciello's avatar Mario Limonciello Committed by Alex Deucher

drm/amd: Load SMU microcode during early_init

This will ensure that the microcode is available before the firmware
framebuffer has been destroyed.
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Reviewed-by: default avatarLijo Lazar <lijo.lazar@amd.com>
Signed-off-by: default avatarMario Limonciello <mario.limonciello@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 315d1716
...@@ -623,6 +623,7 @@ static int smu_early_init(void *handle) ...@@ -623,6 +623,7 @@ static int smu_early_init(void *handle)
{ {
struct amdgpu_device *adev = (struct amdgpu_device *)handle; struct amdgpu_device *adev = (struct amdgpu_device *)handle;
struct smu_context *smu; struct smu_context *smu;
int r;
smu = kzalloc(sizeof(struct smu_context), GFP_KERNEL); smu = kzalloc(sizeof(struct smu_context), GFP_KERNEL);
if (!smu) if (!smu)
...@@ -640,7 +641,10 @@ static int smu_early_init(void *handle) ...@@ -640,7 +641,10 @@ static int smu_early_init(void *handle)
adev->powerplay.pp_handle = smu; adev->powerplay.pp_handle = smu;
adev->powerplay.pp_funcs = &swsmu_pm_funcs; adev->powerplay.pp_funcs = &swsmu_pm_funcs;
return smu_set_funcs(adev); r = smu_set_funcs(adev);
if (r)
return r;
return smu_init_microcode(smu);
} }
static int smu_set_default_dpm_table(struct smu_context *smu) static int smu_set_default_dpm_table(struct smu_context *smu)
...@@ -1067,12 +1071,6 @@ static int smu_sw_init(void *handle) ...@@ -1067,12 +1071,6 @@ 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) {
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);
if (ret) { if (ret) {
dev_err(adev->dev, "Failed to sw init smc table!\n"); dev_err(adev->dev, "Failed to sw init smc table!\n");
......
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