RE: \'--?J;/. [ [PATCH] drm/amd: Fix shutdown (again) on some SMU v13.0.4/11 platforms

2024-05-26 Thread Huang, Tim
[Public]

This patch is,

Reviewed-by: Tim Huang 



> -Original Message-
> From: amd-gfx  On Behalf Of Mario
> Limonciello
> Sent: Sunday, May 26, 2024 8:59 PM
> To: amd-gfx@lists.freedesktop.org
> Cc: Limonciello, Mario ; lectrode
> ; sta...@vger.kernel.org;
> regressi...@lists.linux.dev
> 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 
> Closes: https://github.com/void-linux/void-packages/issues/50417
> Cc: sta...@vger.kernel.org
> 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 
> ---
> Cc: regressi...@lists.linux.dev
> ---
>  .../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



[PATCH] drm/amd: Fix shutdown (again) on some SMU v13.0.4/11 platforms

2024-05-26 Thread Mario Limonciello
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 
Closes: https://github.com/void-linux/void-packages/issues/50417
Cc: sta...@vger.kernel.org
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 
---
Cc: regressi...@lists.linux.dev
---
 .../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