On SMU v13.0.10, sending PrepareMp1ForUnload with the default
parameter may leave the device in an inaccessible state. This can
affect runtime power management and partial PnP flows.
Pass the required workaround parameter, 0x55, when preparing MP1 for
unload on SMU v13.0.10. Keep the existing behavior for other SMU
versions.

Closes: https://gitlab.freedesktop.org/drm/amd/-/work_items/5133

Signed-off-by: Yang Wang <[email protected]>
---
 drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c 
b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c
index 9e74a5c4be43..8781cd9f10e0 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c
@@ -2806,11 +2806,15 @@ static void smu_v13_0_0_i2c_control_fini(struct 
smu_context *smu)
 static int smu_v13_0_0_set_mp1_state(struct smu_context *smu,
                                     enum pp_mp1_state mp1_state)
 {
+       uint32_t param;
        int ret;
 
        switch (mp1_state) {
        case PP_MP1_STATE_UNLOAD:
-               ret = smu_cmn_set_mp1_state(smu, mp1_state);
+               param = amdgpu_ip_version(smu->adev, MP1_HWIP, 0) == 
IP_VERSION(13, 0, 10) ?
+                       0x55 : 0x00;
+               ret = smu_cmn_send_smc_msg_with_param(smu, 
SMU_MSG_PrepareMp1ForUnload,
+                                                     param, NULL);
                break;
        default:
                /* Ignore others */
-- 
2.47.3

Reply via email to