Re: [PATCH] drm/amd/pm: correct SMU13 gfx voltage related OD settings

2023-08-21 Thread Alex Deucher
Acked-by: Alex Deucher 

On Mon, Aug 21, 2023 at 2:50 AM Evan Quan  wrote:
>
> The voltage offset setting will be applied to the whole v/f curve line
> instead of per anchor point base.
>
> Signed-off-by: Evan Quan 
> ---
>  drivers/gpu/drm/amd/pm/amdgpu_pm.c| 45 +++
>  .../drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c  | 31 ++---
>  .../drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c  | 31 ++---
>  3 files changed, 43 insertions(+), 64 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/pm/amdgpu_pm.c 
> b/drivers/gpu/drm/amd/pm/amdgpu_pm.c
> index f03647fa3df6..97d550ac6942 100644
> --- a/drivers/gpu/drm/amd/pm/amdgpu_pm.c
> +++ b/drivers/gpu/drm/amd/pm/amdgpu_pm.c
> @@ -643,18 +643,14 @@ static ssize_t amdgpu_set_pp_table(struct device *dev,
>   *   They can be used to calibrate the sclk voltage curve. This is
>   *   available for Vega20 and NV1X.
>   *
> - * - voltage offset for the six anchor points of the v/f curve labeled
> - *   OD_VDDC_CURVE. They can be used to calibrate the v/f curve. This
> - *   is only availabe for some SMU13 ASICs.
> - *
>   * - voltage offset(in mV) applied on target voltage calculation.
> - *   This is available for Sienna Cichlid, Navy Flounder and Dimgrey
> - *   Cavefish. For these ASICs, the target voltage calculation can be
> - *   illustrated by "voltage = voltage calculated from v/f curve +
> - *   overdrive vddgfx offset"
> + *   This is available for Sienna Cichlid, Navy Flounder, Dimgrey
> + *   Cavefish and some later SMU13 ASICs. For these ASICs, the target
> + *   voltage calculation can be illustrated by "voltage = voltage
> + *   calculated from v/f curve + overdrive vddgfx offset"
>   *
> - * - a list of valid ranges for sclk, mclk, and voltage curve points
> - *   labeled OD_RANGE
> + * - a list of valid ranges for sclk, mclk, voltage curve points
> + *   or voltage offset labeled OD_RANGE
>   *
>   * < For APUs >
>   *
> @@ -686,24 +682,17 @@ static ssize_t amdgpu_set_pp_table(struct device *dev,
>   *   E.g., "p 2 0 800" would set the minimum core clock on core
>   *   2 to 800Mhz.
>   *
> - *   For sclk voltage curve,
> - * - For NV1X, enter the new values by writing a string that
> - *   contains "vc point clock voltage" to the file. The points
> - *   are indexed by 0, 1 and 2. E.g., "vc 0 300 600" will update
> - *   point1 with clock set as 300Mhz and voltage as 600mV. "vc 2
> - *   1000 1000" will update point3 with clock set as 1000Mhz and
> - *   voltage 1000mV.
> - * - For SMU13 ASICs, enter the new values by writing a string that
> - *   contains "vc anchor_point_index voltage_offset" to the file.
> - *   There are total six anchor points defined on the v/f curve with
> - *   index as 0 - 5.
> - *   - "vc 0 10" will update the voltage offset for point1 as 10mv.
> - *   - "vc 5 -10" will update the voltage offset for point6 as -10mv.
> - *
> - *   To update the voltage offset applied for gfxclk/voltage calculation,
> - *   enter the new value by writing a string that contains "vo offset".
> - *   This is supported by Sienna Cichlid, Navy Flounder and Dimgrey Cavefish.
> - *   And the offset can be a positive or negative value.
> + *   For sclk voltage curve supported by Vega20 and NV1X, enter the new
> + *   values by writing a string that contains "vc point clock voltage"
> + *   to the file. The points are indexed by 0, 1 and 2. E.g., "vc 0 300
> + *   600" will update point1 with clock set as 300Mhz and voltage as 600mV.
> + *   "vc 2 1000 1000" will update point3 with clock set as 1000Mhz and
> + *   voltage 1000mV.
> + *
> + *   For voltage offset supported by Sienna Cichlid, Navy Flounder, Dimgrey
> + *   Cavefish and some later SMU13 ASICs, enter the new value by writing a
> + *   string that contains "vo offset". E.g., "vo -10" will update the extra
> + *   voltage offset applied to the whole v/f curve line as -10mv.
>   *
>   * - When you have edited all of the states as needed, write "c" (commit)
>   *   to the file to commit your changes
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c 
> b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c
> index 3903a47669e4..bd0d5f027cac 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c
> @@ -1304,16 +1304,14 @@ static int smu_v13_0_0_print_clk_levels(struct 
> smu_context *smu,
> od_table->OverDriveTable.UclkFmax);
> break;
>
> -   case SMU_OD_VDDC_CURVE:
> +   case SMU_OD_VDDGFX_OFFSET:
> if (!smu_v13_0_0_is_od_feature_supported(smu,
>  
> PP_OD_FEATURE_GFX_VF_CURVE_BIT))
> break;
>
> -   size += sysfs_emit_at(buf, size, "OD_VDDC_CURVE:\n");
> -   for (i = 0; i < PP_NUM_OD_VF_CURVE_POINTS; i++)
> -   size += 

[PATCH] drm/amd/pm: correct SMU13 gfx voltage related OD settings

2023-08-21 Thread Evan Quan
The voltage offset setting will be applied to the whole v/f curve line
instead of per anchor point base.

Signed-off-by: Evan Quan 
---
 drivers/gpu/drm/amd/pm/amdgpu_pm.c| 45 +++
 .../drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c  | 31 ++---
 .../drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c  | 31 ++---
 3 files changed, 43 insertions(+), 64 deletions(-)

diff --git a/drivers/gpu/drm/amd/pm/amdgpu_pm.c 
b/drivers/gpu/drm/amd/pm/amdgpu_pm.c
index f03647fa3df6..97d550ac6942 100644
--- a/drivers/gpu/drm/amd/pm/amdgpu_pm.c
+++ b/drivers/gpu/drm/amd/pm/amdgpu_pm.c
@@ -643,18 +643,14 @@ static ssize_t amdgpu_set_pp_table(struct device *dev,
  *   They can be used to calibrate the sclk voltage curve. This is
  *   available for Vega20 and NV1X.
  *
- * - voltage offset for the six anchor points of the v/f curve labeled
- *   OD_VDDC_CURVE. They can be used to calibrate the v/f curve. This
- *   is only availabe for some SMU13 ASICs.
- *
  * - voltage offset(in mV) applied on target voltage calculation.
- *   This is available for Sienna Cichlid, Navy Flounder and Dimgrey
- *   Cavefish. For these ASICs, the target voltage calculation can be
- *   illustrated by "voltage = voltage calculated from v/f curve +
- *   overdrive vddgfx offset"
+ *   This is available for Sienna Cichlid, Navy Flounder, Dimgrey
+ *   Cavefish and some later SMU13 ASICs. For these ASICs, the target
+ *   voltage calculation can be illustrated by "voltage = voltage
+ *   calculated from v/f curve + overdrive vddgfx offset"
  *
- * - a list of valid ranges for sclk, mclk, and voltage curve points
- *   labeled OD_RANGE
+ * - a list of valid ranges for sclk, mclk, voltage curve points
+ *   or voltage offset labeled OD_RANGE
  *
  * < For APUs >
  *
@@ -686,24 +682,17 @@ static ssize_t amdgpu_set_pp_table(struct device *dev,
  *   E.g., "p 2 0 800" would set the minimum core clock on core
  *   2 to 800Mhz.
  *
- *   For sclk voltage curve,
- * - For NV1X, enter the new values by writing a string that
- *   contains "vc point clock voltage" to the file. The points
- *   are indexed by 0, 1 and 2. E.g., "vc 0 300 600" will update
- *   point1 with clock set as 300Mhz and voltage as 600mV. "vc 2
- *   1000 1000" will update point3 with clock set as 1000Mhz and
- *   voltage 1000mV.
- * - For SMU13 ASICs, enter the new values by writing a string that
- *   contains "vc anchor_point_index voltage_offset" to the file.
- *   There are total six anchor points defined on the v/f curve with
- *   index as 0 - 5.
- *   - "vc 0 10" will update the voltage offset for point1 as 10mv.
- *   - "vc 5 -10" will update the voltage offset for point6 as -10mv.
- *
- *   To update the voltage offset applied for gfxclk/voltage calculation,
- *   enter the new value by writing a string that contains "vo offset".
- *   This is supported by Sienna Cichlid, Navy Flounder and Dimgrey Cavefish.
- *   And the offset can be a positive or negative value.
+ *   For sclk voltage curve supported by Vega20 and NV1X, enter the new
+ *   values by writing a string that contains "vc point clock voltage"
+ *   to the file. The points are indexed by 0, 1 and 2. E.g., "vc 0 300
+ *   600" will update point1 with clock set as 300Mhz and voltage as 600mV.
+ *   "vc 2 1000 1000" will update point3 with clock set as 1000Mhz and
+ *   voltage 1000mV.
+ *
+ *   For voltage offset supported by Sienna Cichlid, Navy Flounder, Dimgrey
+ *   Cavefish and some later SMU13 ASICs, enter the new value by writing a
+ *   string that contains "vo offset". E.g., "vo -10" will update the extra
+ *   voltage offset applied to the whole v/f curve line as -10mv.
  *
  * - When you have edited all of the states as needed, write "c" (commit)
  *   to the file to commit your changes
diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c 
b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c
index 3903a47669e4..bd0d5f027cac 100644
--- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c
+++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c
@@ -1304,16 +1304,14 @@ static int smu_v13_0_0_print_clk_levels(struct 
smu_context *smu,
od_table->OverDriveTable.UclkFmax);
break;
 
-   case SMU_OD_VDDC_CURVE:
+   case SMU_OD_VDDGFX_OFFSET:
if (!smu_v13_0_0_is_od_feature_supported(smu,
 
PP_OD_FEATURE_GFX_VF_CURVE_BIT))
break;
 
-   size += sysfs_emit_at(buf, size, "OD_VDDC_CURVE:\n");
-   for (i = 0; i < PP_NUM_OD_VF_CURVE_POINTS; i++)
-   size += sysfs_emit_at(buf, size, "%d: %dmv\n",
-   i,
-   
od_table->OverDriveTable.VoltageOffsetPerZoneBoundary[i]);
+   size += sysfs_emit_at(buf, size, "OD_VDDGFX_OFFSET:\n");
+