On 10/9/25 4:29 AM, Lazar, Lijo wrote:
[AMD Official Use Only - AMD Internal Distribution Only]

-----Original Message-----
From: amd-gfx <[email protected]> On Behalf Of Mario
Limonciello
Sent: Thursday, October 9, 2025 12:42 AM
To: Limonciello, Mario <[email protected]>; amd-
[email protected]
Cc: Robert Beckett <[email protected]>
Subject: [PATCH v4 3/6] drm/amd: Remove second call to set_power_limit()

The min/max limits only make sense for default PPT. Restructure
smu_set_power_limit() to only use them in that case.

Signed-off-by: Mario Limonciello <[email protected]>
---
drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 20 +++++++++-----------
1 file changed, 9 insertions(+), 11 deletions(-)

diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
index 1c5f37cd5b75..f946effc1776 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
@@ -2966,20 +2966,18 @@ static int smu_set_power_limit(void *handle,
uint32_t limit_type, uint32_t limit
       if (!smu->pm_enabled || !smu->adev->pm.dpm_enabled)
               return -EOPNOTSUPP;

-      if (limit_type != SMU_DEFAULT_PPT_LIMIT)
-              if (smu->ppt_funcs->set_power_limit)
-                      return smu->ppt_funcs->set_power_limit(smu,
limit_type, limit);
+      if (limit_type == SMU_DEFAULT_PPT_LIMIT) {
+              if ((limit > smu->max_power_limit) || (limit < smu-
min_power_limit)) {
+                      dev_err(smu->adev->dev,
+                              "New power limit (%d) is out of range
[%d,%d]\n",
+                              limit, smu->min_power_limit, smu-
max_power_limit);
+                      return -EINVAL;
+              }

-      if ((limit > smu->max_power_limit) || (limit < smu->min_power_limit))
{
-              dev_err(smu->adev->dev,
-                      "New power limit (%d) is out of range [%d,%d]\n",
-                      limit, smu->min_power_limit, smu->max_power_limit);
-              return -EINVAL;
+              if (!limit)
+                      limit = smu->current_power_limit;
[lijo]

It seems this logic is expected to work only on SOCs with min_power_limit = 0.  
I don't know the history of this. Shall we move this up and make this notation 
generic - a 0-limit passed will try to reapply the current limit for any SOC?


Yeah I think that's a good idea. Basically if your write a limit of 0 that you always end up with resetting to default power limit no matter what the min_power_limit value.
Thanks,
Lijo

       }

-      if (!limit)
-              limit = smu->current_power_limit;
-
       if (smu->ppt_funcs->set_power_limit) {
               ret = smu->ppt_funcs->set_power_limit(smu, limit_type, limit);
               if (!ret && !(smu->user_dpm_profile.flags &
SMU_DPM_USER_PROFILE_RESTORE))
--
2.51.0


Reply via email to