[PATCH] drm/radeon: use variable UVD clocks

Christian König deathsimple at vodafone.de
Fri Feb 21 09:01:00 PST 2014


Am 21.02.2014 17:34, schrieb Alex Deucher:
> Now that Christian fixed the performance problems with
> the feedback buffer in mesa, we can enable variable UVD
> clocks.  There are multiple UVD power states associated
> with different types and numbers of streams.  This uses
> the appropriate state based on that information rather
> than always using the fastest UVD clocks which saves some
> power.  One possible downside is that this may adversely
> affect decode benchmarks since these power states target
> specific playback requirements rather than maximum
> performance.  If that becomes an issue, we can add a
> sysfs attribute to force the max UVD state.
>
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>

Reviewed-by: Christian König <christian.koenig at amd.com>

Additional to that we should also count the number of frames per second 
submitted to choose a power state, but that's not so urgent right now.

Do you want to pull that in through drm-fixes or should I apply it to 
the drm-next-3.15 tree? For me it sounds more like drm-next.

Christian.

> ---
>   drivers/gpu/drm/radeon/radeon_pm.c  | 3 ---
>   drivers/gpu/drm/radeon/radeon_uvd.c | 3 +--
>   2 files changed, 1 insertion(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/radeon_pm.c b/drivers/gpu/drm/radeon/radeon_pm.c
> index 6f20bb0..2cb2fb8 100644
> --- a/drivers/gpu/drm/radeon/radeon_pm.c
> +++ b/drivers/gpu/drm/radeon/radeon_pm.c
> @@ -956,8 +956,6 @@ void radeon_dpm_enable_uvd(struct radeon_device *rdev, bool enable)
>   		if (enable) {
>   			mutex_lock(&rdev->pm.mutex);
>   			rdev->pm.dpm.uvd_active = true;
> -			/* disable this for now */
> -#if 0
>   			if ((rdev->pm.dpm.sd == 1) && (rdev->pm.dpm.hd == 0))
>   				dpm_state = POWER_STATE_TYPE_INTERNAL_UVD_SD;
>   			else if ((rdev->pm.dpm.sd == 2) && (rdev->pm.dpm.hd == 0))
> @@ -967,7 +965,6 @@ void radeon_dpm_enable_uvd(struct radeon_device *rdev, bool enable)
>   			else if ((rdev->pm.dpm.sd == 0) && (rdev->pm.dpm.hd == 2))
>   				dpm_state = POWER_STATE_TYPE_INTERNAL_UVD_HD2;
>   			else
> -#endif
>   				dpm_state = POWER_STATE_TYPE_INTERNAL_UVD;
>   			rdev->pm.dpm.state = dpm_state;
>   			mutex_unlock(&rdev->pm.mutex);
> diff --git a/drivers/gpu/drm/radeon/radeon_uvd.c b/drivers/gpu/drm/radeon/radeon_uvd.c
> index 6781fee..ceb7b28 100644
> --- a/drivers/gpu/drm/radeon/radeon_uvd.c
> +++ b/drivers/gpu/drm/radeon/radeon_uvd.c
> @@ -805,8 +805,7 @@ void radeon_uvd_note_usage(struct radeon_device *rdev)
>   		    (rdev->pm.dpm.hd != hd)) {
>   			rdev->pm.dpm.sd = sd;
>   			rdev->pm.dpm.hd = hd;
> -			/* disable this for now */
> -			/*streams_changed = true;*/
> +			streams_changed = true;
>   		}
>   	}
>   



More information about the dri-devel mailing list