[Public] This patch is, Reviewed-by: Tim Huang <Tim.Huang@xxxxxxx> > -----Original Message----- > From: amd-gfx <amd-gfx-bounces@xxxxxxxxxxxxxxxxxxxxx> On Behalf Of Mario > Limonciello > Sent: Sunday, May 26, 2024 8:59 PM > To: amd-gfx@xxxxxxxxxxxxxxxxxxxxx > Cc: Limonciello, Mario <Mario.Limonciello@xxxxxxx>; lectrode > <electrodexsnet@xxxxxxxxx>; stable@xxxxxxxxxxxxxxx; > regressions@xxxxxxxxxxxxxxx > Subject: \'--?J;/. [ [PATCH] drm/amd: Fix shutdown (again) on some SMU > v13.0.4/11 platforms > > commit cd94d1b182d2 ("dm/amd/pm: Fix problems with reboot/shutdown > for some SMU 13.0.4/13.0.11 users") attempted to fix shutdown issues that > were reported since commit 31729e8c21ec ("drm/amd/pm: fixes a random > hang in S4 for SMU v13.0.4/11") but caused issues for some people. > > Adjust the workaround flow to properly only apply in the S4 case: > -> For shutdown go through SMU_MSG_PrepareMp1ForUnload For S4 go > through > -> SMU_MSG_GfxDeviceDriverReset and > SMU_MSG_PrepareMp1ForUnload > > Reported-and-tested-by: lectrode <electrodexsnet@xxxxxxxxx> > Closes: https://github.com/void-linux/void-packages/issues/50417 > Cc: stable@xxxxxxxxxxxxxxx > Fixes: cd94d1b182d2 ("dm/amd/pm: Fix problems with reboot/shutdown for > some SMU 13.0.4/13.0.11 users") > Signed-off-by: Mario Limonciello <mario.limonciello@xxxxxxx> > --- > Cc: regressions@xxxxxxxxxxxxxxx > --- > .../drm/amd/pm/swsmu/smu13/smu_v13_0_4_ppt.c | 20 ++++++++++-------- > - > 1 file changed, 11 insertions(+), 9 deletions(-) > > diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_4_ppt.c > b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_4_ppt.c > index 4abfcd32747d..c7ab0d7027d9 100644 > --- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_4_ppt.c > +++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_4_ppt.c > @@ -226,15 +226,17 @@ static int > smu_v13_0_4_system_features_control(struct smu_context *smu, bool en) > struct amdgpu_device *adev = smu->adev; > int ret = 0; > > - if (!en && adev->in_s4) { > - /* Adds a GFX reset as workaround just before sending the > - * MP1_UNLOAD message to prevent GC/RLC/PMFW from > entering > - * an invalid state. > - */ > - ret = smu_cmn_send_smc_msg_with_param(smu, > SMU_MSG_GfxDeviceDriverReset, > - SMU_RESET_MODE_2, > NULL); > - if (ret) > - return ret; > + if (!en && !adev->in_s0ix) { > + if (adev->in_s4) { > + /* Adds a GFX reset as workaround just before > sending the > + * MP1_UNLOAD message to prevent GC/RLC/PMFW > from entering > + * an invalid state. > + */ > + ret = smu_cmn_send_smc_msg_with_param(smu, > SMU_MSG_GfxDeviceDriverReset, > + > SMU_RESET_MODE_2, NULL); > + if (ret) > + return ret; > + } > > ret = smu_cmn_send_smc_msg(smu, > SMU_MSG_PrepareMp1ForUnload, NULL); > } > -- > 2.43.0