drm/amd/pm: re-enable the gfx imu when smu resume
commit f7f28f268b861c29dd18086bb636abedf0ff59ff upstream. If the gfx imu is poweroff when suspend, then it need to be re-enabled when resume. Signed-off-by: Tim Huang <tim.huang@amd.com> Reviewed-by: Yifan Zhang <yifan1.zhang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
d78777c1d4
commit
f455c9cb9e
@ -161,10 +161,15 @@ int smu_get_dpm_freq_range(struct smu_context *smu,
|
|||||||
|
|
||||||
int smu_set_gfx_power_up_by_imu(struct smu_context *smu)
|
int smu_set_gfx_power_up_by_imu(struct smu_context *smu)
|
||||||
{
|
{
|
||||||
if (!smu->ppt_funcs || !smu->ppt_funcs->set_gfx_power_up_by_imu)
|
int ret = 0;
|
||||||
return -EOPNOTSUPP;
|
struct amdgpu_device *adev = smu->adev;
|
||||||
|
|
||||||
return smu->ppt_funcs->set_gfx_power_up_by_imu(smu);
|
if (smu->ppt_funcs->set_gfx_power_up_by_imu) {
|
||||||
|
ret = smu->ppt_funcs->set_gfx_power_up_by_imu(smu);
|
||||||
|
if (ret)
|
||||||
|
dev_err(adev->dev, "Failed to enable gfx imu!\n");
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u32 smu_get_mclk(void *handle, bool low)
|
static u32 smu_get_mclk(void *handle, bool low)
|
||||||
@ -195,6 +200,19 @@ static u32 smu_get_sclk(void *handle, bool low)
|
|||||||
return clk_freq * 100;
|
return clk_freq * 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int smu_set_gfx_imu_enable(struct smu_context *smu)
|
||||||
|
{
|
||||||
|
struct amdgpu_device *adev = smu->adev;
|
||||||
|
|
||||||
|
if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (amdgpu_in_reset(smu->adev) || adev->in_s0ix)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return smu_set_gfx_power_up_by_imu(smu);
|
||||||
|
}
|
||||||
|
|
||||||
static int smu_dpm_set_vcn_enable(struct smu_context *smu,
|
static int smu_dpm_set_vcn_enable(struct smu_context *smu,
|
||||||
bool enable)
|
bool enable)
|
||||||
{
|
{
|
||||||
@ -1386,15 +1404,9 @@ static int smu_hw_init(void *handle)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (smu->is_apu) {
|
if (smu->is_apu) {
|
||||||
if ((smu->ppt_funcs->set_gfx_power_up_by_imu) &&
|
ret = smu_set_gfx_imu_enable(smu);
|
||||||
likely(adev->firmware.load_type == AMDGPU_FW_LOAD_PSP)) {
|
if (ret)
|
||||||
ret = smu->ppt_funcs->set_gfx_power_up_by_imu(smu);
|
|
||||||
if (ret) {
|
|
||||||
dev_err(adev->dev, "Failed to Enable gfx imu!\n");
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
smu_dpm_set_vcn_enable(smu, true);
|
smu_dpm_set_vcn_enable(smu, true);
|
||||||
smu_dpm_set_jpeg_enable(smu, true);
|
smu_dpm_set_jpeg_enable(smu, true);
|
||||||
smu_set_gfx_cgpg(smu, true);
|
smu_set_gfx_cgpg(smu, true);
|
||||||
@ -1670,6 +1682,10 @@ static int smu_resume(void *handle)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = smu_set_gfx_imu_enable(smu);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
smu_set_gfx_cgpg(smu, true);
|
smu_set_gfx_cgpg(smu, true);
|
||||||
|
|
||||||
smu->disable_uclk_switch = 0;
|
smu->disable_uclk_switch = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user