On Thu, Apr 2, 2026 at 11:04 PM Yang Wang <[email protected]> wrote: > > OverDriveTable.FanMinimumPwm and FeatureCtrlMask.PP_OD_FEATURE_FAN_LEGACY_BIT > have a hard dependency. > Invalid handling of this dependency leads to disabled thermal monitoring > and temperature boundary validation. > > Fixes: 9710b84e2a6a ("drm/amd/pm: add overdrive support on smu v14.0.2/3") > > Signed-off-by: Yang Wang <[email protected]>
Acked-by: Alex Deucher <[email protected]> > --- > drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 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 2be080b4cbc3..bc1bfb618aa0 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 > @@ -2390,6 +2390,7 @@ static int smu_v14_0_2_od_restore_table_single(struct > smu_context *smu, long inp > } > od_table->OverDriveTable.FanMode = FAN_MODE_AUTO; > od_table->OverDriveTable.FeatureCtrlMask |= > BIT(PP_OD_FEATURE_FAN_CURVE_BIT); > + od_table->OverDriveTable.FeatureCtrlMask &= > BIT(PP_OD_FEATURE_FAN_LEGACY_BIT); > break; > case PP_OD_EDIT_FAN_ZERO_RPM_ENABLE: > od_table->OverDriveTable.FanZeroRpmEnable = > @@ -2418,7 +2419,8 @@ static int smu_v14_0_2_od_restore_table_single(struct > smu_context *smu, long inp > 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); > + od_table->OverDriveTable.FeatureCtrlMask |= > BIT(PP_OD_FEATURE_FAN_LEGACY_BIT); > + od_table->OverDriveTable.FeatureCtrlMask &= > BIT(PP_OD_FEATURE_FAN_CURVE_BIT); > break; > default: > dev_info(adev->dev, "Invalid table index: %ld\n", input); > @@ -2588,6 +2590,7 @@ static int smu_v14_0_2_od_edit_dpm_table(struct > smu_context *smu, > od_table->OverDriveTable.FanLinearPwmPoints[input[0]] = > input[2]; > od_table->OverDriveTable.FanMode = FAN_MODE_MANUAL_LINEAR; > od_table->OverDriveTable.FeatureCtrlMask |= > BIT(PP_OD_FEATURE_FAN_CURVE_BIT); > + od_table->OverDriveTable.FeatureCtrlMask &= > ~BIT(PP_OD_FEATURE_FAN_LEGACY_BIT); > break; > > case PP_OD_EDIT_ACOUSTIC_LIMIT: > @@ -2657,7 +2660,7 @@ static int smu_v14_0_2_od_edit_dpm_table(struct > smu_context *smu, > break; > > case PP_OD_EDIT_FAN_MINIMUM_PWM: > - if (!smu_v14_0_2_is_od_feature_supported(smu, > PP_OD_FEATURE_FAN_CURVE_BIT)) { > + if (!smu_v14_0_2_is_od_feature_supported(smu, > PP_OD_FEATURE_FAN_LEGACY_BIT)) { > dev_warn(adev->dev, "Fan curve setting not > supported!\n"); > return -ENOTSUPP; > } > @@ -2675,7 +2678,8 @@ static int smu_v14_0_2_od_edit_dpm_table(struct > smu_context *smu, > > od_table->OverDriveTable.FanMinimumPwm = input[0]; > od_table->OverDriveTable.FanMode = FAN_MODE_AUTO; > - od_table->OverDriveTable.FeatureCtrlMask |= > BIT(PP_OD_FEATURE_FAN_CURVE_BIT); > + od_table->OverDriveTable.FeatureCtrlMask |= > BIT(PP_OD_FEATURE_FAN_LEGACY_BIT); > + od_table->OverDriveTable.FeatureCtrlMask &= > BIT(PP_OD_FEATURE_FAN_CURVE_BIT); > break; > > case PP_OD_EDIT_FAN_ZERO_RPM_ENABLE: > -- > 2.47.3 >
