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@xxxxxxxxxxxxxxxx> This looks good to me. Reviewed-by: Kieran Bingham <kieran.bingham+renesas@xxxxxxxxxxxxxxxx> > --- > 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, >