Re: [PATCH] drm/amd/pm: only send GmiPwrDnControl msg on master die (v2)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





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

v2: only send GmiPwrDnControl msg on master die instead of all
dies.

Signed-off-by: Tao Zhou <tao.zhou1@xxxxxxx>
---
  .../drm/amd/pm/swsmu/smu13/aldebaran_ppt.c    | 25 ++++++++++++++++---
  1 file changed, 21 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..3fe5c05ced77 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,27 @@ 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);
+	struct amdgpu_device *adev = smu->adev;
+
+	/* The message only works on master die and NACK will be sent
+	   back for other dies, only send it on master die */
+	if (adev->smuio.funcs &&
+	    adev->smuio.funcs->get_socket_id &&
+	    adev->smuio.funcs->get_die_id) {
+		if (!adev->smuio.funcs->get_socket_id(adev) &&
+		    !adev->smuio.funcs->get_die_id(adev))
+			return smu_cmn_send_smc_msg_with_param(smu,
+					   SMU_MSG_GmiPwrDnControl,
+					   en ? 0 : 1,
+					   NULL);
+		else
+			return 0;
+	}
+	else

The else part can be dropped. We always expect smuio functions to be present in aldebaran.

Thanks,
Lijo

+		return smu_cmn_send_smc_msg_with_param(smu,
+					   SMU_MSG_GmiPwrDnControl,
+					   en ? 0 : 1,
+					   NULL);
  }
static const struct throttling_logging_label {




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux