mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 18:41:58 +09:00
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: Alex Deucher <alexander.deucher@amd.com> Reviewed-by: Lijo Lazar <lijo.lazar@amd.com> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
committed by
Alex Deucher
parent
315d1716d6
commit
32806038aa
@@ -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)
|
|||||||
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)
|
|||||||
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");
|
||||||
|
|||||||
Reference in New Issue
Block a user