[PATCH 03/14] drm: imx: ipuv3 plane: Check different types of plane separately

Philipp Zabel p.zabel at pengutronix.de
Tue May 24 14:20:25 UTC 2016


Am Dienstag, den 24.05.2016, 18:10 +0800 schrieb Liu Ying:
> The IPUv3 primary plane doesn't support partial off screen.
> So, this patch separates plane check logics for primary plane and overlay
> plane and adds more limitations on the primary plane.
> 
> Signed-off-by: Liu Ying <gnuiyl at gmail.com>
> ---
>  drivers/gpu/drm/imx/ipuv3-plane.c | 72 ++++++++++++++++++++++-----------------
>  1 file changed, 41 insertions(+), 31 deletions(-)
> 
> diff --git a/drivers/gpu/drm/imx/ipuv3-plane.c b/drivers/gpu/drm/imx/ipuv3-plane.c
> index e6ec8eb..8f91b2e 100644
> --- a/drivers/gpu/drm/imx/ipuv3-plane.c
> +++ b/drivers/gpu/drm/imx/ipuv3-plane.c
> @@ -190,44 +190,54 @@ int ipu_plane_mode_set(struct ipu_plane *ipu_plane, struct drm_crtc *crtc,
>  		       uint32_t src_x, uint32_t src_y,
>  		       uint32_t src_w, uint32_t src_h, bool interlaced)
>  {
> -	struct device *dev = ipu_plane->base.dev->dev;
> +	struct drm_plane plane = ipu_plane->base;

Why make a copy of the drm_plane here?

> +	struct device *dev = plane.dev->dev;
>  	int ret;
>  
>  	/* no scaling */
>  	if (src_w != crtc_w || src_h != crtc_h)
>  		return -EINVAL;
>  
> -	/* clip to crtc bounds */
> -	if (crtc_x < 0) {
> -		if (-crtc_x > crtc_w)
> +	if (plane.type == DRM_PLANE_TYPE_PRIMARY) {
> +		/* full plane doesn't support partial off screen */
> +		if (crtc_x || crtc_y || crtc_w != mode->hdisplay ||
> +			crtc_h != mode->vdisplay)

As long as the requested plane is large enough to cover the whole base
plane, we can fix the crtc_x/y/w/h up by clipping to the base plane
boundaries. There is no need to return -EINVAL here as long as the IDMAC
is capable to start reading at src_x/y = -crtc_x/y.

regards
Philipp



More information about the dri-devel mailing list