mirror of
https://github.com/torvalds/linux.git
synced 2024-12-29 06:12:08 +00:00
drm/amd/pp: enable power limit increase in OD mode
OverDrive mode allows users to increase the maximum SCLK and MCLK frequencies beyond the default on the GPU. However, this may not results in large performance gains if the GPU then runs into its TDP power limit. This patch adds the capability to increase the power limit of a GPU above its default maximum. This is only allowed when overdrive is enabled in the ppfeaturemask, since this is an overdrive feature. The TDPODLimit value from the VBIOS describes how how much higher the TDP should be allowed to go over its default, in percentage. v2: Moved dereference of hwmgr to after its validity check Signed-off-by: Joseph Greathouse <Joseph.Greathouse@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
f191415b24
commit
f7becf9a08
@ -966,6 +966,7 @@ static int pp_dpm_switch_power_profile(void *handle,
|
||||
static int pp_set_power_limit(void *handle, uint32_t limit)
|
||||
{
|
||||
struct pp_hwmgr *hwmgr = handle;
|
||||
uint32_t max_power_limit;
|
||||
|
||||
if (!hwmgr || !hwmgr->pm_en)
|
||||
return -EINVAL;
|
||||
@ -978,7 +979,13 @@ static int pp_set_power_limit(void *handle, uint32_t limit)
|
||||
if (limit == 0)
|
||||
limit = hwmgr->default_power_limit;
|
||||
|
||||
if (limit > hwmgr->default_power_limit)
|
||||
max_power_limit = hwmgr->default_power_limit;
|
||||
if (hwmgr->od_enabled) {
|
||||
max_power_limit *= (100 + hwmgr->platform_descriptor.TDPODLimit);
|
||||
max_power_limit /= 100;
|
||||
}
|
||||
|
||||
if (limit > max_power_limit)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&hwmgr->smu_lock);
|
||||
@ -997,8 +1004,13 @@ static int pp_get_power_limit(void *handle, uint32_t *limit, bool default_limit)
|
||||
|
||||
mutex_lock(&hwmgr->smu_lock);
|
||||
|
||||
if (default_limit)
|
||||
if (default_limit) {
|
||||
*limit = hwmgr->default_power_limit;
|
||||
if (hwmgr->od_enabled) {
|
||||
*limit *= (100 + hwmgr->platform_descriptor.TDPODLimit);
|
||||
*limit /= 100;
|
||||
}
|
||||
}
|
||||
else
|
||||
*limit = hwmgr->power_limit;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user