* [PATCH v3 0/1] drm/amd/pm: restore the forced performance level after a reset
@ 2026-11-03 10:28 Priya Hosur
2026-11-03 10:28 ` [PATCH v3 1/1] " Priya Hosur
0 siblings, 1 reply; 6+ messages in thread
From: Priya Hosur @ 2026-11-03 10:28 UTC (permalink / raw)
To: amd-gfx, Alexander.Deucher, Lijo.Lazar, Kevin.Wang,
Christian.Koenig, Felix.Kuehling
Cc: Priya.Hosur, Veerabadhran.Gopalakrishnan, Pratik.Vishwakarma
After a GPU reset the level reported through
power_dpm_force_performance_level no longer matches the hardware. The reset
reinitialises PMFW, which comes back on its default curve, while
smu_dpm.dpm_level still holds the level the user forced.
On an SMU 14.0.1 APU this shows up as gfxclk dropping from 2.8GHz to 600MHz
while sysfs still reports high, with no thermal or power event involved.
smu_late_init() already tries to re-apply the level after the reset through
AMD_PP_TASK_COMPLETE_INIT, but smu_adjust_power_state_dynamic() compares
the cached level against itself and force_performance_level is false for
that task, so the hardware is never programmed.
amdgpu_dpm_reapply_umd_profile() covers the PROFILE_* levels after
recovery, but returns early for high, low and manual.
v3 forces the level to be programmed for AMD_PP_TASK_COMPLETE_INIT during
reset recovery, using the existing force_performance_level argument.
Tested on an SMU 14.0.1 APU (PMFW 100.113.0) on amd-staging-drm-next,
triggering resets through debugfs/amdgpu_gpu_recover and reading the level
and gfxclk before and after each reset:
without this patch
level before reset 1 reset 2 reset 3
high 2449MHz 630MHz 600MHz 600MHz
with this patch
level before reset 1 reset 2 reset 3
high 2446MHz 2794MHz 2796MHz 2794MHz
low 1399MHz 604MHz 600MHz 600MHz
manual 600MHz 600MHz 601MHz 601MHz
profile_peak 2016MHz 2289MHz 2137MHz 1644MHz
profile_standard 834MHz 700MHz 700MHz 700MHz
auto 636MHz 601MHz 600MHz 600MHz
The level is retained across every reset, and auto is left on its own
curve. The "before" sample is taken one second after the level is written.
The profile_peak readings vary from sample to sample both with and without
this patch. 18 MODE2 resets over the run, with no errors in the kernel log.
An s2idle cycle also keeps the level: high at 2667MHz before suspend, high
at 2799MHz after resume.
This is the only configuration I have available to test. The change is in
generic SMU code, so it applies to every ASIC going through
smu_late_init().
v3:
- Use the existing force_performance_level argument of
smu_adjust_power_state_dynamic() for AMD_PP_TASK_COMPLETE_INIT during
reset recovery, instead of switching the cached level to AUTO first
- The cached level is no longer modified, so if programming fails the
level the user asked for is still retained and the failure is logged
- Rebased on amd-staging-drm-next, which now includes Kevin's
"drm/amd/pm: reapply umd profile state after recovery"
- Explain in the commit message why that path does not cover high,
low and manual (Kevin's question on v2)
- Add test results without the patch on the same base
v2:
- Restore the forced level after the reset instead of reporting the
default, as the driver is expected to keep the level the user asked
for and the reset often goes unnoticed (Lijo)
- Link: https://lore.kernel.org/amd-gfx/20261008104026.4102222-1-Priya.Hosur@amd.com/
v1:
- Reset the cached level to AUTO after a reset so that sysfs reports the
level PMFW is actually running at
- Link: https://lore.kernel.org/amd-gfx/20261007122103.4019578-1-Priya.Hosur@amd.com/
Priya Hosur (1):
drm/amd/pm: restore the forced performance level after a reset
drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
--
2.43.0
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v3 1/1] drm/amd/pm: restore the forced performance level after a reset
2026-11-03 10:28 [PATCH v3 0/1] drm/amd/pm: restore the forced performance level after a reset Priya Hosur
@ 2026-11-03 10:28 ` Priya Hosur
2026-11-03 10:41 ` Lazar, Lijo
0 siblings, 1 reply; 6+ messages in thread
From: Priya Hosur @ 2026-11-03 10:28 UTC (permalink / raw)
To: amd-gfx, Alexander.Deucher, Lijo.Lazar, Kevin.Wang,
Christian.Koenig, Felix.Kuehling
Cc: Priya.Hosur, Veerabadhran.Gopalakrishnan, Pratik.Vishwakarma
smu_late_init() re-applies the DPM level with
smu_handle_task(smu, smu->smu_dpm.dpm_level, AMD_PP_TASK_COMPLETE_INIT);
but smu_adjust_power_state_dynamic() only programs the hardware when
if (force_performance_level || smu_dpm_ctx->dpm_level != level)
AMD_PP_TASK_COMPLETE_INIT passes force_performance_level = false and
smu_dpm_ctx is &smu->smu_dpm, so the level is compared against itself and
smu_asic_set_performance_level() is never called.
PMFW is reinitialised by a reset and comes back on its default curve, while
smu_dpm.dpm_level still holds the level the user forced. The device then
runs at the default level while sysfs keeps reporting the forced one. On an
SMU 14.0.1 APU gfxclk drops from 2.8GHz to 600MHz while sysfs still reports
high. Writing the same level again does not help either, as
amdgpu_dpm_force_performance_level() returns early when the requested level
matches the cached one.
amdgpu_dpm_reapply_umd_profile() restores the PROFILE_* levels after
recovery, but returns early for any other level, so high, low and manual
are left on the PMFW default.
Force the level to be programmed for AMD_PP_TASK_COMPLETE_INIT during reset
recovery. The cached level is left untouched, so if programming fails the
level the user asked for is still retained and the failure is logged.
Signed-off-by: Priya Hosur <Priya.Hosur@amd.com>
---
drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
index a901f8535598..654ff6824fdd 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
@@ -2553,7 +2553,12 @@ static int smu_handle_task(struct smu_context *smu,
ret = smu_adjust_power_state_dynamic(smu, level, false, false);
break;
case AMD_PP_TASK_COMPLETE_INIT:
- ret = smu_adjust_power_state_dynamic(smu, level, true, false);
+ /*
+ * PMFW is reinitialised by a reset, so program the retained
+ * level again even though it matches the cached one.
+ */
+ ret = smu_adjust_power_state_dynamic(smu, level, true,
+ amdgpu_reset_in_recovery(smu->adev));
break;
case AMD_PP_TASK_READJUST_POWER_STATE:
ret = smu_adjust_power_state_dynamic(smu, level, true, false);
--
2.43.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v3 1/1] drm/amd/pm: restore the forced performance level after a reset
2026-11-03 10:28 ` [PATCH v3 1/1] " Priya Hosur
@ 2026-11-03 10:41 ` Lazar, Lijo
2026-11-03 10:44 ` Lazar, Lijo
0 siblings, 1 reply; 6+ messages in thread
From: Lazar, Lijo @ 2026-11-03 10:41 UTC (permalink / raw)
To: Priya Hosur, amd-gfx, Alexander.Deucher, Kevin.Wang,
Christian.Koenig, Felix.Kuehling
Cc: Veerabadhran.Gopalakrishnan, Pratik.Vishwakarma
On 03-Nov-26 3:58 PM, Priya Hosur wrote:
> smu_late_init() re-applies the DPM level with
>
> smu_handle_task(smu, smu->smu_dpm.dpm_level, AMD_PP_TASK_COMPLETE_INIT);
>
> but smu_adjust_power_state_dynamic() only programs the hardware when
>
> if (force_performance_level || smu_dpm_ctx->dpm_level != level)
>
> AMD_PP_TASK_COMPLETE_INIT passes force_performance_level = false and
> smu_dpm_ctx is &smu->smu_dpm, so the level is compared against itself and
> smu_asic_set_performance_level() is never called.
>
> PMFW is reinitialised by a reset and comes back on its default curve, while
> smu_dpm.dpm_level still holds the level the user forced. The device then
> runs at the default level while sysfs keeps reporting the forced one. On an
> SMU 14.0.1 APU gfxclk drops from 2.8GHz to 600MHz while sysfs still reports
> high. Writing the same level again does not help either, as
> amdgpu_dpm_force_performance_level() returns early when the requested level
> matches the cached one.
>
> amdgpu_dpm_reapply_umd_profile() restores the PROFILE_* levels after
> recovery, but returns early for any other level, so high, low and manual
> are left on the PMFW default.
>
> Force the level to be programmed for AMD_PP_TASK_COMPLETE_INIT during reset
> recovery. The cached level is left untouched, so if programming fails the
> level the user asked for is still retained and the failure is logged.
>
> Signed-off-by: Priya Hosur <Priya.Hosur@amd.com>
> ---
> drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> index a901f8535598..654ff6824fdd 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> @@ -2553,7 +2553,12 @@ static int smu_handle_task(struct smu_context *smu,
> ret = smu_adjust_power_state_dynamic(smu, level, false, false);
> break;
> case AMD_PP_TASK_COMPLETE_INIT:
> - ret = smu_adjust_power_state_dynamic(smu, level, true, false);
> + /*
> + * PMFW is reinitialised by a reset, so program the retained
> + * level again even though it matches the cached one.
> + */
> + ret = smu_adjust_power_state_dynamic(smu, level, true,
> + amdgpu_reset_in_recovery(smu->adev));
> break;
There is already a reapply profile to handle this.
Does it work if you replace the current smu_reapply_power_state_dynamic
by calling smu_adjust_power_state_dynamic(smu, level, true, true)?
Thanks,
Lijo
> case AMD_PP_TASK_READJUST_POWER_STATE:
> ret = smu_adjust_power_state_dynamic(smu, level, true, false);
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v3 1/1] drm/amd/pm: restore the forced performance level after a reset
2026-11-03 10:41 ` Lazar, Lijo
@ 2026-11-03 10:44 ` Lazar, Lijo
2026-11-03 11:37 ` Wang, Kevin
0 siblings, 1 reply; 6+ messages in thread
From: Lazar, Lijo @ 2026-11-03 10:44 UTC (permalink / raw)
To: Priya Hosur, amd-gfx, Alexander.Deucher, Kevin.Wang,
Christian.Koenig, Felix.Kuehling
Cc: Veerabadhran.Gopalakrishnan, Pratik.Vishwakarma
On 03-Nov-26 4:11 PM, Lazar, Lijo wrote:
>
>
> On 03-Nov-26 3:58 PM, Priya Hosur wrote:
>> smu_late_init() re-applies the DPM level with
>>
>> smu_handle_task(smu, smu->smu_dpm.dpm_level,
>> AMD_PP_TASK_COMPLETE_INIT);
>>
>> but smu_adjust_power_state_dynamic() only programs the hardware when
>>
>> if (force_performance_level || smu_dpm_ctx->dpm_level != level)
>>
>> AMD_PP_TASK_COMPLETE_INIT passes force_performance_level = false and
>> smu_dpm_ctx is &smu->smu_dpm, so the level is compared against itself and
>> smu_asic_set_performance_level() is never called.
>>
>> PMFW is reinitialised by a reset and comes back on its default curve,
>> while
>> smu_dpm.dpm_level still holds the level the user forced. The device then
>> runs at the default level while sysfs keeps reporting the forced one.
>> On an
>> SMU 14.0.1 APU gfxclk drops from 2.8GHz to 600MHz while sysfs still
>> reports
>> high. Writing the same level again does not help either, as
>> amdgpu_dpm_force_performance_level() returns early when the requested
>> level
>> matches the cached one.
>>
>> amdgpu_dpm_reapply_umd_profile() restores the PROFILE_* levels after
>> recovery, but returns early for any other level, so high, low and manual
>> are left on the PMFW default.
>>
>> Force the level to be programmed for AMD_PP_TASK_COMPLETE_INIT during
>> reset
>> recovery. The cached level is left untouched, so if programming fails the
>> level the user asked for is still retained and the failure is logged.
>>
>> Signed-off-by: Priya Hosur <Priya.Hosur@amd.com>
>> ---
>> drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 7 ++++++-
>> 1 file changed, 6 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c b/drivers/gpu/
>> drm/amd/pm/swsmu/amdgpu_smu.c
>> index a901f8535598..654ff6824fdd 100644
>> --- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
>> +++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
>> @@ -2553,7 +2553,12 @@ static int smu_handle_task(struct smu_context
>> *smu,
>> ret = smu_adjust_power_state_dynamic(smu, level, false, false);
>> break;
>> case AMD_PP_TASK_COMPLETE_INIT:
>> - ret = smu_adjust_power_state_dynamic(smu, level, true, false);
>> + /*
>> + * PMFW is reinitialised by a reset, so program the retained
>> + * level again even though it matches the cached one.
>> + */
>> + ret = smu_adjust_power_state_dynamic(smu, level, true,
>> + amdgpu_reset_in_recovery(smu->adev));
>> break;
>
> There is already a reapply profile to handle this.
>
> Does it work if you replace the current smu_reapply_power_state_dynamic
> by calling smu_adjust_power_state_dynamic(smu, level, true, true)?
>
To be clear - replace the logic in the current
smu_reapply_power_state_dynamic.
Thanks,
Lijo
> Thanks,
> Lijo
>
>> case AMD_PP_TASK_READJUST_POWER_STATE:
>> ret = smu_adjust_power_state_dynamic(smu, level, true, false);
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* RE: [PATCH v3 1/1] drm/amd/pm: restore the forced performance level after a reset
2026-11-03 10:44 ` Lazar, Lijo
@ 2026-11-03 11:37 ` Wang, Kevin
2026-11-03 12:07 ` Lazar, Lijo
0 siblings, 1 reply; 6+ messages in thread
From: Wang, Kevin @ 2026-11-03 11:37 UTC (permalink / raw)
To: Lazar, Lijo, Hosur, Priya, amd-gfx@lists.freedesktop.org,
Deucher, Alexander, Koenig, Christian, Kuehling, Felix
Cc: Gopalakrishnan, Veerabadhran (Veera), Vishwakarma, Pratik
AMD General
case AMD_PP_TASK_COMPLETE_INIT:
if (amdgpu_reset_in_recovery(smu->adev))
ret = smu_reapply_power_state_dynamic(smu, level);
else
ret = smu_adjust_power_state_dynamic(smu, level, true,
false);
break;
how about use above logic to handle this case? If no concern, the patch is
Reviewed-by: Kevin Wang <kevin.wang@amd.com>
Btw, please add 'Fixes' tag in your commit message.
Best Regards,
Kevin
> -----Original Message-----
> From: Lazar, Lijo <Lijo.Lazar@amd.com>
> Sent: Tuesday, November 3, 2026 6:44 PM
> To: Hosur, Priya <Priya.Hosur@amd.com>; amd-gfx@lists.freedesktop.org;
> Deucher, Alexander <Alexander.Deucher@amd.com>; Wang, Kevin
> <Kevin.Wang@amd.com>; Koenig, Christian <Christian.Koenig@amd.com>;
> Kuehling, Felix <Felix.Kuehling@amd.com>
> Cc: Gopalakrishnan, Veerabadhran (Veera)
> <Veerabadhran.Gopalakrishnan@amd.com>; Vishwakarma, Pratik
> <Pratik.Vishwakarma@amd.com>
> Subject: Re: [PATCH v3 1/1] drm/amd/pm: restore the forced performance
> level after a reset
>
>
>
> On 03-Nov-26 4:11 PM, Lazar, Lijo wrote:
> >
> >
> > On 03-Nov-26 3:58 PM, Priya Hosur wrote:
> >> smu_late_init() re-applies the DPM level with
> >>
> >> smu_handle_task(smu, smu->smu_dpm.dpm_level,
> >> AMD_PP_TASK_COMPLETE_INIT);
> >>
> >> but smu_adjust_power_state_dynamic() only programs the hardware
> when
> >>
> >> if (force_performance_level || smu_dpm_ctx->dpm_level != level)
> >>
> >> AMD_PP_TASK_COMPLETE_INIT passes force_performance_level = false
> and
> >> smu_dpm_ctx is &smu->smu_dpm, so the level is compared against itself
> >> and
> >> smu_asic_set_performance_level() is never called.
> >>
> >> PMFW is reinitialised by a reset and comes back on its default curve,
> >> while smu_dpm.dpm_level still holds the level the user forced. The
> >> device then runs at the default level while sysfs keeps reporting the
> >> forced one.
> >> On an
> >> SMU 14.0.1 APU gfxclk drops from 2.8GHz to 600MHz while sysfs still
> >> reports high. Writing the same level again does not help either, as
> >> amdgpu_dpm_force_performance_level() returns early when the
> requested
> >> level matches the cached one.
> >>
> >> amdgpu_dpm_reapply_umd_profile() restores the PROFILE_* levels after
> >> recovery, but returns early for any other level, so high, low and
> >> manual are left on the PMFW default.
> >>
> >> Force the level to be programmed for AMD_PP_TASK_COMPLETE_INIT
> during
> >> reset recovery. The cached level is left untouched, so if programming
> >> fails the level the user asked for is still retained and the failure
> >> is logged.
> >>
> >> Signed-off-by: Priya Hosur <Priya.Hosur@amd.com>
> >> ---
> >> drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 7 ++++++-
> >> 1 file changed, 6 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> b/drivers/gpu/
> >> drm/amd/pm/swsmu/amdgpu_smu.c index a901f8535598..654ff6824fdd
> 100644
> >> --- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> >> +++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> >> @@ -2553,7 +2553,12 @@ static int smu_handle_task(struct smu_context
> >> *smu,
> >> ret = smu_adjust_power_state_dynamic(smu, level, false,
> >> false);
> >> break;
> >> case AMD_PP_TASK_COMPLETE_INIT:
> >> - ret = smu_adjust_power_state_dynamic(smu, level, true,
> >> false);
> >> + /*
> >> + * PMFW is reinitialised by a reset, so program the retained
> >> + * level again even though it matches the cached one.
> >> + */
> >> + ret = smu_adjust_power_state_dynamic(smu, level, true,
> >> + amdgpu_reset_in_recovery(smu->adev));
> >> break;
> >
> > There is already a reapply profile to handle this.
> >
> > Does it work if you replace the current
> > smu_reapply_power_state_dynamic by calling
> smu_adjust_power_state_dynamic(smu, level, true, true)?
> >
>
> To be clear - replace the logic in the current
> smu_reapply_power_state_dynamic.
>
> Thanks,
> Lijo
> > Thanks,
> > Lijo
> >
> >> case AMD_PP_TASK_READJUST_POWER_STATE:
> >> ret = smu_adjust_power_state_dynamic(smu, level, true,
> >> false);
> >
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v3 1/1] drm/amd/pm: restore the forced performance level after a reset
2026-11-03 11:37 ` Wang, Kevin
@ 2026-11-03 12:07 ` Lazar, Lijo
0 siblings, 0 replies; 6+ messages in thread
From: Lazar, Lijo @ 2026-11-03 12:07 UTC (permalink / raw)
To: Wang, Kevin, Hosur, Priya, amd-gfx@lists.freedesktop.org,
Deucher, Alexander, Koenig, Christian, Kuehling, Felix
Cc: Gopalakrishnan, Veerabadhran (Veera), Vishwakarma, Pratik
On 03-Nov-26 5:07 PM, Wang, Kevin wrote:
> AMD General
>
> case AMD_PP_TASK_COMPLETE_INIT:
> if (amdgpu_reset_in_recovery(smu->adev))
> ret = smu_reapply_power_state_dynamic(smu, level);
> else
> ret = smu_adjust_power_state_dynamic(smu, level, true,
> false);
> break;
>
> how about use above logic to handle this case? If no concern, the patch is
>
> Reviewed-by: Kevin Wang <kevin.wang@amd.com>
>
> Btw, please add 'Fixes' tag in your commit message.
>
I think it's better to apply it through the common path than keeping two
different places for restoring perf level.
amdgpu_dpm_reapply_umd_profile() => amdgpu_dpm_reapply_performance_level.
For non-profile levels, it could call reapply directly.
Thanks,
Lijo
>
> Best Regards,
> Kevin
>
>> -----Original Message-----
>> From: Lazar, Lijo <Lijo.Lazar@amd.com>
>> Sent: Tuesday, November 3, 2026 6:44 PM
>> To: Hosur, Priya <Priya.Hosur@amd.com>; amd-gfx@lists.freedesktop.org;
>> Deucher, Alexander <Alexander.Deucher@amd.com>; Wang, Kevin
>> <Kevin.Wang@amd.com>; Koenig, Christian <Christian.Koenig@amd.com>;
>> Kuehling, Felix <Felix.Kuehling@amd.com>
>> Cc: Gopalakrishnan, Veerabadhran (Veera)
>> <Veerabadhran.Gopalakrishnan@amd.com>; Vishwakarma, Pratik
>> <Pratik.Vishwakarma@amd.com>
>> Subject: Re: [PATCH v3 1/1] drm/amd/pm: restore the forced performance
>> level after a reset
>>
>>
>>
>> On 03-Nov-26 4:11 PM, Lazar, Lijo wrote:
>>>
>>>
>>> On 03-Nov-26 3:58 PM, Priya Hosur wrote:
>>>> smu_late_init() re-applies the DPM level with
>>>>
>>>> smu_handle_task(smu, smu->smu_dpm.dpm_level,
>>>> AMD_PP_TASK_COMPLETE_INIT);
>>>>
>>>> but smu_adjust_power_state_dynamic() only programs the hardware
>> when
>>>>
>>>> if (force_performance_level || smu_dpm_ctx->dpm_level != level)
>>>>
>>>> AMD_PP_TASK_COMPLETE_INIT passes force_performance_level = false
>> and
>>>> smu_dpm_ctx is &smu->smu_dpm, so the level is compared against itself
>>>> and
>>>> smu_asic_set_performance_level() is never called.
>>>>
>>>> PMFW is reinitialised by a reset and comes back on its default curve,
>>>> while smu_dpm.dpm_level still holds the level the user forced. The
>>>> device then runs at the default level while sysfs keeps reporting the
>>>> forced one.
>>>> On an
>>>> SMU 14.0.1 APU gfxclk drops from 2.8GHz to 600MHz while sysfs still
>>>> reports high. Writing the same level again does not help either, as
>>>> amdgpu_dpm_force_performance_level() returns early when the
>> requested
>>>> level matches the cached one.
>>>>
>>>> amdgpu_dpm_reapply_umd_profile() restores the PROFILE_* levels after
>>>> recovery, but returns early for any other level, so high, low and
>>>> manual are left on the PMFW default.
>>>>
>>>> Force the level to be programmed for AMD_PP_TASK_COMPLETE_INIT
>> during
>>>> reset recovery. The cached level is left untouched, so if programming
>>>> fails the level the user asked for is still retained and the failure
>>>> is logged.
>>>>
>>>> Signed-off-by: Priya Hosur <Priya.Hosur@amd.com>
>>>> ---
>>>> drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 7 ++++++-
>>>> 1 file changed, 6 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
>> b/drivers/gpu/
>>>> drm/amd/pm/swsmu/amdgpu_smu.c index a901f8535598..654ff6824fdd
>> 100644
>>>> --- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
>>>> +++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
>>>> @@ -2553,7 +2553,12 @@ static int smu_handle_task(struct smu_context
>>>> *smu,
>>>> ret = smu_adjust_power_state_dynamic(smu, level, false,
>>>> false);
>>>> break;
>>>> case AMD_PP_TASK_COMPLETE_INIT:
>>>> - ret = smu_adjust_power_state_dynamic(smu, level, true,
>>>> false);
>>>> + /*
>>>> + * PMFW is reinitialised by a reset, so program the retained
>>>> + * level again even though it matches the cached one.
>>>> + */
>>>> + ret = smu_adjust_power_state_dynamic(smu, level, true,
>>>> + amdgpu_reset_in_recovery(smu->adev));
>>>> break;
>>>
>>> There is already a reapply profile to handle this.
>>>
>>> Does it work if you replace the current
>>> smu_reapply_power_state_dynamic by calling
>> smu_adjust_power_state_dynamic(smu, level, true, true)?
>>>
>>
>> To be clear - replace the logic in the current
>> smu_reapply_power_state_dynamic.
>>
>> Thanks,
>> Lijo
>>> Thanks,
>>> Lijo
>>>
>>>> case AMD_PP_TASK_READJUST_POWER_STATE:
>>>> ret = smu_adjust_power_state_dynamic(smu, level, true,
>>>> false);
>>>
>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2026-11-03 12:07 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-11-03 10:28 [PATCH v3 0/1] drm/amd/pm: restore the forced performance level after a reset Priya Hosur
2026-11-03 10:28 ` [PATCH v3 1/1] " Priya Hosur
2026-11-03 10:41 ` Lazar, Lijo
2026-11-03 10:44 ` Lazar, Lijo
2026-11-03 11:37 ` Wang, Kevin
2026-11-03 12:07 ` Lazar, Lijo
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.