All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] Add limit_type to (pptable_funcs)->set_power_limit signature
@ 2021-10-03  4:46 Darren Powell
  2021-10-03  4:46 ` [PATCH 1/3] amdgpu/pm: add " Darren Powell
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Darren Powell @ 2021-10-03  4:46 UTC (permalink / raw)
  To: amd-gfx; +Cc: Darren Powell



=== Description ===
Add limit_type to (pptable_funcs)->set_power_limit signature

plus two small patches
 Fix for incorrect power limit readback in smu11 if POWER_SOURCE_DC
 Explicit initialization of cached power limits in smu struct


=== Test System ===
* DESKTOP(AMD FX-8350 + NAVI10(731F/ca), BIOS: F2)
 + ISO(Ubuntu 20.04.3 LTS)
 + Kernel(5.13.0-g9e50250d2084-fdoagd5f)

=== Patch Summary ===
   linux: (git@gitlab.freedesktop.org:agd5f) origin/amd-staging-drm-next @ d6119c68a46e
    + ca5057580168 amdgpu/pm: add limit_type to (pptable_funcs)->set_power_limit signature
    + 6e269294d363 drm/amd/pm: Fix incorrect power limit readback in smu11 if POWER_SOURCE_DC
    + 50715de0a584 drm/amd/pm: explicitly initialize cached power limits in smu struct


Darren Powell (3):
  amdgpu/pm: add limit_type to (pptable_funcs)->set_power_limit
    signature
  drm/amd/pm: Fix incorrect power limit readback in smu11 if
    POWER_SOURCE_DC
  drm/amd/pm: explicitly initialize cached power limits in smu struct

 drivers/gpu/drm/amd/pm/inc/amdgpu_smu.h           |  4 +++-
 drivers/gpu/drm/amd/pm/inc/smu_v11_0.h            |  4 +++-
 drivers/gpu/drm/amd/pm/inc/smu_v13_0.h            |  4 +++-
 drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c         |  9 +++++++--
 drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c    | 15 +++++++++------
 drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c  |  7 ++++---
 .../gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c    |  6 ++++--
 drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c    |  8 +++++---
 8 files changed, 38 insertions(+), 19 deletions(-)


base-commit: d6119c68a46eae0b48c77353aa81e6e38b009d24
-- 
2.33.0


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH 1/3] amdgpu/pm: add limit_type to (pptable_funcs)->set_power_limit signature
  2021-10-03  4:46 [PATCH 0/3] Add limit_type to (pptable_funcs)->set_power_limit signature Darren Powell
@ 2021-10-03  4:46 ` Darren Powell
  2021-10-04 10:27   ` Lazar, Lijo
  2021-10-03  4:46 ` [PATCH 2/3] drm/amd/pm: Fix incorrect power limit readback in smu11 if POWER_SOURCE_DC Darren Powell
  2021-10-03  4:46 ` [PATCH 3/3] drm/amd/pm: explicitly initialize cached power limits in smu struct Darren Powell
  2 siblings, 1 reply; 10+ messages in thread
From: Darren Powell @ 2021-10-03  4:46 UTC (permalink / raw)
  To: amd-gfx; +Cc: Darren Powell

 modify (pptable_funcs)->set_power_limit signature
 modify smu11 set_power_limit signature (arcturus, navi10, sienna_cichlid)
 modify smu13 set_power_limit signature (aldabaran)
 modify vangogh_set_power_limit signature (vangogh)

=== Test ===
sudo bash

AMDGPU_PCI_ADDR=`lspci -nn | grep "VGA\|Display" | cut -d " " -f 1`
AMDGPU_HWMON=`ls -la /sys/class/hwmon | grep $AMDGPU_PCI_ADDR | awk '{print $9}'`
HWMON_DIR=/sys/class/hwmon/${AMDGPU_HWMON}
LOGFILE=pp_show_power_cap.log

cp $LOGFILE{,.old}
lspci -nn | grep "VGA\|Display" > $LOGFILE
FILES="
power1_cap
power2_cap"

for f in $FILES
do
  if test -f "$HWMON_DIR/$f"; then
    echo === $f === >> $LOGFILE
    cat $HWMON_DIR/$f >> $LOGFILE
    RESTORE_VALUE=`cat $HWMON_DIR/$f` 2>&1  >> $LOGFILE
    echo RESTORE_VALUE $RESTORE_VALUE >> $LOGFILE
    echo 120000000 > $HWMON_DIR/$f
    sleep 3
    cat $HWMON_DIR/$f >> $LOGFILE
    echo $RESTORE_VALUE > $HWMON_DIR/$f
    sleep 3
    cat $HWMON_DIR/$f >> $LOGFILE
  else
    echo === $f === >> $LOGFILE
    echo File Not Found >> $LOGFILE
  fi
done
cat $LOGFILE

Signed-off-by: Darren Powell <darren.powell@amd.com>
---
 drivers/gpu/drm/amd/pm/inc/amdgpu_smu.h            |  4 +++-
 drivers/gpu/drm/amd/pm/inc/smu_v11_0.h             |  4 +++-
 drivers/gpu/drm/amd/pm/inc/smu_v13_0.h             |  4 +++-
 drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c          |  5 +++--
 drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c     | 14 ++++++++------
 drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c   |  7 ++++---
 drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c |  6 ++++--
 drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c     |  8 +++++---
 8 files changed, 33 insertions(+), 19 deletions(-)

diff --git a/drivers/gpu/drm/amd/pm/inc/amdgpu_smu.h b/drivers/gpu/drm/amd/pm/inc/amdgpu_smu.h
index 8156729c370b..3557f4e7fc30 100644
--- a/drivers/gpu/drm/amd/pm/inc/amdgpu_smu.h
+++ b/drivers/gpu/drm/amd/pm/inc/amdgpu_smu.h
@@ -1008,7 +1008,9 @@ struct pptable_funcs {
 	/**
 	 * @set_power_limit: Set power limit in watts.
 	 */
-	int (*set_power_limit)(struct smu_context *smu, uint32_t n);
+	int (*set_power_limit)(struct smu_context *smu,
+			       enum smu_ppt_limit_type limit_type,
+			       uint32_t limit);
 
 	/**
 	 * @init_max_sustainable_clocks: Populate max sustainable clock speed
diff --git a/drivers/gpu/drm/amd/pm/inc/smu_v11_0.h b/drivers/gpu/drm/amd/pm/inc/smu_v11_0.h
index cbdae8a2c698..2d422e6a9feb 100644
--- a/drivers/gpu/drm/amd/pm/inc/smu_v11_0.h
+++ b/drivers/gpu/drm/amd/pm/inc/smu_v11_0.h
@@ -197,7 +197,9 @@ int smu_v11_0_notify_display_change(struct smu_context *smu);
 int smu_v11_0_get_current_power_limit(struct smu_context *smu,
 				      uint32_t *power_limit);
 
-int smu_v11_0_set_power_limit(struct smu_context *smu, uint32_t n);
+int smu_v11_0_set_power_limit(struct smu_context *smu,
+			      enum smu_ppt_limit_type limit_type,
+			      uint32_t limit);
 
 int smu_v11_0_init_max_sustainable_clocks(struct smu_context *smu);
 
diff --git a/drivers/gpu/drm/amd/pm/inc/smu_v13_0.h b/drivers/gpu/drm/amd/pm/inc/smu_v13_0.h
index dc91eb608791..e5d3b0d1a032 100644
--- a/drivers/gpu/drm/amd/pm/inc/smu_v13_0.h
+++ b/drivers/gpu/drm/amd/pm/inc/smu_v13_0.h
@@ -163,7 +163,9 @@ int smu_v13_0_notify_display_change(struct smu_context *smu);
 int smu_v13_0_get_current_power_limit(struct smu_context *smu,
 				      uint32_t *power_limit);
 
-int smu_v13_0_set_power_limit(struct smu_context *smu, uint32_t n);
+int smu_v13_0_set_power_limit(struct smu_context *smu,
+			      enum smu_ppt_limit_type limit_type,
+			      uint32_t limit);
 
 int smu_v13_0_init_max_sustainable_clocks(struct smu_context *smu);
 
diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
index a2a2a8398cd7..faa78a048b1f 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
@@ -2342,9 +2342,10 @@ static int smu_set_power_limit(void *handle, uint32_t limit)
 
 	mutex_lock(&smu->mutex);
 
+	limit &= (1<<24)-1;
 	if (limit_type != SMU_DEFAULT_PPT_LIMIT)
 		if (smu->ppt_funcs->set_power_limit) {
-			ret = smu->ppt_funcs->set_power_limit(smu, limit);
+			ret = smu->ppt_funcs->set_power_limit(smu, limit_type, limit);
 			goto out;
 		}
 
@@ -2360,7 +2361,7 @@ static int smu_set_power_limit(void *handle, uint32_t limit)
 		limit = smu->current_power_limit;
 
 	if (smu->ppt_funcs->set_power_limit) {
-		ret = smu->ppt_funcs->set_power_limit(smu, limit);
+		ret = smu->ppt_funcs->set_power_limit(smu, limit_type, limit);
 		if (!ret && !(smu->user_dpm_profile.flags & SMU_DPM_USER_PROFILE_RESTORE))
 			smu->user_dpm_profile.power_limit = limit;
 	}
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
index 3470c33ee09d..aedaa4bb15c2 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
@@ -978,7 +978,9 @@ int smu_v11_0_get_current_power_limit(struct smu_context *smu,
 	return ret;
 }
 
-int smu_v11_0_set_power_limit(struct smu_context *smu, uint32_t n)
+int smu_v11_0_set_power_limit(struct smu_context *smu,
+			      enum smu_ppt_limit_type limit_type,
+			      uint32_t limit)
 {
 	int power_src;
 	int ret = 0;
@@ -1001,16 +1003,16 @@ int smu_v11_0_set_power_limit(struct smu_context *smu, uint32_t n)
 	 * BIT 16-23: PowerSource
 	 * BIT 0-15: PowerLimit
 	 */
-	n &= 0xFFFF;
-	n |= 0 << 24;
-	n |= (power_src) << 16;
-	ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_SetPptLimit, n, NULL);
+	limit &= 0xFFFF;
+	limit |= 0 << 24;
+	limit |= (power_src) << 16;
+	ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_SetPptLimit, limit, NULL);
 	if (ret) {
 		dev_err(smu->adev->dev, "[%s] Set power limit Failed!\n", __func__);
 		return ret;
 	}
 
-	smu->current_power_limit = n;
+	smu->current_power_limit = limit;
 
 	return 0;
 }
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c
index f6ef0ce6e9e2..eba516428f1b 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c
@@ -2144,11 +2144,12 @@ static int vangogh_get_ppt_limit(struct smu_context *smu,
 	return 0;
 }
 
-static int vangogh_set_power_limit(struct smu_context *smu, uint32_t ppt_limit)
+static int vangogh_set_power_limit(struct smu_context *smu,
+				   enum smu_ppt_limit_type limit_type,
+				   uint32_t ppt_limit)
 {
 	struct smu_11_5_power_context *power_context =
-							smu->smu_power.power_context;
-	uint32_t limit_type = ppt_limit >> 24;
+			smu->smu_power.power_context;
 	int ret = 0;
 
 	if (!smu_cmn_feature_is_enabled(smu, SMU_FEATURE_PPT_BIT)) {
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 5019903db492..59a7d276541d 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c
@@ -1241,11 +1241,13 @@ static int aldebaran_get_power_limit(struct smu_context *smu,
 	return 0;
 }
 
-static int aldebaran_set_power_limit(struct smu_context *smu, uint32_t n)
+static int aldebaran_set_power_limit(struct smu_context *smu,
+				     enum smu_ppt_limit_type limit_type,
+				     uint32_t limit)
 {
 	/* Power limit can be set only through primary die */
 	if (aldebaran_is_primary(smu))
-		return smu_v13_0_set_power_limit(smu, n);
+		return smu_v13_0_set_power_limit(smu, limit_type, limit);
 
 	return -EINVAL;
 }
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
index 05c5e61f3506..58d837d9a414 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
@@ -945,7 +945,9 @@ int smu_v13_0_get_current_power_limit(struct smu_context *smu,
 	return ret;
 }
 
-int smu_v13_0_set_power_limit(struct smu_context *smu, uint32_t n)
+int smu_v13_0_set_power_limit(struct smu_context *smu,
+			      enum smu_ppt_limit_type limit_type,
+			      uint32_t limit)
 {
 	int ret = 0;
 
@@ -954,13 +956,13 @@ int smu_v13_0_set_power_limit(struct smu_context *smu, uint32_t n)
 		return -EOPNOTSUPP;
 	}
 
-	ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_SetPptLimit, n, NULL);
+	ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_SetPptLimit, limit, NULL);
 	if (ret) {
 		dev_err(smu->adev->dev, "[%s] Set power limit Failed!\n", __func__);
 		return ret;
 	}
 
-	smu->current_power_limit = n;
+	smu->current_power_limit = limit;
 
 	return 0;
 }
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 2/3] drm/amd/pm: Fix incorrect power limit readback in smu11 if POWER_SOURCE_DC
  2021-10-03  4:46 [PATCH 0/3] Add limit_type to (pptable_funcs)->set_power_limit signature Darren Powell
  2021-10-03  4:46 ` [PATCH 1/3] amdgpu/pm: add " Darren Powell
@ 2021-10-03  4:46 ` Darren Powell
  2021-10-03  5:31   ` Nils Wallménius
  2021-10-03  4:46 ` [PATCH 3/3] drm/amd/pm: explicitly initialize cached power limits in smu struct Darren Powell
  2 siblings, 1 reply; 10+ messages in thread
From: Darren Powell @ 2021-10-03  4:46 UTC (permalink / raw)
  To: amd-gfx; +Cc: Darren Powell

 when smu->adev->pm.ac_power == 0, message parameter with bit 16 set is saved
 to smu->current_power_limit.

 Fixes: 0cb4c62125a9 ("drm/amd/pm: correct power limit setting for SMU V11)"

Signed-off-by: Darren Powell <darren.powell@amd.com>
---
 drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
index aedaa4bb15c2..9bb6da99d5b5 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
@@ -984,6 +984,7 @@ int smu_v11_0_set_power_limit(struct smu_context *smu,
 {
 	int power_src;
 	int ret = 0;
+	uint32_t limit_param;
 
 	if (!smu_cmn_feature_is_enabled(smu, SMU_FEATURE_PPT_BIT)) {
 		dev_err(smu->adev->dev, "Setting new power limit is not supported!\n");
@@ -1003,10 +1004,10 @@ int smu_v11_0_set_power_limit(struct smu_context *smu,
 	 * BIT 16-23: PowerSource
 	 * BIT 0-15: PowerLimit
 	 */
-	limit &= 0xFFFF;
-	limit |= 0 << 24;
-	limit |= (power_src) << 16;
-	ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_SetPptLimit, limit, NULL);
+	limit_param  = (limit & 0xFFFF);
+	limit_param |= 0 << 24;
+	limit_param |= (power_src) << 16;
+	ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_SetPptLimit, limit_param, NULL);
 	if (ret) {
 		dev_err(smu->adev->dev, "[%s] Set power limit Failed!\n", __func__);
 		return ret;
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 3/3] drm/amd/pm: explicitly initialize cached power limits in smu struct
  2021-10-03  4:46 [PATCH 0/3] Add limit_type to (pptable_funcs)->set_power_limit signature Darren Powell
  2021-10-03  4:46 ` [PATCH 1/3] amdgpu/pm: add " Darren Powell
  2021-10-03  4:46 ` [PATCH 2/3] drm/amd/pm: Fix incorrect power limit readback in smu11 if POWER_SOURCE_DC Darren Powell
@ 2021-10-03  4:46 ` Darren Powell
  2021-10-04 10:43   ` Lazar, Lijo
  2 siblings, 1 reply; 10+ messages in thread
From: Darren Powell @ 2021-10-03  4:46 UTC (permalink / raw)
  To: amd-gfx; +Cc: Darren Powell

Code appears to initialize values but macro will exit without error
or initializing value if function is not implmented

Signed-off-by: Darren Powell <darren.powell@amd.com>
---
 drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
index faa78a048b1f..210f047e136d 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
@@ -712,6 +712,10 @@ static int smu_late_init(void *handle)
 		return ret;
 	}
 
+	smu->current_power_limit = 0;
+	smu->default_power_limit = 0;
+	smu->max_power_limit = 0;
+
 	ret = smu_get_asic_power_limits(smu,
 					&smu->current_power_limit,
 					&smu->default_power_limit,
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/3] drm/amd/pm: Fix incorrect power limit readback in smu11 if POWER_SOURCE_DC
  2021-10-03  4:46 ` [PATCH 2/3] drm/amd/pm: Fix incorrect power limit readback in smu11 if POWER_SOURCE_DC Darren Powell
@ 2021-10-03  5:31   ` Nils Wallménius
  2021-10-04  1:15     ` Powell, Darren
  0 siblings, 1 reply; 10+ messages in thread
From: Nils Wallménius @ 2021-10-03  5:31 UTC (permalink / raw)
  To: Darren Powell; +Cc: amd-gfx

[-- Attachment #1: Type: text/plain, Size: 1932 bytes --]

Hi, sorry for the drive-by comment but

limit_param |= 0 << 24;

Doesn't do anything.

Best regards
Nils

Den sön 3 okt. 2021 06:47Darren Powell <darren.powell@amd.com> skrev:

>  when smu->adev->pm.ac_power == 0, message parameter with bit 16 set is
> saved
>  to smu->current_power_limit.
>
>  Fixes: 0cb4c62125a9 ("drm/amd/pm: correct power limit setting for SMU
> V11)"
>
> Signed-off-by: Darren Powell <darren.powell@amd.com>
> ---
>  drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c | 9 +++++----
>  1 file changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
> b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
> index aedaa4bb15c2..9bb6da99d5b5 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
> @@ -984,6 +984,7 @@ int smu_v11_0_set_power_limit(struct smu_context *smu,
>  {
>         int power_src;
>         int ret = 0;
> +       uint32_t limit_param;
>
>         if (!smu_cmn_feature_is_enabled(smu, SMU_FEATURE_PPT_BIT)) {
>                 dev_err(smu->adev->dev, "Setting new power limit is not
> supported!\n");
> @@ -1003,10 +1004,10 @@ int smu_v11_0_set_power_limit(struct smu_context
> *smu,
>          * BIT 16-23: PowerSource
>          * BIT 0-15: PowerLimit
>          */
> -       limit &= 0xFFFF;
> -       limit |= 0 << 24;
> -       limit |= (power_src) << 16;
> -       ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_SetPptLimit,
> limit, NULL);
> +       limit_param  = (limit & 0xFFFF);
> +       limit_param |= 0 << 24;
> +       limit_param |= (power_src) << 16;
> +       ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_SetPptLimit,
> limit_param, NULL);
>         if (ret) {
>                 dev_err(smu->adev->dev, "[%s] Set power limit Failed!\n",
> __func__);
>                 return ret;
> --
> 2.33.0
>
>

[-- Attachment #2: Type: text/html, Size: 2946 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/3] drm/amd/pm: Fix incorrect power limit readback in smu11 if POWER_SOURCE_DC
  2021-10-03  5:31   ` Nils Wallménius
@ 2021-10-04  1:15     ` Powell, Darren
  0 siblings, 0 replies; 10+ messages in thread
From: Powell, Darren @ 2021-10-04  1:15 UTC (permalink / raw)
  To: Nils Wallménius; +Cc: amd-gfx

[-- Attachment #1: Type: text/plain, Size: 2465 bytes --]

[AMD Official Use Only]

Yup, agreed, but I rationalized that it:
 - minimizes code changes, leave existing code in place
 - reinforces the comment, which states that only 0 is supported in this bitfield at this time

Thanks
Darren
________________________________
From: Nils Wallménius <nils.wallmenius@gmail.com>
Sent: Sunday, October 3, 2021 1:31 AM
To: Powell, Darren <Darren.Powell@amd.com>
Cc: amd-gfx@lists.freedesktop.org <amd-gfx@lists.freedesktop.org>
Subject: Re: [PATCH 2/3] drm/amd/pm: Fix incorrect power limit readback in smu11 if POWER_SOURCE_DC

Hi, sorry for the drive-by comment but

limit_param |= 0 << 24;

Doesn't do anything.

Best regards
Nils

Den sön 3 okt. 2021 06:47Darren Powell <darren.powell@amd.com<mailto:darren.powell@amd.com>> skrev:
 when smu->adev->pm.ac_power == 0, message parameter with bit 16 set is saved
 to smu->current_power_limit.

 Fixes: 0cb4c62125a9 ("drm/amd/pm: correct power limit setting for SMU V11)"

Signed-off-by: Darren Powell <darren.powell@amd.com<mailto:darren.powell@amd.com>>
---
 drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
index aedaa4bb15c2..9bb6da99d5b5 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
@@ -984,6 +984,7 @@ int smu_v11_0_set_power_limit(struct smu_context *smu,
 {
        int power_src;
        int ret = 0;
+       uint32_t limit_param;

        if (!smu_cmn_feature_is_enabled(smu, SMU_FEATURE_PPT_BIT)) {
                dev_err(smu->adev->dev, "Setting new power limit is not supported!\n");
@@ -1003,10 +1004,10 @@ int smu_v11_0_set_power_limit(struct smu_context *smu,
         * BIT 16-23: PowerSource
         * BIT 0-15: PowerLimit
         */
-       limit &= 0xFFFF;
-       limit |= 0 << 24;
-       limit |= (power_src) << 16;
-       ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_SetPptLimit, limit, NULL);
+       limit_param  = (limit & 0xFFFF);
+       limit_param |= 0 << 24;
+       limit_param |= (power_src) << 16;
+       ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_SetPptLimit, limit_param, NULL);
        if (ret) {
                dev_err(smu->adev->dev, "[%s] Set power limit Failed!\n", __func__);
                return ret;
--
2.33.0


[-- Attachment #2: Type: text/html, Size: 5268 bytes --]

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/3] amdgpu/pm: add limit_type to (pptable_funcs)->set_power_limit signature
  2021-10-03  4:46 ` [PATCH 1/3] amdgpu/pm: add " Darren Powell
@ 2021-10-04 10:27   ` Lazar, Lijo
  0 siblings, 0 replies; 10+ messages in thread
From: Lazar, Lijo @ 2021-10-04 10:27 UTC (permalink / raw)
  To: Darren Powell, amd-gfx



On 10/3/2021 10:16 AM, Darren Powell wrote:
>   modify (pptable_funcs)->set_power_limit signature
>   modify smu11 set_power_limit signature (arcturus, navi10, sienna_cichlid)
>   modify smu13 set_power_limit signature (aldabaran)
>   modify vangogh_set_power_limit signature (vangogh)
> 
> === Test ===
> sudo bash
> 
> AMDGPU_PCI_ADDR=`lspci -nn | grep "VGA\|Display" | cut -d " " -f 1`
> AMDGPU_HWMON=`ls -la /sys/class/hwmon | grep $AMDGPU_PCI_ADDR | awk '{print $9}'`
> HWMON_DIR=/sys/class/hwmon/${AMDGPU_HWMON}
> LOGFILE=pp_show_power_cap.log
> 
> cp $LOGFILE{,.old}
> lspci -nn | grep "VGA\|Display" > $LOGFILE
> FILES="
> power1_cap
> power2_cap"
> 
> for f in $FILES
> do
>    if test -f "$HWMON_DIR/$f"; then
>      echo === $f === >> $LOGFILE
>      cat $HWMON_DIR/$f >> $LOGFILE
>      RESTORE_VALUE=`cat $HWMON_DIR/$f` 2>&1  >> $LOGFILE
>      echo RESTORE_VALUE $RESTORE_VALUE >> $LOGFILE
>      echo 120000000 > $HWMON_DIR/$f
>      sleep 3
>      cat $HWMON_DIR/$f >> $LOGFILE
>      echo $RESTORE_VALUE > $HWMON_DIR/$f
>      sleep 3
>      cat $HWMON_DIR/$f >> $LOGFILE
>    else
>      echo === $f === >> $LOGFILE
>      echo File Not Found >> $LOGFILE
>    fi
> done
> cat $LOGFILE
> 
> Signed-off-by: Darren Powell <darren.powell@amd.com>
> ---
>   drivers/gpu/drm/amd/pm/inc/amdgpu_smu.h            |  4 +++-
>   drivers/gpu/drm/amd/pm/inc/smu_v11_0.h             |  4 +++-
>   drivers/gpu/drm/amd/pm/inc/smu_v13_0.h             |  4 +++-
>   drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c          |  5 +++--
>   drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c     | 14 ++++++++------
>   drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c   |  7 ++++---
>   drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c |  6 ++++--
>   drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c     |  8 +++++---
>   8 files changed, 33 insertions(+), 19 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/pm/inc/amdgpu_smu.h b/drivers/gpu/drm/amd/pm/inc/amdgpu_smu.h
> index 8156729c370b..3557f4e7fc30 100644
> --- a/drivers/gpu/drm/amd/pm/inc/amdgpu_smu.h
> +++ b/drivers/gpu/drm/amd/pm/inc/amdgpu_smu.h
> @@ -1008,7 +1008,9 @@ struct pptable_funcs {
>   	/**
>   	 * @set_power_limit: Set power limit in watts.
>   	 */
> -	int (*set_power_limit)(struct smu_context *smu, uint32_t n);
> +	int (*set_power_limit)(struct smu_context *smu,
> +			       enum smu_ppt_limit_type limit_type,
> +			       uint32_t limit);
>   
>   	/**
>   	 * @init_max_sustainable_clocks: Populate max sustainable clock speed
> diff --git a/drivers/gpu/drm/amd/pm/inc/smu_v11_0.h b/drivers/gpu/drm/amd/pm/inc/smu_v11_0.h
> index cbdae8a2c698..2d422e6a9feb 100644
> --- a/drivers/gpu/drm/amd/pm/inc/smu_v11_0.h
> +++ b/drivers/gpu/drm/amd/pm/inc/smu_v11_0.h
> @@ -197,7 +197,9 @@ int smu_v11_0_notify_display_change(struct smu_context *smu);
>   int smu_v11_0_get_current_power_limit(struct smu_context *smu,
>   				      uint32_t *power_limit);
>   
> -int smu_v11_0_set_power_limit(struct smu_context *smu, uint32_t n);
> +int smu_v11_0_set_power_limit(struct smu_context *smu,
> +			      enum smu_ppt_limit_type limit_type,
> +			      uint32_t limit);
>   
>   int smu_v11_0_init_max_sustainable_clocks(struct smu_context *smu);
>   
> diff --git a/drivers/gpu/drm/amd/pm/inc/smu_v13_0.h b/drivers/gpu/drm/amd/pm/inc/smu_v13_0.h
> index dc91eb608791..e5d3b0d1a032 100644
> --- a/drivers/gpu/drm/amd/pm/inc/smu_v13_0.h
> +++ b/drivers/gpu/drm/amd/pm/inc/smu_v13_0.h
> @@ -163,7 +163,9 @@ int smu_v13_0_notify_display_change(struct smu_context *smu);
>   int smu_v13_0_get_current_power_limit(struct smu_context *smu,
>   				      uint32_t *power_limit);
>   
> -int smu_v13_0_set_power_limit(struct smu_context *smu, uint32_t n);
> +int smu_v13_0_set_power_limit(struct smu_context *smu,
> +			      enum smu_ppt_limit_type limit_type,
> +			      uint32_t limit);
>   
>   int smu_v13_0_init_max_sustainable_clocks(struct smu_context *smu);
>   
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> index a2a2a8398cd7..faa78a048b1f 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> @@ -2342,9 +2342,10 @@ static int smu_set_power_limit(void *handle, uint32_t limit)
>   
>   	mutex_lock(&smu->mutex);
>   
> +	limit &= (1<<24)-1;
>   	if (limit_type != SMU_DEFAULT_PPT_LIMIT)
>   		if (smu->ppt_funcs->set_power_limit) {
> -			ret = smu->ppt_funcs->set_power_limit(smu, limit);
> +			ret = smu->ppt_funcs->set_power_limit(smu, limit_type, limit);
>   			goto out;
>   		}
>   
> @@ -2360,7 +2361,7 @@ static int smu_set_power_limit(void *handle, uint32_t limit)
>   		limit = smu->current_power_limit;
>   
>   	if (smu->ppt_funcs->set_power_limit) {
> -		ret = smu->ppt_funcs->set_power_limit(smu, limit);
> +		ret = smu->ppt_funcs->set_power_limit(smu, limit_type, limit);
>   		if (!ret && !(smu->user_dpm_profile.flags & SMU_DPM_USER_PROFILE_RESTORE))
>   			smu->user_dpm_profile.power_limit = limit;
>   	}
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
> index 3470c33ee09d..aedaa4bb15c2 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/smu_v11_0.c
> @@ -978,7 +978,9 @@ int smu_v11_0_get_current_power_limit(struct smu_context *smu,
>   	return ret;
>   }
>   
> -int smu_v11_0_set_power_limit(struct smu_context *smu, uint32_t n)
> +int smu_v11_0_set_power_limit(struct smu_context *smu,
> +			      enum smu_ppt_limit_type limit_type,
> +			      uint32_t limit)
>   {
>   	int power_src;
>   	int ret = 0;
> @@ -1001,16 +1003,16 @@ int smu_v11_0_set_power_limit(struct smu_context *smu, uint32_t n)
>   	 * BIT 16-23: PowerSource
>   	 * BIT 0-15: PowerLimit
>   	 */
> -	n &= 0xFFFF;
> -	n |= 0 << 24;
> -	n |= (power_src) << 16;
> -	ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_SetPptLimit, n, NULL);

Since limit_type is introduced as arg, could you also add below to 
smuv11/v13? Currently, anything other than default is used only in vangogh.

	if (limit_type != SMU_DEFAULT_PPT_LIMIT)
		return -EINVAL;

That will also avoid any 'unused variable' warning.

Thanks,
Lijo

> +	limit &= 0xFFFF;
> +	limit |= 0 << 24;
> +	limit |= (power_src) << 16;
> +	ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_SetPptLimit, limit, NULL);
>   	if (ret) {
>   		dev_err(smu->adev->dev, "[%s] Set power limit Failed!\n", __func__);
>   		return ret;
>   	}
>   
> -	smu->current_power_limit = n;
> +	smu->current_power_limit = limit;
>   
>   	return 0;
>   }
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c
> index f6ef0ce6e9e2..eba516428f1b 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c
> @@ -2144,11 +2144,12 @@ static int vangogh_get_ppt_limit(struct smu_context *smu,
>   	return 0;
>   }
>   
> -static int vangogh_set_power_limit(struct smu_context *smu, uint32_t ppt_limit)
> +static int vangogh_set_power_limit(struct smu_context *smu,
> +				   enum smu_ppt_limit_type limit_type,
> +				   uint32_t ppt_limit)
>   {
>   	struct smu_11_5_power_context *power_context =
> -							smu->smu_power.power_context;
> -	uint32_t limit_type = ppt_limit >> 24;
> +			smu->smu_power.power_context;
>   	int ret = 0;
>   
>   	if (!smu_cmn_feature_is_enabled(smu, SMU_FEATURE_PPT_BIT)) {
> 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 5019903db492..59a7d276541d 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c
> @@ -1241,11 +1241,13 @@ static int aldebaran_get_power_limit(struct smu_context *smu,
>   	return 0;
>   }
>   
> -static int aldebaran_set_power_limit(struct smu_context *smu, uint32_t n)
> +static int aldebaran_set_power_limit(struct smu_context *smu,
> +				     enum smu_ppt_limit_type limit_type,
> +				     uint32_t limit)
>   {
>   	/* Power limit can be set only through primary die */
>   	if (aldebaran_is_primary(smu))
> -		return smu_v13_0_set_power_limit(smu, n);
> +		return smu_v13_0_set_power_limit(smu, limit_type, limit);
>   
>   	return -EINVAL;
>   }
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
> index 05c5e61f3506..58d837d9a414 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
> @@ -945,7 +945,9 @@ int smu_v13_0_get_current_power_limit(struct smu_context *smu,
>   	return ret;
>   }
>   
> -int smu_v13_0_set_power_limit(struct smu_context *smu, uint32_t n)
> +int smu_v13_0_set_power_limit(struct smu_context *smu,
> +			      enum smu_ppt_limit_type limit_type,
> +			      uint32_t limit)
>   {
>   	int ret = 0;
>   
> @@ -954,13 +956,13 @@ int smu_v13_0_set_power_limit(struct smu_context *smu, uint32_t n)
>   		return -EOPNOTSUPP;
>   	}
>   
> -	ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_SetPptLimit, n, NULL);
> +	ret = smu_cmn_send_smc_msg_with_param(smu, SMU_MSG_SetPptLimit, limit, NULL);
>   	if (ret) {
>   		dev_err(smu->adev->dev, "[%s] Set power limit Failed!\n", __func__);
>   		return ret;
>   	}
>   
> -	smu->current_power_limit = n;
> +	smu->current_power_limit = limit;
>   
>   	return 0;
>   }
> 

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 3/3] drm/amd/pm: explicitly initialize cached power limits in smu struct
  2021-10-03  4:46 ` [PATCH 3/3] drm/amd/pm: explicitly initialize cached power limits in smu struct Darren Powell
@ 2021-10-04 10:43   ` Lazar, Lijo
  2021-10-05  5:04     ` Powell, Darren
  0 siblings, 1 reply; 10+ messages in thread
From: Lazar, Lijo @ 2021-10-04 10:43 UTC (permalink / raw)
  To: Darren Powell, amd-gfx



On 10/3/2021 10:16 AM, Darren Powell wrote:
> Code appears to initialize values but macro will exit without error
> or initializing value if function is not implmented
> 
> Signed-off-by: Darren Powell <darren.powell@amd.com>
> ---
>   drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 4 ++++
>   1 file changed, 4 insertions(+)
> 
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> index faa78a048b1f..210f047e136d 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> @@ -712,6 +712,10 @@ static int smu_late_init(void *handle)
>   		return ret;
>   	}
>   
> +	smu->current_power_limit = 0;
> +	smu->default_power_limit = 0;
> +	smu->max_power_limit = 0;
> +

If this is only about first-time init - smu_context is part of adev, it 
will be zero initialized when adev is allocated.


Thanks,
Lijo

>   	ret = smu_get_asic_power_limits(smu,
>   					&smu->current_power_limit,
>   					&smu->default_power_limit,
> 

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 3/3] drm/amd/pm: explicitly initialize cached power limits in smu struct
  2021-10-04 10:43   ` Lazar, Lijo
@ 2021-10-05  5:04     ` Powell, Darren
  2021-10-05  5:46       ` Lazar, Lijo
  0 siblings, 1 reply; 10+ messages in thread
From: Powell, Darren @ 2021-10-05  5:04 UTC (permalink / raw)
  To: Lazar, Lijo, amd-gfx

[-- Attachment #1: Type: text/plain, Size: 2453 bytes --]

[AMD Official Use Only]

I'm just looking to clarify this code. The macro eventually expands to look like this

   if ((smu)->ppt_funcs)
   {
      if ((smu)->ppt_funcs->get_power_limit)
          (smu)->ppt_funcs->get_power_limit(smu,
                                            &smu->current_power_limit,                                                                     &smu->default_power_limit,
                                            &smu->max_power_limit);
      else
         return 0;
   }
   else
      return -EINVAL;

But you have to dig to realize that it's a macro, and that it makes no modification if the function is not defined. It's not clear without then searching and following the function pointers which platforms are using the saved value. I thought of inserting the following comment or should I just drop this altogether?
 /* seed the cached smu power limit values iff get_power_limit is defined, otherwise they remain 0 */

Thanks
Darren

________________________________
From: Lazar, Lijo <Lijo.Lazar@amd.com>
Sent: Monday, October 4, 2021 6:43 AM
To: Powell, Darren <Darren.Powell@amd.com>; amd-gfx@lists.freedesktop.org <amd-gfx@lists.freedesktop.org>
Subject: Re: [PATCH 3/3] drm/amd/pm: explicitly initialize cached power limits in smu struct



On 10/3/2021 10:16 AM, Darren Powell wrote:
> Code appears to initialize values but macro will exit without error
> or initializing value if function is not implmented
>
> Signed-off-by: Darren Powell <darren.powell@amd.com>
> ---
>   drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 4 ++++
>   1 file changed, 4 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> index faa78a048b1f..210f047e136d 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
> @@ -712,6 +712,10 @@ static int smu_late_init(void *handle)
>                return ret;
>        }
>
> +     smu->current_power_limit = 0;
> +     smu->default_power_limit = 0;
> +     smu->max_power_limit = 0;
> +

If this is only about first-time init - smu_context is part of adev, it
will be zero initialized when adev is allocated.


Thanks,
Lijo

>        ret = smu_get_asic_power_limits(smu,
>                                        &smu->current_power_limit,
>                                        &smu->default_power_limit,
>

[-- Attachment #2: Type: text/html, Size: 7433 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 3/3] drm/amd/pm: explicitly initialize cached power limits in smu struct
  2021-10-05  5:04     ` Powell, Darren
@ 2021-10-05  5:46       ` Lazar, Lijo
  0 siblings, 0 replies; 10+ messages in thread
From: Lazar, Lijo @ 2021-10-05  5:46 UTC (permalink / raw)
  To: Powell, Darren, amd-gfx



On 10/5/2021 10:34 AM, Powell, Darren wrote:
> [AMD Official Use Only]
> 
> 
> I'm just looking to clarify this code. The macro eventually expands to 
> look like this
> 
>     if ((smu)->ppt_funcs)
>     {
>        if ((smu)->ppt_funcs->get_power_limit)
>            (smu)->ppt_funcs->get_power_limit(smu,
>                                              &smu->current_power_limit, 
> &smu->default_power_limit,
> &smu->max_power_limit);
>        else
>           return 0;
>     }
>     else
>        return -EINVAL;
> 
> But you have to dig to realize that it's a macro, and that it makes no 
> modification if the function is not defined. It's not clear without then 
> searching and following the function pointers which platforms are using 
> the saved value. I thought of inserting the following comment or should 
> I just drop this altogether?

Yes. The limit values are by default initialized to 0. If the function 
is not supported, it's not considered an error to fail late_init (it 
only reports 0 values in hwmon).

late_init also gets called on other occasions like resume or after a 
GPU-only reset. If you want to change the invalid limit value in hwmon 
from 0 to something else (to differentiate unsupported vs API returning 
0 value), then better to do in sw_init.

Thanks,
Lijo

>   /* seed the cached smu power limit values iff get_power_limit is 
> defined, otherwise they remain 0 */
> 
> Thanks
> Darren
> 
> ------------------------------------------------------------------------
> *From:* Lazar, Lijo <Lijo.Lazar@amd.com>
> *Sent:* Monday, October 4, 2021 6:43 AM
> *To:* Powell, Darren <Darren.Powell@amd.com>; 
> amd-gfx@lists.freedesktop.org <amd-gfx@lists.freedesktop.org>
> *Subject:* Re: [PATCH 3/3] drm/amd/pm: explicitly initialize cached 
> power limits in smu struct
> 
> 
> On 10/3/2021 10:16 AM, Darren Powell wrote:
>> Code appears to initialize values but macro will exit without error
>> or initializing value if function is not implmented
>> 
>> Signed-off-by: Darren Powell <darren.powell@amd.com>
>> ---
>>   drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 4 ++++
>>   1 file changed, 4 insertions(+)
>> 
>> diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
>> index faa78a048b1f..210f047e136d 100644
>> --- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
>> +++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
>> @@ -712,6 +712,10 @@ static int smu_late_init(void *handle)
>>                return ret;
>>        }
>>   
>> +     smu->current_power_limit = 0;
>> +     smu->default_power_limit = 0;
>> +     smu->max_power_limit = 0;
>> +
> 
> If this is only about first-time init - smu_context is part of adev, it
> will be zero initialized when adev is allocated.
> 
> 
> Thanks,
> Lijo
> 
>>        ret = smu_get_asic_power_limits(smu,
>>                                        &smu->current_power_limit,
>>                                        &smu->default_power_limit,
>> 

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2021-10-05  5:46 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-03  4:46 [PATCH 0/3] Add limit_type to (pptable_funcs)->set_power_limit signature Darren Powell
2021-10-03  4:46 ` [PATCH 1/3] amdgpu/pm: add " Darren Powell
2021-10-04 10:27   ` Lazar, Lijo
2021-10-03  4:46 ` [PATCH 2/3] drm/amd/pm: Fix incorrect power limit readback in smu11 if POWER_SOURCE_DC Darren Powell
2021-10-03  5:31   ` Nils Wallménius
2021-10-04  1:15     ` Powell, Darren
2021-10-03  4:46 ` [PATCH 3/3] drm/amd/pm: explicitly initialize cached power limits in smu struct Darren Powell
2021-10-04 10:43   ` Lazar, Lijo
2021-10-05  5:04     ` Powell, Darren
2021-10-05  5:46       ` Lazar, Lijo

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.