On 1/10/2022 1:17 PM, Tao Zhou wrote:
PMFW only returns 0 on master die and sends NACK back on other dies for
the message.

Signed-off-by: Tao Zhou <[email protected]>
---
  .../gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c   | 16 ++++++++++++----
  1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c 
b/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c
index 261892977654..121b0ab5823f 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c
@@ -1625,10 +1625,18 @@ static int aldebaran_set_df_cstate(struct smu_context 
*smu,
static int aldebaran_allow_xgmi_power_down(struct smu_context *smu, bool en)
  {
-       return smu_cmn_send_smc_msg_with_param(smu,
-                                              SMU_MSG_GmiPwrDnControl,
-                                              en ? 0 : 1,
-                                              NULL);
+       int ret;
+
+       ret = smu_cmn_send_smc_msg_with_param(smu,
+                                          SMU_MSG_GmiPwrDnControl,
+                                          en ? 0 : 1,
+                                          NULL);
+       /* The message only works on master die and NACK will be sent
+          back for other dies, ingore CMD failure for the message */
+       if (ret == -EIO)
+               ret = 0;
+

Could you confirm if this is hive master or primary die of each device? If it's the latter, use aldebaran_is_primary(). For the former we can add support similar to is_primary().

Thanks,
Lijo

+       return ret;
  }
static const struct throttling_logging_label {

Reply via email to