* [PATCH 0/2] v2 Add limit_type to (pptable_funcs)->set_power_limit signature
@ 2021-10-06 5:06 Darren Powell
2021-10-06 5:06 ` [PATCH 1/2] amdgpu/pm: (v2) add " Darren Powell
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Darren Powell @ 2021-10-06 5:06 UTC (permalink / raw)
To: amd-gfx; +Cc: Darren Powell
=== Description ===
Add limit_type to (pptable_funcs)->set_power_limit signature
plus small patch
Fix for incorrect power limit readback in smu11 if POWER_SOURCE_DC
v2
add check for SMU_DEFAULT_PPT_LIMIT
dropped patch: 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
+ 20e15ca8448f amdgpu/pm: (v2) add limit_type to (pptable_funcs)->set_power_limit signature
+ 45fb82fd6129 drm/amd/pm: Fix incorrect power limit readback in smu11 if POWER_SOURCE_DC
Darren Powell (2):
amdgpu/pm: (v2) add limit_type to (pptable_funcs)->set_power_limit
signature
drm/amd/pm: Fix incorrect power limit readback in smu11 if
POWER_SOURCE_DC
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 | 18 ++++++++++++------
.../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 | 11 ++++++++---
8 files changed, 40 insertions(+), 19 deletions(-)
base-commit: d6119c68a46eae0b48c77353aa81e6e38b009d24
--
2.33.0
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 1/2] amdgpu/pm: (v2) add limit_type to (pptable_funcs)->set_power_limit signature
2021-10-06 5:06 [PATCH 0/2] v2 Add limit_type to (pptable_funcs)->set_power_limit signature Darren Powell
@ 2021-10-06 5:06 ` Darren Powell
2021-10-06 5:06 ` [PATCH 2/2] drm/amd/pm: Fix incorrect power limit readback in smu11 if POWER_SOURCE_DC Darren Powell
2021-10-08 5:59 ` [PATCH 0/2] v2 Add limit_type to (pptable_funcs)->set_power_limit signature Lazar, Lijo
2 siblings, 0 replies; 4+ messages in thread
From: Darren Powell @ 2021-10-06 5:06 UTC (permalink / raw)
To: amd-gfx; +Cc: Darren Powell
v2
add check for SMU_DEFAULT_PPT_LIMIT
v1
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 | 17 +++++++++++------
.../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 | 11 ++++++++---
8 files changed, 39 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..b9386c55bd85 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,11 +978,16 @@ 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;
+ if (limit_type != SMU_DEFAULT_PPT_LIMIT)
+ return -EINVAL;
+
if (!smu_cmn_feature_is_enabled(smu, SMU_FEATURE_PPT_BIT)) {
dev_err(smu->adev->dev, "Setting new power limit is not supported!\n");
return -EOPNOTSUPP;
@@ -1001,16 +1006,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..35145db6eedf 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,22 +945,27 @@ 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;
+ if (limit_type != SMU_DEFAULT_PPT_LIMIT)
+ return -EINVAL;
+
if (!smu_cmn_feature_is_enabled(smu, SMU_FEATURE_PPT_BIT)) {
dev_err(smu->adev->dev, "Setting new power limit is not supported!\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] 4+ messages in thread
* [PATCH 2/2] drm/amd/pm: Fix incorrect power limit readback in smu11 if POWER_SOURCE_DC
2021-10-06 5:06 [PATCH 0/2] v2 Add limit_type to (pptable_funcs)->set_power_limit signature Darren Powell
2021-10-06 5:06 ` [PATCH 1/2] amdgpu/pm: (v2) add " Darren Powell
@ 2021-10-06 5:06 ` Darren Powell
2021-10-08 5:59 ` [PATCH 0/2] v2 Add limit_type to (pptable_funcs)->set_power_limit signature Lazar, Lijo
2 siblings, 0 replies; 4+ messages in thread
From: Darren Powell @ 2021-10-06 5:06 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 b9386c55bd85..aa4d34f35c33 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 (limit_type != SMU_DEFAULT_PPT_LIMIT)
return -EINVAL;
@@ -1006,10 +1007,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] 4+ messages in thread
* Re: [PATCH 0/2] v2 Add limit_type to (pptable_funcs)->set_power_limit signature
2021-10-06 5:06 [PATCH 0/2] v2 Add limit_type to (pptable_funcs)->set_power_limit signature Darren Powell
2021-10-06 5:06 ` [PATCH 1/2] amdgpu/pm: (v2) add " Darren Powell
2021-10-06 5:06 ` [PATCH 2/2] drm/amd/pm: Fix incorrect power limit readback in smu11 if POWER_SOURCE_DC Darren Powell
@ 2021-10-08 5:59 ` Lazar, Lijo
2 siblings, 0 replies; 4+ messages in thread
From: Lazar, Lijo @ 2021-10-08 5:59 UTC (permalink / raw)
To: Darren Powell, amd-gfx
On 10/6/2021 10:36 AM, Darren Powell wrote:
> === Description ===
> Add limit_type to (pptable_funcs)->set_power_limit signature
>
> plus small patch
> Fix for incorrect power limit readback in smu11 if POWER_SOURCE_DC
>
> v2
> add check for SMU_DEFAULT_PPT_LIMIT
> dropped patch: 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
> + 20e15ca8448f amdgpu/pm: (v2) add limit_type to (pptable_funcs)->set_power_limit signature
> + 45fb82fd6129 drm/amd/pm: Fix incorrect power limit readback in smu11 if POWER_SOURCE_DC
>
>
> Darren Powell (2):
> amdgpu/pm: (v2) add limit_type to (pptable_funcs)->set_power_limit
> signature
> drm/amd/pm: Fix incorrect power limit readback in smu11 if
> POWER_SOURCE_DC
>
Series is :
Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
Thanks,
Lijo
> 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 | 18 ++++++++++++------
> .../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 | 11 ++++++++---
> 8 files changed, 40 insertions(+), 19 deletions(-)
>
>
> base-commit: d6119c68a46eae0b48c77353aa81e6e38b009d24
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-10-08 6:00 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-06 5:06 [PATCH 0/2] v2 Add limit_type to (pptable_funcs)->set_power_limit signature Darren Powell
2021-10-06 5:06 ` [PATCH 1/2] amdgpu/pm: (v2) add " Darren Powell
2021-10-06 5:06 ` [PATCH 2/2] drm/amd/pm: Fix incorrect power limit readback in smu11 if POWER_SOURCE_DC Darren Powell
2021-10-08 5:59 ` [PATCH 0/2] v2 Add limit_type to (pptable_funcs)->set_power_limit signature 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.