[PATCH] drm/radeon/pm: autoswitch power state when in balanced mode
Michel Dänzer
michel at daenzer.net
Mon Oct 24 08:02:13 UTC 2016
On 23/10/16 08:05 AM, Lucas Stach wrote:
> The current default of always using the performance power state leads
> to increased power consumption of mobile devices, which have a dedicated
> battery power state. Switch between the performance and battery power
> state automatically, dpending on the current AC power status, when the
> user asked for the balanced power state.
>
> The user can still override this logic by asking for the performance
> or battery power state explicitly.
>
> Signed-off-by: Lucas Stach <dev at lynxeye.de>
> ---
> This saves about 1.2W on my Richland based laptop, whithout me having
> to remember to ask for the battery state or have userspace set up in
> a way to do this.
> ---
> drivers/gpu/drm/radeon/radeon_pm.c | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/radeon/radeon_pm.c b/drivers/gpu/drm/radeon/radeon_pm.c
> index 4b65425..326ad06 100644
> --- a/drivers/gpu/drm/radeon/radeon_pm.c
> +++ b/drivers/gpu/drm/radeon/radeon_pm.c
> @@ -47,6 +47,7 @@ static bool radeon_pm_in_vbl(struct radeon_device *rdev);
> static bool radeon_pm_debug_check_in_vbl(struct radeon_device *rdev, bool finish);
> static void radeon_pm_update_profile(struct radeon_device *rdev);
> static void radeon_pm_set_clocks(struct radeon_device *rdev);
> +static void radeon_pm_compute_clocks_dpm(struct radeon_device *rdev);
>
> int radeon_pm_get_type_index(struct radeon_device *rdev,
> enum radeon_pm_state_type ps_type,
> @@ -79,6 +80,8 @@ void radeon_pm_acpi_event_handler(struct radeon_device *rdev)
> radeon_dpm_enable_bapm(rdev, rdev->pm.dpm.ac_power);
> }
> mutex_unlock(&rdev->pm.mutex);
> + /* allow new DPM state to be picked */
> + radeon_pm_compute_clocks_dpm(rdev);
> } else if (rdev->pm.pm_method == PM_METHOD_PROFILE) {
> if (rdev->pm.profile == PM_PROFILE_AUTO) {
> mutex_lock(&rdev->pm.mutex);
> @@ -882,7 +885,8 @@ static struct radeon_ps *radeon_dpm_pick_power_state(struct radeon_device *rdev,
> dpm_state = POWER_STATE_TYPE_INTERNAL_3DPERF;
> /* balanced states don't exist at the moment */
> if (dpm_state == POWER_STATE_TYPE_BALANCED)
> - dpm_state = POWER_STATE_TYPE_PERFORMANCE;
> + dpm_state = rdev->pm.dpm.ac_power ?
> + POWER_STATE_TYPE_PERFORMANCE : POWER_STATE_TYPE_BATTERY;
>
> restart_search:
> /* Pick the best power state based on current conditions */
>
I've been using this patch for a while on my Kaveri laptops and haven't
noticed any issues with it. I haven't compared the power consumption in
detail though.
Tested-by: Michel Dänzer <michel.daenzer at amd.com>
--
Earthling Michel Dänzer | http://www.amd.com
Libre software enthusiast | Mesa and X developer
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 191 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20161024/95fe196d/attachment.sig>
More information about the dri-devel
mailing list