Commit f7f9e48f authored by Ma Jun's avatar Ma Jun Committed by Alex Deucher

drm/amd/pm: Add reset option for fan_curve on smu13_0_0

Add reset option for fan_curve.
User can use command "echo r > fan_cure" to reset the fan_curve
to boot value
Signed-off-by: default avatarMa Jun <Jun.Ma2@amd.com>
Acked-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 072ae240
...@@ -3446,6 +3446,11 @@ static int parse_input_od_command_lines(const char *buf, ...@@ -3446,6 +3446,11 @@ static int parse_input_od_command_lines(const char *buf,
case 'c': case 'c':
*type = PP_OD_COMMIT_DPM_TABLE; *type = PP_OD_COMMIT_DPM_TABLE;
return 0; return 0;
case 'r':
params[parameter_size] = *type;
*num_of_params = 1;
*type = PP_OD_RESTORE_DEFAULT_TABLE;
return 0;
default: default:
break; break;
} }
...@@ -3540,6 +3545,9 @@ amdgpu_distribute_custom_od_settings(struct amdgpu_device *adev, ...@@ -3540,6 +3545,9 @@ amdgpu_distribute_custom_od_settings(struct amdgpu_device *adev,
* When you have finished the editing, write "c" (commit) to the file to commit * When you have finished the editing, write "c" (commit) to the file to commit
* your changes. * your changes.
* *
* If you want to reset to the default value, write "r" (reset) to the file to
* reset them
*
* There are two fan control modes supported: auto and manual. With auto mode, * There are two fan control modes supported: auto and manual. With auto mode,
* PMFW handles the fan speed control(how fan speed reacts to ASIC temperature). * PMFW handles the fan speed control(how fan speed reacts to ASIC temperature).
* While with manual mode, users can set their own fan curve line as what * While with manual mode, users can set their own fan curve line as what
......
...@@ -1511,6 +1511,36 @@ static int smu_v13_0_0_print_clk_levels(struct smu_context *smu, ...@@ -1511,6 +1511,36 @@ static int smu_v13_0_0_print_clk_levels(struct smu_context *smu,
return size; return size;
} }
static int smu_v13_0_0_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;
default:
dev_info(adev->dev, "Invalid table index: %ld\n", input);
return -EINVAL;
}
return 0;
}
static int smu_v13_0_0_od_edit_dpm_table(struct smu_context *smu, static int smu_v13_0_0_od_edit_dpm_table(struct smu_context *smu,
enum PP_OD_DPM_TABLE_COMMAND type, enum PP_OD_DPM_TABLE_COMMAND type,
long input[], long input[],
...@@ -1797,13 +1827,18 @@ static int smu_v13_0_0_od_edit_dpm_table(struct smu_context *smu, ...@@ -1797,13 +1827,18 @@ static int smu_v13_0_0_od_edit_dpm_table(struct smu_context *smu,
break; break;
case PP_OD_RESTORE_DEFAULT_TABLE: case PP_OD_RESTORE_DEFAULT_TABLE:
feature_ctrlmask = od_table->OverDriveTable.FeatureCtrlMask; if (size == 1) {
memcpy(od_table, ret = smu_v13_0_0_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, table_context->boot_overdrive_table,
sizeof(OverDriveTableExternal_t)); sizeof(OverDriveTableExternal_t));
od_table->OverDriveTable.FeatureCtrlMask = feature_ctrlmask; od_table->OverDriveTable.FeatureCtrlMask = feature_ctrlmask;
}
fallthrough; fallthrough;
case PP_OD_COMMIT_DPM_TABLE: case PP_OD_COMMIT_DPM_TABLE:
/* /*
* The member below instructs PMFW the settings focused in * The member below instructs PMFW the settings focused in
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment