mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-07-19 03:59:45 +02:00
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: Ma Jun <Jun.Ma2@amd.com> Acked-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
072ae240cd
commit
f7f9e48fa8
|
@ -3446,6 +3446,11 @@ static int parse_input_od_command_lines(const char *buf,
|
|||
case 'c':
|
||||
*type = PP_OD_COMMIT_DPM_TABLE;
|
||||
return 0;
|
||||
case 'r':
|
||||
params[parameter_size] = *type;
|
||||
*num_of_params = 1;
|
||||
*type = PP_OD_RESTORE_DEFAULT_TABLE;
|
||||
return 0;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -3540,6 +3545,9 @@ err_out0:
|
|||
* When you have finished the editing, write "c" (commit) to the file to commit
|
||||
* 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,
|
||||
* 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
|
||||
|
|
|
@ -1511,6 +1511,36 @@ static int smu_v13_0_0_print_clk_levels(struct smu_context *smu,
|
|||
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,
|
||||
enum PP_OD_DPM_TABLE_COMMAND type,
|
||||
long input[],
|
||||
|
@ -1797,13 +1827,18 @@ static int smu_v13_0_0_od_edit_dpm_table(struct smu_context *smu,
|
|||
break;
|
||||
|
||||
case PP_OD_RESTORE_DEFAULT_TABLE:
|
||||
feature_ctrlmask = od_table->OverDriveTable.FeatureCtrlMask;
|
||||
memcpy(od_table,
|
||||
if (size == 1) {
|
||||
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,
|
||||
sizeof(OverDriveTableExternal_t));
|
||||
od_table->OverDriveTable.FeatureCtrlMask = feature_ctrlmask;
|
||||
od_table->OverDriveTable.FeatureCtrlMask = feature_ctrlmask;
|
||||
}
|
||||
fallthrough;
|
||||
|
||||
case PP_OD_COMMIT_DPM_TABLE:
|
||||
/*
|
||||
* The member below instructs PMFW the settings focused in
|
||||
|
|
Loading…
Reference in New Issue
Block a user