Ping? Alex
On Fri, Aug 8, 2025 at 4:29 PM Alex Deucher <[email protected]> wrote: > > Take into account the limits from the vbios. Ported > from the SMU13 code. > > Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4352 > Signed-off-by: Alex Deucher <[email protected]> > --- > .../drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c | 30 +++++++++++++++---- > 1 file changed, 25 insertions(+), 5 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 3aea32baea3da..f32474af90b34 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 > @@ -1697,9 +1697,11 @@ static int smu_v14_0_2_get_power_limit(struct > smu_context *smu, > uint32_t *min_power_limit) > { > struct smu_table_context *table_context = &smu->smu_table; > + struct smu_14_0_2_powerplay_table *powerplay_table = > + table_context->power_play_table; > PPTable_t *pptable = table_context->driver_pptable; > CustomSkuTable_t *skutable = &pptable->CustomSkuTable; > - uint32_t power_limit; > + uint32_t power_limit, od_percent_upper = 0, od_percent_lower = 0; > uint32_t msg_limit = > pptable->SkuTable.MsgLimits.Power[PPT_THROTTLER_PPT0][POWER_SOURCE_AC]; > > if (smu_v14_0_get_current_power_limit(smu, &power_limit)) > @@ -1712,11 +1714,29 @@ static int smu_v14_0_2_get_power_limit(struct > smu_context *smu, > if (default_power_limit) > *default_power_limit = power_limit; > > - if (max_power_limit) > - *max_power_limit = msg_limit; > + if (powerplay_table) { > + if (smu->od_enabled && > + smu_v14_0_2_is_od_feature_supported(smu, > PP_OD_FEATURE_PPT_BIT)) { > + od_percent_upper = > pptable->SkuTable.OverDriveLimitsBasicMax.Ppt; > + od_percent_lower = > pptable->SkuTable.OverDriveLimitsBasicMin.Ppt; > + } else if (smu_v14_0_2_is_od_feature_supported(smu, > PP_OD_FEATURE_PPT_BIT)) { > + od_percent_upper = 0; > + od_percent_lower = > pptable->SkuTable.OverDriveLimitsBasicMin.Ppt; > + } > + } > + > + dev_dbg(smu->adev->dev, "od percent upper:%d, od percent lower:%d > (default power: %d)\n", > + od_percent_upper, od_percent_lower, > power_limit); > + > + if (max_power_limit) { > + *max_power_limit = msg_limit * (100 + od_percent_upper); > + *max_power_limit /= 100; > + } > > - if (min_power_limit) > - *min_power_limit = 0; > + if (min_power_limit) { > + *min_power_limit = power_limit * (100 + od_percent_lower); > + *min_power_limit /= 100; > + } > > return 0; > } > -- > 2.50.1 >
