[PATCH] drm/amd/pm: update overdrive function on smu 14.0.2/3

Wang, Yang(Kevin) KevinYang.Wang at amd.com
Sat Oct 12 03:29:06 UTC 2024


[AMD Official Use Only - AMD Internal Distribution Only]

Acked-by: Yang Wang <kevinyang.wang at amd.com>

Best Regards,
Kevin

-----Original Message-----
From: Kenneth Feng <kenneth.feng at amd.com>
Sent: Saturday, October 12, 2024 10:00 AM
To: amd-gfx at lists.freedesktop.org
Cc: Wang, Yang(Kevin) <KevinYang.Wang at amd.com>; Feng, Kenneth <Kenneth.Feng at amd.com>
Subject: [PATCH] drm/amd/pm: update overdrive function on smu 14.0.2/3

update overdrive function on smu 14.0.2/3

Signed-off-by: Kenneth Feng <kenneth.feng at amd.com>
---
 .../drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c  | 61 ++++++-------------
 1 file changed, 19 insertions(+), 42 deletions(-)

diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c
index ade3ee398e3d..7c97a4d34377 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c
@@ -1064,12 +1064,9 @@ static void smu_v14_0_2_get_od_setting_limits(struct smu_context *smu,

        switch (od_feature_bit) {
        case PP_OD_FEATURE_GFXCLK_FMIN:
-               od_min_setting = overdrive_lowerlimits->GfxclkFmin;
-               od_max_setting = overdrive_upperlimits->GfxclkFmin;
-               break;
        case PP_OD_FEATURE_GFXCLK_FMAX:
-               od_min_setting = overdrive_lowerlimits->GfxclkFmax;
-               od_max_setting = overdrive_upperlimits->GfxclkFmax;
+               od_min_setting = overdrive_lowerlimits->GfxclkFoffset;
+               od_max_setting = overdrive_upperlimits->GfxclkFoffset;
                break;
        case PP_OD_FEATURE_UCLK_FMIN:
                od_min_setting = overdrive_lowerlimits->UclkFmin; @@ -1256,10 +1253,16 @@ static int smu_v14_0_2_print_clk_levels(struct smu_context *smu,
                                                         PP_OD_FEATURE_GFXCLK_BIT))
                        break;

-               size += sysfs_emit_at(buf, size, "OD_SCLK:\n");
-               size += sysfs_emit_at(buf, size, "0: %uMhz\n1: %uMhz\n",
-                                       od_table->OverDriveTable.GfxclkFmin,
-                                       od_table->OverDriveTable.GfxclkFmax);
+               PPTable_t *pptable = smu->smu_table.driver_pptable;
+               const OverDriveLimits_t * const overdrive_upperlimits =
+                                       &pptable->SkuTable.OverDriveLimitsBasicMax;
+               const OverDriveLimits_t * const overdrive_lowerlimits =
+                                       &pptable->SkuTable.OverDriveLimitsBasicMin;
+
+               size += sysfs_emit_at(buf, size, "OD_SCLK_OFFSET:\n");
+               size += sysfs_emit_at(buf, size, "0: %dMhz\n1: %uMhz\n",
+                                       overdrive_lowerlimits->GfxclkFoffset,
+                                       overdrive_upperlimits->GfxclkFoffset);
                break;

        case SMU_OD_MCLK:
@@ -1401,7 +1404,7 @@ static int smu_v14_0_2_print_clk_levels(struct smu_context *smu,
                                                          PP_OD_FEATURE_GFXCLK_FMAX,
                                                          NULL,
                                                          &max_value);
-                       size += sysfs_emit_at(buf, size, "SCLK: %7uMhz %10uMhz\n",
+                       size += sysfs_emit_at(buf, size, "SCLK_OFFSET: %7dMhz %10uMhz\n",
                                              min_value, max_value);
                }

@@ -2145,7 +2148,7 @@ static ssize_t smu_v14_0_2_get_gpu_metrics(struct smu_context *smu,

        gpu_metrics->average_gfx_activity = metrics->AverageGfxActivity;
        gpu_metrics->average_umc_activity = metrics->AverageUclkActivity;
-       gpu_metrics->average_mm_activity = max(metrics->Vcn0ActivityPercentage,
+       gpu_metrics->average_mm_activity =
+max(metrics->AverageVcn0ActivityPercentage,
                                               metrics->Vcn1ActivityPercentage);

        gpu_metrics->average_socket_power = metrics->AverageSocketPower; @@ -2204,8 +2207,8 @@ static void smu_v14_0_2_dump_od_table(struct smu_context *smu,  {
        struct amdgpu_device *adev = smu->adev;

-       dev_dbg(adev->dev, "OD: Gfxclk: (%d, %d)\n", od_table->OverDriveTable.GfxclkFmin,
-                                                    od_table->OverDriveTable.GfxclkFmax);
+       dev_dbg(adev->dev, "OD: Gfxclk: (%d, %d)\n", od_table->OverDriveTable.GfxclkFoffset,
+                                                    od_table->OverDriveTable.GfxclkFoffset);
        dev_dbg(adev->dev, "OD: Uclk: (%d, %d)\n", od_table->OverDriveTable.UclkFmin,
                                                   od_table->OverDriveTable.UclkFmax);
 }
@@ -2296,10 +2299,8 @@ static int smu_v14_0_2_set_default_od_settings(struct smu_context *smu)
                memcpy(user_od_table,
                       boot_od_table,
                       sizeof(OverDriveTableExternal_t));
-               user_od_table->OverDriveTable.GfxclkFmin =
-                               user_od_table_bak.OverDriveTable.GfxclkFmin;
-               user_od_table->OverDriveTable.GfxclkFmax =
-                               user_od_table_bak.OverDriveTable.GfxclkFmax;
+               user_od_table->OverDriveTable.GfxclkFoffset =
+                               user_od_table_bak.OverDriveTable.GfxclkFoffset;
                user_od_table->OverDriveTable.UclkFmin =
                                user_od_table_bak.OverDriveTable.UclkFmin;
                user_od_table->OverDriveTable.UclkFmax = @@ -2428,22 +2429,6 @@ static int smu_v14_0_2_od_edit_dpm_table(struct smu_context *smu,
                        }

                        switch (input[i]) {
-                       case 0:
-                               smu_v14_0_2_get_od_setting_limits(smu,
-                                                                 PP_OD_FEATURE_GFXCLK_FMIN,
-                                                                 &minimum,
-                                                                 &maximum);
-                               if (input[i + 1] < minimum ||
-                                   input[i + 1] > maximum) {
-                                       dev_info(adev->dev, "GfxclkFmin (%ld) must be within [%u, %u]!\n",
-                                               input[i + 1], minimum, maximum);
-                                       return -EINVAL;
-                               }
-
-                               od_table->OverDriveTable.GfxclkFmin = input[i + 1];
-                               od_table->OverDriveTable.FeatureCtrlMask |= 1U << PP_OD_FEATURE_GFXCLK_BIT;
-                               break;
-
                        case 1:
                                smu_v14_0_2_get_od_setting_limits(smu,
                                                                  PP_OD_FEATURE_GFXCLK_FMAX,
@@ -2456,7 +2441,7 @@ static int smu_v14_0_2_od_edit_dpm_table(struct smu_context *smu,
                                        return -EINVAL;
                                }

-                               od_table->OverDriveTable.GfxclkFmax = input[i + 1];
+                               od_table->OverDriveTable.GfxclkFoffset = input[i + 1];
                                od_table->OverDriveTable.FeatureCtrlMask |= 1U << PP_OD_FEATURE_GFXCLK_BIT;
                                break;

@@ -2466,14 +2451,6 @@ static int smu_v14_0_2_od_edit_dpm_table(struct smu_context *smu,
                                return -EINVAL;
                        }
                }
-
-               if (od_table->OverDriveTable.GfxclkFmin > od_table->OverDriveTable.GfxclkFmax) {
-                       dev_err(adev->dev,
-                               "Invalid setting: GfxclkFmin(%u) is bigger than GfxclkFmax(%u)\n",
-                               (uint32_t)od_table->OverDriveTable.GfxclkFmin,
-                               (uint32_t)od_table->OverDriveTable.GfxclkFmax);
-                       return -EINVAL;
-               }
                break;

        case PP_OD_EDIT_MCLK_VDDC_TABLE:
--
2.34.1



More information about the amd-gfx mailing list