[PATCH 1/3] drm: rcar-du: Share plane atomic check code between Gen2 and Gen3

Kieran Bingham kieranbingham at gmail.com
Mon Sep 25 17:39:55 UTC 2017


Hi Laurent,

On 16/08/17 00:03, Laurent Pinchart wrote:
> The plane atomic check implementation is identical on Gen2 (DU planes)
> and Gen3 (VSP planes), but two separate functions exist as they operate
> on different data structures. Refactor the code to share the
> implementation.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas at ideasonboard.com>

This looks good to me.

Reviewed-by: Kieran Bingham <kieran.bingham+renesas at ideasonboard.com>

> ---
>  drivers/gpu/drm/rcar-du/rcar_du_plane.c | 27 +++++++++++++++++----------
>  drivers/gpu/drm/rcar-du/rcar_du_plane.h |  4 ++++
>  drivers/gpu/drm/rcar-du/rcar_du_vsp.c   | 22 +---------------------
>  3 files changed, 22 insertions(+), 31 deletions(-)
> 
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_plane.c b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> index 61833cc1c699..4f076c364f25 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_plane.c
> @@ -565,27 +565,26 @@ void __rcar_du_plane_setup(struct rcar_du_group *rgrp,
>  	}
>  }
>  
> -static int rcar_du_plane_atomic_check(struct drm_plane *plane,
> -				      struct drm_plane_state *state)
> +int __rcar_du_plane_atomic_check(struct drm_plane *plane,
> +				 struct drm_plane_state *state,
> +				 const struct rcar_du_format_info **format)
>  {
> -	struct rcar_du_plane_state *rstate = to_rcar_plane_state(state);
> -	struct rcar_du_plane *rplane = to_rcar_plane(plane);
> -	struct rcar_du_device *rcdu = rplane->group->dev;
> +	struct drm_device *dev = plane->dev;
>  
>  	if (!state->fb || !state->crtc) {
> -		rstate->format = NULL;
> +		*format = NULL;
>  		return 0;
>  	}
>  
>  	if (state->src_w >> 16 != state->crtc_w ||
>  	    state->src_h >> 16 != state->crtc_h) {
> -		dev_dbg(rcdu->dev, "%s: scaling not supported\n", __func__);
> +		dev_dbg(dev->dev, "%s: scaling not supported\n", __func__);
>  		return -EINVAL;
>  	}
>  
> -	rstate->format = rcar_du_format_info(state->fb->format->format);
> -	if (rstate->format == NULL) {
> -		dev_dbg(rcdu->dev, "%s: unsupported format %08x\n", __func__,
> +	*format = rcar_du_format_info(state->fb->format->format);
> +	if (*format == NULL) {
> +		dev_dbg(dev->dev, "%s: unsupported format %08x\n", __func__,
>  			state->fb->format->format);
>  		return -EINVAL;
>  	}
> @@ -593,6 +592,14 @@ static int rcar_du_plane_atomic_check(struct drm_plane *plane,
>  	return 0;
>  }
>  
> +static int rcar_du_plane_atomic_check(struct drm_plane *plane,
> +				      struct drm_plane_state *state)
> +{
> +	struct rcar_du_plane_state *rstate = to_rcar_plane_state(state);
> +
> +	return __rcar_du_plane_atomic_check(plane, state, &rstate->format);
> +}
> +
>  static void rcar_du_plane_atomic_update(struct drm_plane *plane,
>  					struct drm_plane_state *old_state)
>  {
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_plane.h b/drivers/gpu/drm/rcar-du/rcar_du_plane.h
> index f62e09f195de..890321b4665d 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_plane.h
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_plane.h
> @@ -73,6 +73,10 @@ to_rcar_plane_state(struct drm_plane_state *state)
>  int rcar_du_atomic_check_planes(struct drm_device *dev,
>  				struct drm_atomic_state *state);
>  
> +int __rcar_du_plane_atomic_check(struct drm_plane *plane,
> +				 struct drm_plane_state *state,
> +				 const struct rcar_du_format_info **format);
> +
>  int rcar_du_planes_init(struct rcar_du_group *rgrp);
>  
>  void __rcar_du_plane_setup(struct rcar_du_group *rgrp,
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_vsp.c b/drivers/gpu/drm/rcar-du/rcar_du_vsp.c
> index 2c96147bc444..dd66dcb8da23 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_vsp.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_vsp.c
> @@ -268,28 +268,8 @@ static int rcar_du_vsp_plane_atomic_check(struct drm_plane *plane,
>  					  struct drm_plane_state *state)
>  {
>  	struct rcar_du_vsp_plane_state *rstate = to_rcar_vsp_plane_state(state);
> -	struct rcar_du_vsp_plane *rplane = to_rcar_vsp_plane(plane);
> -	struct rcar_du_device *rcdu = rplane->vsp->dev;
> -
> -	if (!state->fb || !state->crtc) {
> -		rstate->format = NULL;
> -		return 0;
> -	}
>  
> -	if (state->src_w >> 16 != state->crtc_w ||
> -	    state->src_h >> 16 != state->crtc_h) {
> -		dev_dbg(rcdu->dev, "%s: scaling not supported\n", __func__);
> -		return -EINVAL;
> -	}
> -
> -	rstate->format = rcar_du_format_info(state->fb->format->format);
> -	if (rstate->format == NULL) {
> -		dev_dbg(rcdu->dev, "%s: unsupported format %08x\n", __func__,
> -			state->fb->format->format);
> -		return -EINVAL;
> -	}
> -
> -	return 0;
> +	return __rcar_du_plane_atomic_check(plane, state, &rstate->format);
>  }
>  
>  static void rcar_du_vsp_plane_atomic_update(struct drm_plane *plane,
> 


More information about the dri-devel mailing list