From: Liu Ying <victor.liu@nxp.com> To: Robert Foss <robert.foss@linaro.org> Cc: dri-devel <dri-devel@lists.freedesktop.org>, linux-kernel <linux-kernel@vger.kernel.org>, Andrzej Hajda <a.hajda@samsung.com>, Neil Armstrong <narmstrong@baylibre.com>, Laurent Pinchart <Laurent.pinchart@ideasonboard.com>, Jonas Karlman <jonas@kwiboo.se>, Jernej Skrabec <jernej.skrabec@siol.net>, David Airlie <airlied@linux.ie>, Daniel Vetter <daniel@ffwll.ch>, agx@sigxcpu.org, robert.chiras@nxp.com, linux-imx@nxp.com Subject: Re: [PATCH v3 1/3] drm/bridge: nwl-dsi: Force a full modeset when crtc_state->active is changed to be true Date: Fri, 30 Apr 2021 19:45:53 +0800 [thread overview] Message-ID: <95db401a341b857289f2bec7c03b694eb7df8ce3.camel@nxp.com> (raw) In-Reply-To: <CAG3jFytcPzo81t8hubAf4Gb1zrVzZVB5D6qP-Dnchef6Zus25Q@mail.gmail.com> Hi Robert, On Fri, 2021-04-30 at 11:56 +0200, Robert Foss wrote: > Hey Liu, > > This patch does not apply on upstream-drm-misc/drm-misc-next. When it > passes local testing & building, I'm ready to merge it. I see Neil has already pushed this entire patch series to drm-misc-next. https://cgit.freedesktop.org/drm/drm-misc/commit/?id=885811372fe101c4299c53eecc9fee72cf927a0c I also see Guido's R-b and T-b tags on this series, though they comes after Neil's push perhaps. Thanks, Liu Ying > > On Fri, 23 Apr 2021 at 11:42, Liu Ying <victor.liu@nxp.com> wrote: > > This patch replaces ->mode_fixup() with ->atomic_check() so that > > a full modeset can be requested from there when crtc_state->active > > is changed to be true(which implies only connector's DPMS is > > brought > > out of "Off" status, though not necessarily). Bridge functions are > > added or changed to accommodate the ->atomic_check() callback. > > That > > full modeset is needed by the up-coming patch which gets MIPI DSI > > controller and PHY ready in ->mode_set(), because it makes sure > > ->mode_set() and ->atomic_disable() are called in pairs. > > > > Cc: Andrzej Hajda <a.hajda@samsung.com> > > Cc: Neil Armstrong <narmstrong@baylibre.com> > > Cc: Robert Foss <robert.foss@linaro.org> > > Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com> > > Cc: Jonas Karlman <jonas@kwiboo.se> > > Cc: Jernej Skrabec <jernej.skrabec@siol.net> > > Cc: David Airlie <airlied@linux.ie> > > Cc: Daniel Vetter <daniel@ffwll.ch> > > Cc: Guido Günther <agx@sigxcpu.org> > > Cc: Robert Chiras <robert.chiras@nxp.com> > > Cc: NXP Linux Team <linux-imx@nxp.com> > > Signed-off-by: Liu Ying <victor.liu@nxp.com> > > --- > > v2->v3: > > * Split from the single patch in v2 to clarify changes. (Neil) > > > > drivers/gpu/drm/bridge/nwl-dsi.c | 61 ++++++++++++++++++++------ > > ------ > > 1 file changed, 39 insertions(+), 22 deletions(-) > > > > diff --git a/drivers/gpu/drm/bridge/nwl-dsi.c > > b/drivers/gpu/drm/bridge/nwl-dsi.c > > index 66b67402f1acd..c65ca860712d2 100644 > > --- a/drivers/gpu/drm/bridge/nwl-dsi.c > > +++ b/drivers/gpu/drm/bridge/nwl-dsi.c > > @@ -21,6 +21,7 @@ > > #include <linux/sys_soc.h> > > #include <linux/time64.h> > > > > +#include <drm/drm_atomic_state_helper.h> > > #include <drm/drm_bridge.h> > > #include <drm/drm_mipi_dsi.h> > > #include <drm/drm_of.h> > > @@ -742,7 +743,9 @@ static int nwl_dsi_disable(struct nwl_dsi *dsi) > > return 0; > > } > > > > -static void nwl_dsi_bridge_disable(struct drm_bridge *bridge) > > +static void > > +nwl_dsi_bridge_atomic_disable(struct drm_bridge *bridge, > > + struct drm_bridge_state > > *old_bridge_state) > > { > > struct nwl_dsi *dsi = bridge_to_dsi(bridge); > > int ret; > > @@ -803,17 +806,6 @@ static int nwl_dsi_get_dphy_params(struct > > nwl_dsi *dsi, > > return 0; > > } > > > > -static bool nwl_dsi_bridge_mode_fixup(struct drm_bridge *bridge, > > - const struct drm_display_mode > > *mode, > > - struct drm_display_mode > > *adjusted_mode) > > -{ > > - /* At least LCDIF + NWL needs active high sync */ > > - adjusted_mode->flags |= (DRM_MODE_FLAG_PHSYNC | > > DRM_MODE_FLAG_PVSYNC); > > - adjusted_mode->flags &= ~(DRM_MODE_FLAG_NHSYNC | > > DRM_MODE_FLAG_NVSYNC); > > - > > - return true; > > -} > > - > > static enum drm_mode_status > > nwl_dsi_bridge_mode_valid(struct drm_bridge *bridge, > > const struct drm_display_info *info, > > @@ -831,6 +823,24 @@ nwl_dsi_bridge_mode_valid(struct drm_bridge > > *bridge, > > return MODE_OK; > > } > > > > +static int nwl_dsi_bridge_atomic_check(struct drm_bridge *bridge, > > + struct drm_bridge_state > > *bridge_state, > > + struct drm_crtc_state > > *crtc_state, > > + struct drm_connector_state > > *conn_state) > > +{ > > + struct drm_display_mode *adjusted_mode = &crtc_state- > > >adjusted_mode; > > + > > + /* At least LCDIF + NWL needs active high sync */ > > + adjusted_mode->flags |= (DRM_MODE_FLAG_PHSYNC | > > DRM_MODE_FLAG_PVSYNC); > > + adjusted_mode->flags &= ~(DRM_MODE_FLAG_NHSYNC | > > DRM_MODE_FLAG_NVSYNC); > > + > > + /* Do a full modeset if crtc_state->active is changed to be > > true. */ > > + if (crtc_state->active_changed && crtc_state->active) > > + crtc_state->mode_changed = true; > > + > > + return 0; > > +} > > + > > static void > > nwl_dsi_bridge_mode_set(struct drm_bridge *bridge, > > const struct drm_display_mode *mode, > > @@ -862,7 +872,9 @@ nwl_dsi_bridge_mode_set(struct drm_bridge > > *bridge, > > drm_mode_debug_printmodeline(adjusted_mode); > > } > > > > -static void nwl_dsi_bridge_pre_enable(struct drm_bridge *bridge) > > +static void > > +nwl_dsi_bridge_atomic_pre_enable(struct drm_bridge *bridge, > > + struct drm_bridge_state > > *old_bridge_state) > > { > > struct nwl_dsi *dsi = bridge_to_dsi(bridge); > > int ret; > > @@ -897,7 +909,9 @@ static void nwl_dsi_bridge_pre_enable(struct > > drm_bridge *bridge) > > } > > } > > > > -static void nwl_dsi_bridge_enable(struct drm_bridge *bridge) > > +static void > > +nwl_dsi_bridge_atomic_enable(struct drm_bridge *bridge, > > + struct drm_bridge_state > > *old_bridge_state) > > { > > struct nwl_dsi *dsi = bridge_to_dsi(bridge); > > int ret; > > @@ -942,14 +956,17 @@ static void nwl_dsi_bridge_detach(struct > > drm_bridge *bridge) > > } > > > > static const struct drm_bridge_funcs nwl_dsi_bridge_funcs = { > > - .pre_enable = nwl_dsi_bridge_pre_enable, > > - .enable = nwl_dsi_bridge_enable, > > - .disable = nwl_dsi_bridge_disable, > > - .mode_fixup = nwl_dsi_bridge_mode_fixup, > > - .mode_set = nwl_dsi_bridge_mode_set, > > - .mode_valid = nwl_dsi_bridge_mode_valid, > > - .attach = nwl_dsi_bridge_attach, > > - .detach = nwl_dsi_bridge_detach, > > + .atomic_duplicate_state = > > drm_atomic_helper_bridge_duplicate_state, > > + .atomic_destroy_state = > > drm_atomic_helper_bridge_destroy_state, > > + .atomic_reset = drm_atomic_helper_bridge_reset, > > + .atomic_check = nwl_dsi_bridge_atomic_check, > > + .atomic_pre_enable = nwl_dsi_bridge_atomic_pre_enable, > > + .atomic_enable = nwl_dsi_bridge_atomic_enable, > > + .atomic_disable = nwl_dsi_bridge_atomic_disable, > > + .mode_set = nwl_dsi_bridge_mode_set, > > + .mode_valid = nwl_dsi_bridge_mode_valid, > > + .attach = nwl_dsi_bridge_attach, > > + .detach = nwl_dsi_bridge_detach, > > }; > > > > static int nwl_dsi_parse_dt(struct nwl_dsi *dsi)
WARNING: multiple messages have this Message-ID (diff)
From: Liu Ying <victor.liu@nxp.com> To: Robert Foss <robert.foss@linaro.org> Cc: Jernej Skrabec <jernej.skrabec@siol.net>, Jonas Karlman <jonas@kwiboo.se>, David Airlie <airlied@linux.ie>, agx@sigxcpu.org, Neil Armstrong <narmstrong@baylibre.com>, linux-kernel <linux-kernel@vger.kernel.org>, dri-devel <dri-devel@lists.freedesktop.org>, Andrzej Hajda <a.hajda@samsung.com>, Laurent Pinchart <Laurent.pinchart@ideasonboard.com>, robert.chiras@nxp.com, linux-imx@nxp.com Subject: Re: [PATCH v3 1/3] drm/bridge: nwl-dsi: Force a full modeset when crtc_state->active is changed to be true Date: Fri, 30 Apr 2021 19:45:53 +0800 [thread overview] Message-ID: <95db401a341b857289f2bec7c03b694eb7df8ce3.camel@nxp.com> (raw) In-Reply-To: <CAG3jFytcPzo81t8hubAf4Gb1zrVzZVB5D6qP-Dnchef6Zus25Q@mail.gmail.com> Hi Robert, On Fri, 2021-04-30 at 11:56 +0200, Robert Foss wrote: > Hey Liu, > > This patch does not apply on upstream-drm-misc/drm-misc-next. When it > passes local testing & building, I'm ready to merge it. I see Neil has already pushed this entire patch series to drm-misc-next. https://cgit.freedesktop.org/drm/drm-misc/commit/?id=885811372fe101c4299c53eecc9fee72cf927a0c I also see Guido's R-b and T-b tags on this series, though they comes after Neil's push perhaps. Thanks, Liu Ying > > On Fri, 23 Apr 2021 at 11:42, Liu Ying <victor.liu@nxp.com> wrote: > > This patch replaces ->mode_fixup() with ->atomic_check() so that > > a full modeset can be requested from there when crtc_state->active > > is changed to be true(which implies only connector's DPMS is > > brought > > out of "Off" status, though not necessarily). Bridge functions are > > added or changed to accommodate the ->atomic_check() callback. > > That > > full modeset is needed by the up-coming patch which gets MIPI DSI > > controller and PHY ready in ->mode_set(), because it makes sure > > ->mode_set() and ->atomic_disable() are called in pairs. > > > > Cc: Andrzej Hajda <a.hajda@samsung.com> > > Cc: Neil Armstrong <narmstrong@baylibre.com> > > Cc: Robert Foss <robert.foss@linaro.org> > > Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com> > > Cc: Jonas Karlman <jonas@kwiboo.se> > > Cc: Jernej Skrabec <jernej.skrabec@siol.net> > > Cc: David Airlie <airlied@linux.ie> > > Cc: Daniel Vetter <daniel@ffwll.ch> > > Cc: Guido Günther <agx@sigxcpu.org> > > Cc: Robert Chiras <robert.chiras@nxp.com> > > Cc: NXP Linux Team <linux-imx@nxp.com> > > Signed-off-by: Liu Ying <victor.liu@nxp.com> > > --- > > v2->v3: > > * Split from the single patch in v2 to clarify changes. (Neil) > > > > drivers/gpu/drm/bridge/nwl-dsi.c | 61 ++++++++++++++++++++------ > > ------ > > 1 file changed, 39 insertions(+), 22 deletions(-) > > > > diff --git a/drivers/gpu/drm/bridge/nwl-dsi.c > > b/drivers/gpu/drm/bridge/nwl-dsi.c > > index 66b67402f1acd..c65ca860712d2 100644 > > --- a/drivers/gpu/drm/bridge/nwl-dsi.c > > +++ b/drivers/gpu/drm/bridge/nwl-dsi.c > > @@ -21,6 +21,7 @@ > > #include <linux/sys_soc.h> > > #include <linux/time64.h> > > > > +#include <drm/drm_atomic_state_helper.h> > > #include <drm/drm_bridge.h> > > #include <drm/drm_mipi_dsi.h> > > #include <drm/drm_of.h> > > @@ -742,7 +743,9 @@ static int nwl_dsi_disable(struct nwl_dsi *dsi) > > return 0; > > } > > > > -static void nwl_dsi_bridge_disable(struct drm_bridge *bridge) > > +static void > > +nwl_dsi_bridge_atomic_disable(struct drm_bridge *bridge, > > + struct drm_bridge_state > > *old_bridge_state) > > { > > struct nwl_dsi *dsi = bridge_to_dsi(bridge); > > int ret; > > @@ -803,17 +806,6 @@ static int nwl_dsi_get_dphy_params(struct > > nwl_dsi *dsi, > > return 0; > > } > > > > -static bool nwl_dsi_bridge_mode_fixup(struct drm_bridge *bridge, > > - const struct drm_display_mode > > *mode, > > - struct drm_display_mode > > *adjusted_mode) > > -{ > > - /* At least LCDIF + NWL needs active high sync */ > > - adjusted_mode->flags |= (DRM_MODE_FLAG_PHSYNC | > > DRM_MODE_FLAG_PVSYNC); > > - adjusted_mode->flags &= ~(DRM_MODE_FLAG_NHSYNC | > > DRM_MODE_FLAG_NVSYNC); > > - > > - return true; > > -} > > - > > static enum drm_mode_status > > nwl_dsi_bridge_mode_valid(struct drm_bridge *bridge, > > const struct drm_display_info *info, > > @@ -831,6 +823,24 @@ nwl_dsi_bridge_mode_valid(struct drm_bridge > > *bridge, > > return MODE_OK; > > } > > > > +static int nwl_dsi_bridge_atomic_check(struct drm_bridge *bridge, > > + struct drm_bridge_state > > *bridge_state, > > + struct drm_crtc_state > > *crtc_state, > > + struct drm_connector_state > > *conn_state) > > +{ > > + struct drm_display_mode *adjusted_mode = &crtc_state- > > >adjusted_mode; > > + > > + /* At least LCDIF + NWL needs active high sync */ > > + adjusted_mode->flags |= (DRM_MODE_FLAG_PHSYNC | > > DRM_MODE_FLAG_PVSYNC); > > + adjusted_mode->flags &= ~(DRM_MODE_FLAG_NHSYNC | > > DRM_MODE_FLAG_NVSYNC); > > + > > + /* Do a full modeset if crtc_state->active is changed to be > > true. */ > > + if (crtc_state->active_changed && crtc_state->active) > > + crtc_state->mode_changed = true; > > + > > + return 0; > > +} > > + > > static void > > nwl_dsi_bridge_mode_set(struct drm_bridge *bridge, > > const struct drm_display_mode *mode, > > @@ -862,7 +872,9 @@ nwl_dsi_bridge_mode_set(struct drm_bridge > > *bridge, > > drm_mode_debug_printmodeline(adjusted_mode); > > } > > > > -static void nwl_dsi_bridge_pre_enable(struct drm_bridge *bridge) > > +static void > > +nwl_dsi_bridge_atomic_pre_enable(struct drm_bridge *bridge, > > + struct drm_bridge_state > > *old_bridge_state) > > { > > struct nwl_dsi *dsi = bridge_to_dsi(bridge); > > int ret; > > @@ -897,7 +909,9 @@ static void nwl_dsi_bridge_pre_enable(struct > > drm_bridge *bridge) > > } > > } > > > > -static void nwl_dsi_bridge_enable(struct drm_bridge *bridge) > > +static void > > +nwl_dsi_bridge_atomic_enable(struct drm_bridge *bridge, > > + struct drm_bridge_state > > *old_bridge_state) > > { > > struct nwl_dsi *dsi = bridge_to_dsi(bridge); > > int ret; > > @@ -942,14 +956,17 @@ static void nwl_dsi_bridge_detach(struct > > drm_bridge *bridge) > > } > > > > static const struct drm_bridge_funcs nwl_dsi_bridge_funcs = { > > - .pre_enable = nwl_dsi_bridge_pre_enable, > > - .enable = nwl_dsi_bridge_enable, > > - .disable = nwl_dsi_bridge_disable, > > - .mode_fixup = nwl_dsi_bridge_mode_fixup, > > - .mode_set = nwl_dsi_bridge_mode_set, > > - .mode_valid = nwl_dsi_bridge_mode_valid, > > - .attach = nwl_dsi_bridge_attach, > > - .detach = nwl_dsi_bridge_detach, > > + .atomic_duplicate_state = > > drm_atomic_helper_bridge_duplicate_state, > > + .atomic_destroy_state = > > drm_atomic_helper_bridge_destroy_state, > > + .atomic_reset = drm_atomic_helper_bridge_reset, > > + .atomic_check = nwl_dsi_bridge_atomic_check, > > + .atomic_pre_enable = nwl_dsi_bridge_atomic_pre_enable, > > + .atomic_enable = nwl_dsi_bridge_atomic_enable, > > + .atomic_disable = nwl_dsi_bridge_atomic_disable, > > + .mode_set = nwl_dsi_bridge_mode_set, > > + .mode_valid = nwl_dsi_bridge_mode_valid, > > + .attach = nwl_dsi_bridge_attach, > > + .detach = nwl_dsi_bridge_detach, > > }; > > > > static int nwl_dsi_parse_dt(struct nwl_dsi *dsi) _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2021-04-30 11:46 UTC|newest] Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-04-23 9:26 [PATCH v3 0/3] drm/bridge: nwl-dsi: Get MIPI DSI controller and PHY ready in ->mode_set() Liu Ying 2021-04-23 9:26 ` Liu Ying 2021-04-23 9:26 ` [PATCH v3 1/3] drm/bridge: nwl-dsi: Force a full modeset when crtc_state->active is changed to be true Liu Ying 2021-04-23 9:26 ` Liu Ying 2021-04-30 8:35 ` Neil Armstrong 2021-04-30 8:35 ` Neil Armstrong 2021-04-30 9:56 ` Robert Foss 2021-04-30 11:45 ` Liu Ying [this message] 2021-04-30 11:45 ` Liu Ying 2021-04-30 11:49 ` Robert Foss 2021-04-23 9:26 ` [PATCH v3 2/3] drm/bridge: nwl-dsi: Remove a check on unchanged HS clock rate from ->mode_set() Liu Ying 2021-04-23 9:26 ` Liu Ying 2021-04-30 8:35 ` Neil Armstrong 2021-04-30 8:35 ` Neil Armstrong 2021-04-23 9:26 ` [PATCH v3 3/3] drm/bridge: nwl-dsi: Get MIPI DSI controller and PHY ready in ->mode_set() Liu Ying 2021-04-23 9:26 ` Liu Ying 2021-04-30 8:35 ` Neil Armstrong 2021-04-30 8:35 ` Neil Armstrong 2021-04-26 7:43 ` [PATCH v3 0/3] " Neil Armstrong 2021-04-30 8:35 ` Neil Armstrong 2021-04-30 8:35 ` Neil Armstrong 2021-04-30 9:17 ` Guido Günther 2021-04-30 9:17 ` Guido Günther
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=95db401a341b857289f2bec7c03b694eb7df8ce3.camel@nxp.com \ --to=victor.liu@nxp.com \ --cc=Laurent.pinchart@ideasonboard.com \ --cc=a.hajda@samsung.com \ --cc=agx@sigxcpu.org \ --cc=airlied@linux.ie \ --cc=daniel@ffwll.ch \ --cc=dri-devel@lists.freedesktop.org \ --cc=jernej.skrabec@siol.net \ --cc=jonas@kwiboo.se \ --cc=linux-imx@nxp.com \ --cc=linux-kernel@vger.kernel.org \ --cc=narmstrong@baylibre.com \ --cc=robert.chiras@nxp.com \ --cc=robert.foss@linaro.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.