[Intel-gfx] [PATCH] drm/i915/tgl: Lower cdclk for sub 4k resolutions

Ville Syrjälä ville.syrjala at linux.intel.com
Tue Aug 20 13:44:16 UTC 2019


On Tue, Aug 20, 2019 at 01:22:00PM +0000, Kahola, Mika wrote:
> On Tue, 2019-08-20 at 16:03 +0300, Ville Syrjälä wrote:
> > On Tue, Aug 20, 2019 at 02:06:31PM +0300, Mika Kahola wrote:
> > > In order to achieve improved power savings we can tune down CD
> > > clock frequency
> > > for sub 4k resolutions. The maximum CD clock frequency for sub 4k
> > > resolutions is set to 172.8 MHz.
> > > 
> > > Signed-off-by: Mika Kahola <mika.kahola at intel.com>
> > > ---
> > >  drivers/gpu/drm/i915/display/intel_cdclk.c | 26
> > > +++++++++++++++++++++-
> > >  drivers/gpu/drm/i915/display/intel_cdclk.h |  3 +++
> > >  2 files changed, 28 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/drivers/gpu/drm/i915/display/intel_cdclk.c
> > > b/drivers/gpu/drm/i915/display/intel_cdclk.c
> > > index d0bc42e5039c..1d6c7bc79470 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_cdclk.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_cdclk.c
> > > @@ -2610,6 +2610,24 @@ static int intel_compute_max_dotclk(struct
> > > drm_i915_private *dev_priv)
> > >  		return max_cdclk_freq*90/100;
> > >  }
> > >  
> > > +bool mode_is_4k(struct drm_i915_private *dev_priv)
> > > +{
> > > +	struct intel_crtc *crtc;
> > > +	struct intel_crtc_state *pipe_config;
> > > +
> > > +	for_each_intel_crtc(&dev_priv->drm, crtc) {
> > > +		pipe_config = to_intel_crtc_state(crtc->base.state);
> > > +
> > > +		if (pipe_config->base.active) {
> > > +			if (pipe_config->pipe_src_w >= WIDTH_4K &&
> > > +			    pipe_config->pipe_src_h >= HEIGHT_4K)
> > > +				return true;
> > > +		}
> > > +	}
> > > +
> > > +	return false;
> > > +}
> > > +
> > >  /**
> > >   * intel_update_max_cdclk - Determine the maximum support CDCLK
> > > frequency
> > >   * @dev_priv: i915 device
> > > @@ -2620,7 +2638,13 @@ static int intel_compute_max_dotclk(struct
> > > drm_i915_private *dev_priv)
> > >   */
> > >  void intel_update_max_cdclk(struct drm_i915_private *dev_priv)
> > >  {
> > > -	if (IS_ELKHARTLAKE(dev_priv)) {
> > > +	/*
> > > +	 * Use lower CDCLK frequency on Tigerlake when selected
> > > +	 * mode is less than 4k.
> > > +	 */
> > > +	if (INTEL_GEN(dev_priv) >= 12 && !mode_is_4k(dev_priv)) {
> > > +		dev_priv->max_cdclk_freq = 172800;
> > 
> > The maximum is just that, the maximum. It doesn't affect the actual
> > cdclk chosen (outside of rejecting everything exceeding the max).
> > And the maximum won't ever change, so trying to calculate it based
> > on some ephemeral crtc states doesn't make sense.
> > 
> > Given that our policy is to always go for the minimum acceptable
> > cdclk
> > frequency I don't think there is any work to be done to get proper
> > power savings for <4k. What is the actual problem you're seeing?
> The actual problem is that this is a requested feature for TGL. I
> admit, with these suggested optimizations the gains will be marginal.
> 
> My interpretation of this feature was that we should not exceed
> 172.8MHz with the sub 4k modes, hence I'm suggesting in this patch to limit the max cdclock to this number. 
> 
> So, how do we get forward? Should I propose that we drop this feature
> or should we implement this differently?

There is nothing to implement. The current policy already picks the
minimum cdclk that will work.

-- 
Ville Syrjälä
Intel


More information about the Intel-gfx mailing list