diff options
Diffstat (limited to 'drivers/gpu/drm/i915/display/skl_scaler.c')
| -rw-r--r-- | drivers/gpu/drm/i915/display/skl_scaler.c | 22 | 
1 files changed, 7 insertions, 15 deletions
diff --git a/drivers/gpu/drm/i915/display/skl_scaler.c b/drivers/gpu/drm/i915/display/skl_scaler.c index c2e94118566b..4092679be21e 100644 --- a/drivers/gpu/drm/i915/display/skl_scaler.c +++ b/drivers/gpu/drm/i915/display/skl_scaler.c @@ -197,7 +197,8 @@ int skl_update_scaler_crtc(struct intel_crtc_state *crtc_state)  	return skl_update_scaler(crtc_state, !crtc_state->hw.active,  				 SKL_CRTC_INDEX,  				 &crtc_state->scaler_state.scaler_id, -				 crtc_state->pipe_src_w, crtc_state->pipe_src_h, +				 drm_rect_width(&crtc_state->pipe_src), +				 drm_rect_height(&crtc_state->pipe_src),  				 width, height, NULL, 0,  				 crtc_state->pch_pfit.enabled);  } @@ -400,10 +401,6 @@ void skl_pfit_enable(const struct intel_crtc_state *crtc_state)  	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);  	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, -	};  	const struct drm_rect *dst = &crtc_state->pch_pfit.dst;  	u16 uv_rgb_hphase, uv_rgb_vphase;  	enum pipe pipe = crtc->pipe; @@ -412,7 +409,7 @@ void skl_pfit_enable(const struct intel_crtc_state *crtc_state)  	int x = dst->x1;  	int y = dst->y1;  	int hscale, vscale; -	unsigned long irqflags; +	struct drm_rect src;  	int id;  	u32 ps_ctrl; @@ -423,6 +420,10 @@ void skl_pfit_enable(const struct intel_crtc_state *crtc_state)  			crtc_state->scaler_state.scaler_id < 0))  		return; +	drm_rect_init(&src, 0, 0, +		      drm_rect_width(&crtc_state->pipe_src) << 16, +		      drm_rect_height(&crtc_state->pipe_src) << 16); +  	hscale = drm_rect_calc_hscale(&src, dst, 0, INT_MAX);  	vscale = drm_rect_calc_vscale(&src, dst, 0, INT_MAX); @@ -434,8 +435,6 @@ void skl_pfit_enable(const struct intel_crtc_state *crtc_state)  	ps_ctrl = skl_scaler_get_filter_select(crtc_state->hw.scaling_filter, 0);  	ps_ctrl |=  PS_SCALER_EN | scaler_state->scalers[id].mode; -	spin_lock_irqsave(&dev_priv->uncore.lock, irqflags); -  	skl_scaler_setup_filter(dev_priv, pipe, id, 0,  				crtc_state->hw.scaling_filter); @@ -449,8 +448,6 @@ void skl_pfit_enable(const struct intel_crtc_state *crtc_state)  			  x << 16 | y);  	intel_de_write_fw(dev_priv, SKL_PS_WIN_SZ(pipe, id),  			  width << 16 | height); - -	spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);  }  void @@ -519,15 +516,10 @@ static void skl_detach_scaler(struct intel_crtc *crtc, int id)  {  	struct drm_device *dev = crtc->base.dev;  	struct drm_i915_private *dev_priv = to_i915(dev); -	unsigned long irqflags; - -	spin_lock_irqsave(&dev_priv->uncore.lock, irqflags);  	intel_de_write_fw(dev_priv, SKL_PS_CTRL(crtc->pipe, id), 0);  	intel_de_write_fw(dev_priv, SKL_PS_WIN_POS(crtc->pipe, id), 0);  	intel_de_write_fw(dev_priv, SKL_PS_WIN_SZ(crtc->pipe, id), 0); - -	spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags);  }  /*  |