[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