All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sam Ravnborg <sam@ravnborg.org>
To: Doug Anderson <dianders@chromium.org>
Cc: Andrzej Hajda <andrzej.hajda@intel.com>,
	dri-devel <dri-devel@lists.freedesktop.org>,
	Philip Chen <philipchen@chromium.org>,
	Boris Brezillon <boris.brezillon@collabora.com>,
	Daniel Vetter <daniel@ffwll.ch>, David Airlie <airlied@linux.ie>,
	Jagan Teki <jagan@amarulasolutions.com>,
	Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>,
	Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
	Maxime Ripard <mripard@kernel.org>,
	Neil Armstrong <narmstrong@baylibre.com>,
	Robert Foss <robert.foss@linaro.org>,
	Thomas Zimmermann <tzimmermann@suse.de>,
	LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] drm/bridge: Fix the bridge chain order for pre_enable / post_disable
Date: Thu, 21 Oct 2021 22:41:40 +0200	[thread overview]
Message-ID: <YXHQhMe84ZZKkJik@ravnborg.org> (raw)
In-Reply-To: <CAD=FV=U3_q-Y7QArYkGabrNEYMT0D3uuh-_O+D4DjF_bYmpPiA@mail.gmail.com>

Hi Douglas,

> > >  void drm_bridge_chain_pre_enable(struct drm_bridge *bridge)
> >
> > If you, or someone else, could r-b or ack the pending patches to remove
> > this function, this part of the patch would no longer be needed.
> 
> OK. I will likely be able to take a look next week. Given that I'm
> helping Philip bringup a board with ps8640 it looks like your patch
> series will be quite relevant! I guess it would be good to figure out
> what would be the best order to land them. In my case we need this fix
> to be easy to pick back to fix the behavior on the Chrome OS 5.4 tree.
> My fix is easy to pick back, but perhaps yours is as well. Of course
> we could also just make a local divergent change in our tree if need
> be, too.
I do not mind the order - so whatever works for you guys.
The only concern here is that we should not gain new users.

> 
> > >  {
> > >       struct drm_encoder *encoder;
> > > -     struct drm_bridge *iter;
> > >
> > >       if (!bridge)
> > >               return;
> > >
> > >       encoder = bridge->encoder;
> > > -     list_for_each_entry_reverse(iter, &encoder->bridge_chain, chain_node) {
> > > -             if (iter->funcs->pre_enable)
> > > -                     iter->funcs->pre_enable(iter);
> > > -
> > > -             if (iter == bridge)
> > > -                     break;
> > > +     list_for_each_entry_from(bridge, &encoder->bridge_chain, chain_node) {
> > > +             if (bridge->funcs->pre_enable)
> > > +                     bridge->funcs->pre_enable(bridge);
> > >       }
> > >  }
> > >  EXPORT_SYMBOL(drm_bridge_chain_pre_enable);
> > > @@ -684,26 +680,30 @@ void drm_atomic_bridge_chain_post_disable(struct drm_bridge *bridge,
> > >                                         struct drm_atomic_state *old_state)
> > >  {
> > >       struct drm_encoder *encoder;
> > > +     struct drm_bridge *iter;
> > s/iter/bridge/ would make the patch simpler
> > And then the bridge argument could be last_bridge or something.
> > This would IMO increase readability of the code and make the patch smaller.
> 
> Yeah, I debated this too. I was trying to match
> drm_bridge_chain_disable() and in my mind keeping the two functions
> matching is more important than keeping this patch small.
Well, drm_bridge_chain_disable() is about to be deleted. So that the
wrong one to look at.

> Certainly I
> could add another patch in the series to rename "bridge" to
> "last_bridge" and "iter" to "bridge" in that function, but that
> defeats the goal of reducing churn... ...and clearly whoever wrote
> drm_bridge_chain_disable() liked "iter" better. :-P
> 
> In any case, I'll change it as you say if everyone likes it better,
> but otherwise I'll leave it as I have it.

> 
> 
> > >       if (!bridge)
> > >               return;
> > >
> > >       encoder = bridge->encoder;
> > > -     list_for_each_entry_from(bridge, &encoder->bridge_chain, chain_node) {
> > > -             if (bridge->funcs->atomic_post_disable) {
> > > +     list_for_each_entry_reverse(iter, &encoder->bridge_chain, chain_node) {
> > > +             if (iter->funcs->atomic_post_disable) {
> > >                       struct drm_bridge_state *old_bridge_state;
> > >
> > >                       old_bridge_state =
> > >                               drm_atomic_get_old_bridge_state(old_state,
> > > -                                                             bridge);
> > > +                                                             iter);
> > >                       if (WARN_ON(!old_bridge_state))
> > >                               return;
> > >
> > > -                     bridge->funcs->atomic_post_disable(bridge,
> > > -                                                        old_bridge_state);
> > > -             } else if (bridge->funcs->post_disable) {
> > > -                     bridge->funcs->post_disable(bridge);
> > > +                     iter->funcs->atomic_post_disable(iter,
> > > +                                                      old_bridge_state);
> > > +             } else if (iter->funcs->post_disable) {
> > > +                     iter->funcs->post_disable(iter);
> > >               }
> > > +
> > > +             if (iter == bridge)
> > > +                     break;
> > I cannot see why this is needed, we are at the end of the list here
> > anyway.
I see, please include this change in your changelog and add it to the
documentation in drm_bridge_h.

	Sam

  reply	other threads:[~2021-10-21 20:41 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-21 19:29 [PATCH] drm/bridge: Fix the bridge chain order for pre_enable / post_disable Douglas Anderson
2021-10-21 20:21 ` Sam Ravnborg
2021-10-21 20:33   ` Doug Anderson
2021-10-21 20:41     ` Sam Ravnborg [this message]
2021-10-21 22:13       ` Philip Chen
2021-10-25 11:00   ` Andrzej Hajda
2021-10-25 11:21     ` Laurent Pinchart
2021-10-25 20:11       ` Andrzej Hajda
2021-10-26  0:37         ` Doug Anderson
2021-10-26 23:25         ` Laurent Pinchart
2021-10-29 15:57           ` Andrzej Hajda
2021-10-22  4:43 ` Laurent Pinchart

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=YXHQhMe84ZZKkJik@ravnborg.org \
    --to=sam@ravnborg.org \
    --cc=airlied@linux.ie \
    --cc=andrzej.hajda@intel.com \
    --cc=boris.brezillon@collabora.com \
    --cc=daniel@ffwll.ch \
    --cc=dianders@chromium.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=jagan@amarulasolutions.com \
    --cc=laurent.pinchart+renesas@ideasonboard.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=mripard@kernel.org \
    --cc=narmstrong@baylibre.com \
    --cc=philipchen@chromium.org \
    --cc=robert.foss@linaro.org \
    --cc=tzimmermann@suse.de \
    /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: link
Be 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.