[Intel-gfx] [PATCH v3 3/6] drm/i915: Use drm_rect to store the pfit window pos/size

Manasi Navare manasi.d.navare at intel.com
Thu Apr 23 18:51:39 UTC 2020


On Thu, Apr 23, 2020 at 06:38:46PM +0300, Ville Syrjälä wrote:
> On Wed, Apr 22, 2020 at 12:20:06PM -0700, Manasi Navare wrote:
> > On Wed, Apr 22, 2020 at 07:19:14PM +0300, Ville Syrjala wrote:
> > > From: Ville Syrjälä <ville.syrjala at linux.intel.com>
> > > 
> > > Make things a bit more abstract by replacing the pch_pfit.pos/size
> > > raw register values with a drm_rect. Makes it slighly more convenient
> > > to eg. compute the scaling factors.
> > > 
> > > v2: Use drm_rect_init()
> > > 
> > > Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> > > ---
> > >  drivers/gpu/drm/i915/display/intel_display.c  | 101 +++++++++++-------
> > >  .../drm/i915/display/intel_display_types.h    |   3 +-
> > >  drivers/gpu/drm/i915/display/intel_panel.c    |  13 ++-
> > >  3 files changed, 67 insertions(+), 50 deletions(-)
> > > 
> > > diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> > > index 96d0768ecf5d..6bb87965801e 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_display.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_display.c
> > > @@ -6096,10 +6096,8 @@ static int skl_update_scaler_crtc(struct intel_crtc_state *crtc_state)
> > >  	int width, height;
> > >  
> > >  	if (crtc_state->pch_pfit.enabled) {
> > > -		u32 pfit_size = crtc_state->pch_pfit.size;
> > > -
> > > -		width = pfit_size >> 16;
> > > -		height = pfit_size & 0xffff;
> > > +		width = drm_rect_width(&crtc_state->pch_pfit.dst);
> > > +		height = drm_rect_height(&crtc_state->pch_pfit.dst);
> > >  	} else {
> > >  		width = adjusted_mode->crtc_hdisplay;
> > >  		height = adjusted_mode->crtc_vdisplay;
> > > @@ -6219,11 +6217,20 @@ static void skl_pfit_enable(const struct intel_crtc_state *crtc_state)
> > >  {
> > >  	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
> > >  	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
> > > -	enum pipe pipe = crtc->pipe;
> > >  	const struct intel_crtc_scaler_state *scaler_state =
> > >  		&crtc_state->scaler_state;
> > > +	struct drm_rect src = {
> > > +		.x2 = crtc_state->pipe_src_w << 16,
> > > +		.y2 = crtc_state->pipe_src_h << 16,
> > 
> > Its not clear to me why we left shift by 16 for both src_w and src_h? Where can I find the format of
> > how this is stored?
> > 
> > Other than that everything else looks good in terms of replacing with drm_rect()
> > 
> > Manasi
> > 
> <snip>
> > > -	hscale = (crtc_state->pipe_src_w << 16) / pfit_w;
> > > -	vscale = (crtc_state->pipe_src_h << 16) / pfit_h;
> 
> Same <<16 was here already. skl_scaler_calc_phase() wants
> the scaling factor in .16 binary fixed point. Also 
> drm_rect_calc_{h,v}scale() assumes the src coordinates
> to be .16 and returns the result in .16 as well.

Ah okay, thanks for the clarification, is it perhaps a good idea to add this
in the comment somewhere?

In either case though,

Reviewed-by: Manasi Navare <manasi.d.navare at intel.com>

Manasi

> 
> > > +	hscale = drm_rect_calc_hscale(&src, dst, 0, INT_MAX);
> > > +	vscale = drm_rect_calc_vscale(&src, dst, 0, INT_MAX);
> > >  
> > >  	uv_rgb_hphase = skl_scaler_calc_phase(1, hscale, false);
> > >  	uv_rgb_vphase = skl_scaler_calc_phase(1, vscale, false);
> -- 
> Ville Syrjälä
> Intel


More information about the Intel-gfx mailing list