Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753560AbdLMQGV (ORCPT ); Wed, 13 Dec 2017 11:06:21 -0500 Received: from mail-wm0-f68.google.com ([74.125.82.68]:41334 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752860AbdLMQGR (ORCPT ); Wed, 13 Dec 2017 11:06:17 -0500 X-Google-Smtp-Source: ACJfBosTwydHJuCt+SRTy+6TirUuKEYftsXAYI2l90kQhvt4harIIujcwoEKWqD7XKZ/ueB6dccNRg== Subject: Re: [PATCH 4/8] drm/sun4i: crtc: Add a custom crtc atomic_check To: Maxime Ripard , Daniel Vetter , David Airlie , Chen-Yu Tsai Cc: linux-arm-kernel@lists.infradead.org, Thomas Petazzoni , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, thomas@vitsch.nl References: From: Neil Armstrong Organization: Baylibre Message-ID: <1907c50b-d8a9-47db-d5c6-129a430a105f@baylibre.com> Date: Wed, 13 Dec 2017 17:06:14 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2413 Lines: 64 On 13/12/2017 16:33, Maxime Ripard wrote: > We have some restrictions on what the planes and CRTC can provide that are > tied to only one generation of display engines. > > For example, on the first generation, we can only have one YUV plane or one > plane that uses the frontend output. > > Let's allow our engines to provide an atomic_check callback to validate the > current configuration. > > Signed-off-by: Maxime Ripard > --- > drivers/gpu/drm/sun4i/sun4i_crtc.c | 14 ++++++++++++++ > drivers/gpu/drm/sun4i/sunxi_engine.h | 2 ++ > 2 files changed, 16 insertions(+) > > diff --git a/drivers/gpu/drm/sun4i/sun4i_crtc.c b/drivers/gpu/drm/sun4i/sun4i_crtc.c > index 5decae0069d0..2a565325714f 100644 > --- a/drivers/gpu/drm/sun4i/sun4i_crtc.c > +++ b/drivers/gpu/drm/sun4i/sun4i_crtc.c > @@ -46,6 +46,19 @@ static struct drm_encoder *sun4i_crtc_get_encoder(struct drm_crtc *crtc) > return NULL; > } > > +static int sun4i_crtc_atomic_check(struct drm_crtc *crtc, > + struct drm_crtc_state *state) > +{ > + struct sun4i_crtc *scrtc = drm_crtc_to_sun4i_crtc(crtc); > + struct sunxi_engine *engine = scrtc->engine; > + int ret = 0; > + > + if (engine && engine->ops && engine->ops->atomic_check) > + ret = engine->ops->atomic_check(engine, state); > + > + return ret; > +} > + > static void sun4i_crtc_atomic_begin(struct drm_crtc *crtc, > struct drm_crtc_state *old_state) > { > @@ -125,6 +138,7 @@ static void sun4i_crtc_mode_set_nofb(struct drm_crtc *crtc) > } > > static const struct drm_crtc_helper_funcs sun4i_crtc_helper_funcs = { > + .atomic_check = sun4i_crtc_atomic_check, > .atomic_begin = sun4i_crtc_atomic_begin, > .atomic_flush = sun4i_crtc_atomic_flush, > .atomic_enable = sun4i_crtc_atomic_enable, > diff --git a/drivers/gpu/drm/sun4i/sunxi_engine.h b/drivers/gpu/drm/sun4i/sunxi_engine.h > index 4cb70ae65c79..42655230aeba 100644 > --- a/drivers/gpu/drm/sun4i/sunxi_engine.h > +++ b/drivers/gpu/drm/sun4i/sunxi_engine.h > @@ -16,6 +16,8 @@ struct drm_device; > struct sunxi_engine; > > struct sunxi_engine_ops { > + int (*atomic_check)(struct sunxi_engine *engine, > + struct drm_crtc_state *state); > void (*commit)(struct sunxi_engine *engine); > struct drm_plane **(*layers_init)(struct drm_device *drm, > struct sunxi_engine *engine); > Reviewed-by: Neil Armstrong