[PATCH 2/2] drm/amd/pm: Add reset option for fan_ctrl on smu 13.0.7
Alex Deucher
alexdeucher at gmail.com
Tue Oct 10 13:20:12 UTC 2023
On Tue, Oct 10, 2023 at 6:17 AM Ma Jun <Jun.Ma2 at amd.com> wrote:
>
> Add reset option for fan_ctrl interfaces on the smu v13.0.7
> User can use command "echo r > interface_name" to reset the
> interface to boot value
>
> Signed-off-by: Ma Jun <Jun.Ma2 at amd.com>
Series is:
Acked-by: Alex Deucher <alexander.deucher at amd.com>
> ---
> .../drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c | 69 +++++++++++++++++--
> 1 file changed, 64 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c
> index b8a7a1d853df..3c5526babb14 100644
> --- a/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c
> +++ b/drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c
> @@ -1497,6 +1497,59 @@ static int smu_v13_0_7_print_clk_levels(struct smu_context *smu,
> return size;
> }
>
> +static int smu_v13_0_7_od_restore_table_single(struct smu_context *smu, long input)
> +{
> + struct smu_table_context *table_context = &smu->smu_table;
> + OverDriveTableExternal_t *boot_overdrive_table =
> + (OverDriveTableExternal_t *)table_context->boot_overdrive_table;
> + OverDriveTableExternal_t *od_table =
> + (OverDriveTableExternal_t *)table_context->overdrive_table;
> + struct amdgpu_device *adev = smu->adev;
> + int i;
> +
> + switch (input) {
> + case PP_OD_EDIT_FAN_CURVE:
> + for (i = 0; i < NUM_OD_FAN_MAX_POINTS; i++) {
> + od_table->OverDriveTable.FanLinearTempPoints[i] =
> + boot_overdrive_table->OverDriveTable.FanLinearTempPoints[i];
> + od_table->OverDriveTable.FanLinearPwmPoints[i] =
> + boot_overdrive_table->OverDriveTable.FanLinearPwmPoints[i];
> + }
> + od_table->OverDriveTable.FanMode = FAN_MODE_AUTO;
> + od_table->OverDriveTable.FeatureCtrlMask |= BIT(PP_OD_FEATURE_FAN_CURVE_BIT);
> + break;
> + case PP_OD_EDIT_ACOUSTIC_LIMIT:
> + od_table->OverDriveTable.AcousticLimitRpmThreshold =
> + boot_overdrive_table->OverDriveTable.AcousticLimitRpmThreshold;
> + od_table->OverDriveTable.FanMode = FAN_MODE_AUTO;
> + od_table->OverDriveTable.FeatureCtrlMask |= BIT(PP_OD_FEATURE_FAN_CURVE_BIT);
> + break;
> + case PP_OD_EDIT_ACOUSTIC_TARGET:
> + od_table->OverDriveTable.AcousticTargetRpmThreshold =
> + boot_overdrive_table->OverDriveTable.AcousticTargetRpmThreshold;
> + od_table->OverDriveTable.FanMode = FAN_MODE_AUTO;
> + od_table->OverDriveTable.FeatureCtrlMask |= BIT(PP_OD_FEATURE_FAN_CURVE_BIT);
> + break;
> + case PP_OD_EDIT_FAN_TARGET_TEMPERATURE:
> + od_table->OverDriveTable.FanTargetTemperature =
> + boot_overdrive_table->OverDriveTable.FanTargetTemperature;
> + od_table->OverDriveTable.FanMode = FAN_MODE_AUTO;
> + od_table->OverDriveTable.FeatureCtrlMask |= BIT(PP_OD_FEATURE_FAN_CURVE_BIT);
> + break;
> + case PP_OD_EDIT_FAN_MINIMUM_PWM:
> + od_table->OverDriveTable.FanMinimumPwm =
> + boot_overdrive_table->OverDriveTable.FanMinimumPwm;
> + od_table->OverDriveTable.FanMode = FAN_MODE_AUTO;
> + od_table->OverDriveTable.FeatureCtrlMask |= BIT(PP_OD_FEATURE_FAN_CURVE_BIT);
> + break;
> + default:
> + dev_info(adev->dev, "Invalid table index: %ld\n", input);
> + return -EINVAL;
> + }
> +
> + return 0;
> +}
> +
> static int smu_v13_0_7_od_edit_dpm_table(struct smu_context *smu,
> enum PP_OD_DPM_TABLE_COMMAND type,
> long input[],
> @@ -1783,11 +1836,17 @@ static int smu_v13_0_7_od_edit_dpm_table(struct smu_context *smu,
> break;
>
> case PP_OD_RESTORE_DEFAULT_TABLE:
> - feature_ctrlmask = od_table->OverDriveTable.FeatureCtrlMask;
> - memcpy(od_table,
> - table_context->boot_overdrive_table,
> - sizeof(OverDriveTableExternal_t));
> - od_table->OverDriveTable.FeatureCtrlMask = feature_ctrlmask;
> + if (size == 1) {
> + ret = smu_v13_0_7_od_restore_table_single(smu, input[0]);
> + if (ret)
> + return ret;
> + } else {
> + feature_ctrlmask = od_table->OverDriveTable.FeatureCtrlMask;
> + memcpy(od_table,
> + table_context->boot_overdrive_table,
> + sizeof(OverDriveTableExternal_t));
> + od_table->OverDriveTable.FeatureCtrlMask = feature_ctrlmask;
> + }
> fallthrough;
>
> case PP_OD_COMMIT_DPM_TABLE:
> --
> 2.34.1
>
More information about the amd-gfx
mailing list