drm/amd: Fix shutdown (again) on some SMU v13.0.4/11 platforms
commit267cace556
upstream. commitcd94d1b182
("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 commit31729e8c21
("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@gmail.com> Closes: https://github.com/void-linux/void-packages/issues/50417 Cc: stable@vger.kernel.org Fixes:cd94d1b182
("dm/amd/pm: Fix problems with reboot/shutdown for some SMU 13.0.4/13.0.11 users") Reviewed-by: Tim Huang <Tim.Huang@amd.com> Signed-off-by: Mario Limonciello <mario.limonciello@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:
committed by
Greg Kroah-Hartman
parent
cb299cdba0
commit
7da44257e6
@ -222,15 +222,17 @@ static int smu_v13_0_4_system_features_control(struct smu_context *smu, bool en)
|
|||||||
struct amdgpu_device *adev = smu->adev;
|
struct amdgpu_device *adev = smu->adev;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
if (!en && adev->in_s4) {
|
if (!en && !adev->in_s0ix) {
|
||||||
/* Adds a GFX reset as workaround just before sending the
|
if (adev->in_s4) {
|
||||||
* MP1_UNLOAD message to prevent GC/RLC/PMFW from entering
|
/* Adds a GFX reset as workaround just before sending the
|
||||||
* an invalid state.
|
* 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);
|
ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_GfxDeviceDriverReset,
|
||||||
if (ret)
|
SMU_RESET_MODE_2, NULL);
|
||||||
return ret;
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
ret = smu_cmn_send_smc_msg(smu, SMU_MSG_PrepareMp1ForUnload, NULL);
|
ret = smu_cmn_send_smc_msg(smu, SMU_MSG_PrepareMp1ForUnload, NULL);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user