From: jsg Date: Thu, 18 Apr 2024 00:52:17 +0000 (+0000) Subject: drm/amd/pm: fixes a random hang in S4 for SMU v13.0.4/11 X-Git-Url: http://artulab.com/gitweb/?a=commitdiff_plain;h=ea4e6f06d2a23f57166498415ff9992220f23d41;p=openbsd drm/amd/pm: fixes a random hang in S4 for SMU v13.0.4/11 From Tim Huang 1e3b8874d55c0c28378beb9007494a7a9269a5f5 in linux-6.6.y/6.6.28 31729e8c21ecfd671458e02b6511eb68c2225113 in mainline linux --- diff --git a/sys/dev/pci/drm/amd/pm/swsmu/smu13/smu_v13_0_4_ppt.c b/sys/dev/pci/drm/amd/pm/swsmu/smu13/smu_v13_0_4_ppt.c index 626591f54bc..1d1917e1b63 100644 --- a/sys/dev/pci/drm/amd/pm/swsmu/smu13/smu_v13_0_4_ppt.c +++ b/sys/dev/pci/drm/amd/pm/swsmu/smu13/smu_v13_0_4_ppt.c @@ -226,8 +226,18 @@ 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_s0ix) + if (!en && !adev->in_s0ix) { + /* 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); + } return ret; }