From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Jagan Teki <jagan@amarulasolutions.com>
Cc: David Airlie <airlied@linux.ie>,
Robert Foss <robert.foss@linaro.org>,
linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
Bjorn Andersson <bjorn.andersson@linaro.org>,
Paul Kocialkowski <paul.kocialkowski@bootlin.com>,
Thierry Reding <thierry.reding@gmail.com>,
Maxime Ripard <maxime@cerno.tech>,
Thomas Zimmermann <tzimmermann@suse.de>,
Michael Nazzareno Trimarchi <michael@amarulasolutions.com>,
Marek Szyprowski <m.szyprowski@samsung.com>
Subject: Re: [PATCH 2/2] Revert "drm: of: Lookup if child node has panel or bridge"
Date: Wed, 27 Apr 2022 16:10:13 +0300 [thread overview]
Message-ID: <YmlAtUTJiBrsFBN3@pendragon.ideasonboard.com> (raw)
In-Reply-To: <CAMty3ZAkw0rssCzR_ka7U9JeoGxJr5JPM7GWDfd1dob9goL-BQ@mail.gmail.com>
On Wed, Apr 27, 2022 at 05:22:32PM +0530, Jagan Teki wrote:
> On Wed, Apr 27, 2022 at 12:29 PM Jagan Teki wrote:
> > On Thu, Apr 21, 2022 at 1:54 PM Maxime Ripard wrote:
> > > On Thu, Apr 21, 2022 at 01:15:54PM +0530, Jagan Teki wrote:
> > > > + Linus
> > > > + Marek
> > > > + Laurent
> > > > + Robert
> > > >
> > > > On Thu, Apr 21, 2022 at 4:40 AM Bjorn Andersson
> > > > <bjorn.andersson@linaro.org> wrote:
> > > > >
> > > > > Commit '80253168dbfd ("drm: of: Lookup if child node has panel or
> > > > > bridge")' attempted to simplify the case of expressing a simple panel
> > > > > under a DSI controller, by assuming that the first non-graph child node
> > > > > was a panel or bridge.
> > > > >
> > > > > Unfortunately for non-trivial cases the first child node might not be a
> > > > > panel or bridge. Examples of this can be a aux-bus in the case of
> > > > > DisplayPort, or an opp-table represented before the panel node.
> > > > >
> > > > > In these cases the reverted commit prevents the caller from ever finding
> > > > > a reference to the panel.
> > > > >
> > > > > This reverts commit '80253168dbfd ("drm: of: Lookup if child node has
> > > > > panel or bridge")', in favor of using an explicit graph reference to the
> > > > > panel in the trivial case as well.
> > > >
> > > > This eventually breaks many child-based devm_drm_of_get_bridge
> > > > switched drivers. Do you have any suggestions on how to proceed to
> > > > succeed in those use cases as well?
> > >
> > > I guess we could create a new helper for those, like
> > > devm_drm_of_get_bridge_with_panel, or something.
> >
> > I think using the same existing helper and updating child support is
> > make sense, as there is a possibility to use the same host for child
> > and OF-graph bindings.
> >
> > I can see two possible solutions (as of now)
> >
> > 1. adding "dcs-child-type" bindings for child-based panel or bridge
> > 2. iterate child and skip those nodes other than panel or bridge. or
> > iterate sub-child to find it has a panel or bridge-like aux-bus (which
> > is indeed hard as this configuration seems not 'standard' i think )
> >
> > Any inputs?
>
> Checking aux-bus with the sub-node panel can be a possible check to
> look at it, any comments?
Can we stop piling hacks and move towards OF graph everywhere, please ?
> --- a/drivers/gpu/drm/drm_of.c
> +++ b/drivers/gpu/drm/drm_of.c
> @@ -244,6 +244,25 @@ int drm_of_find_panel_or_bridge(const struct
> device_node *np,
> if (panel)
> *panel = NULL;
>
> + /**
> + * Devices can also be child nodes when we also control that device
> + * through the upstream device (ie, MIPI-DCS for a MIPI-DSI device).
> + *
> + * Lookup for a child node of the given parent that isn't either port
> + * or ports.
> + */
> + for_each_available_child_of_node(np, remote) {
> + if (of_node_name_eq(remote, "port") ||
> + of_node_name_eq(remote, "ports"))
> + continue;
> +
> + if (!(of_node_name_eq(remote, "aux-bus") &&
> + of_get_child_by_name(remote, "panel")))
> + continue;
> +
> + goto of_find_panel_or_bridge;
> + }
> +
> /*
> * of_graph_get_remote_node() produces a noisy error message if port
> * node isn't found and the absence of the port is a legit case here,
> @@ -254,6 +273,8 @@ int drm_of_find_panel_or_bridge(const struct
> device_node *np,
> return -ENODEV;
>
> remote = of_graph_get_remote_node(np, port, endpoint);
> +
> +of_find_panel_or_bridge:
> if (!remote)
> return -ENODEV;
--
Regards,
Laurent Pinchart
WARNING: multiple messages have this Message-ID (diff)
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Jagan Teki <jagan@amarulasolutions.com>
Cc: Maxime Ripard <maxime@cerno.tech>,
Bjorn Andersson <bjorn.andersson@linaro.org>,
Paul Kocialkowski <paul.kocialkowski@bootlin.com>,
Michael Nazzareno Trimarchi <michael@amarulasolutions.com>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Thomas Zimmermann <tzimmermann@suse.de>,
David Airlie <airlied@linux.ie>, Daniel Vetter <daniel@ffwll.ch>,
Thierry Reding <thierry.reding@gmail.com>,
Rob Clark <robdclark@gmail.com>,
linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
Linus Walleij <linus.walleij@linaro.org>,
Marek Szyprowski <m.szyprowski@samsung.com>,
Robert Foss <robert.foss@linaro.org>
Subject: Re: [PATCH 2/2] Revert "drm: of: Lookup if child node has panel or bridge"
Date: Wed, 27 Apr 2022 16:10:13 +0300 [thread overview]
Message-ID: <YmlAtUTJiBrsFBN3@pendragon.ideasonboard.com> (raw)
In-Reply-To: <CAMty3ZAkw0rssCzR_ka7U9JeoGxJr5JPM7GWDfd1dob9goL-BQ@mail.gmail.com>
On Wed, Apr 27, 2022 at 05:22:32PM +0530, Jagan Teki wrote:
> On Wed, Apr 27, 2022 at 12:29 PM Jagan Teki wrote:
> > On Thu, Apr 21, 2022 at 1:54 PM Maxime Ripard wrote:
> > > On Thu, Apr 21, 2022 at 01:15:54PM +0530, Jagan Teki wrote:
> > > > + Linus
> > > > + Marek
> > > > + Laurent
> > > > + Robert
> > > >
> > > > On Thu, Apr 21, 2022 at 4:40 AM Bjorn Andersson
> > > > <bjorn.andersson@linaro.org> wrote:
> > > > >
> > > > > Commit '80253168dbfd ("drm: of: Lookup if child node has panel or
> > > > > bridge")' attempted to simplify the case of expressing a simple panel
> > > > > under a DSI controller, by assuming that the first non-graph child node
> > > > > was a panel or bridge.
> > > > >
> > > > > Unfortunately for non-trivial cases the first child node might not be a
> > > > > panel or bridge. Examples of this can be a aux-bus in the case of
> > > > > DisplayPort, or an opp-table represented before the panel node.
> > > > >
> > > > > In these cases the reverted commit prevents the caller from ever finding
> > > > > a reference to the panel.
> > > > >
> > > > > This reverts commit '80253168dbfd ("drm: of: Lookup if child node has
> > > > > panel or bridge")', in favor of using an explicit graph reference to the
> > > > > panel in the trivial case as well.
> > > >
> > > > This eventually breaks many child-based devm_drm_of_get_bridge
> > > > switched drivers. Do you have any suggestions on how to proceed to
> > > > succeed in those use cases as well?
> > >
> > > I guess we could create a new helper for those, like
> > > devm_drm_of_get_bridge_with_panel, or something.
> >
> > I think using the same existing helper and updating child support is
> > make sense, as there is a possibility to use the same host for child
> > and OF-graph bindings.
> >
> > I can see two possible solutions (as of now)
> >
> > 1. adding "dcs-child-type" bindings for child-based panel or bridge
> > 2. iterate child and skip those nodes other than panel or bridge. or
> > iterate sub-child to find it has a panel or bridge-like aux-bus (which
> > is indeed hard as this configuration seems not 'standard' i think )
> >
> > Any inputs?
>
> Checking aux-bus with the sub-node panel can be a possible check to
> look at it, any comments?
Can we stop piling hacks and move towards OF graph everywhere, please ?
> --- a/drivers/gpu/drm/drm_of.c
> +++ b/drivers/gpu/drm/drm_of.c
> @@ -244,6 +244,25 @@ int drm_of_find_panel_or_bridge(const struct
> device_node *np,
> if (panel)
> *panel = NULL;
>
> + /**
> + * Devices can also be child nodes when we also control that device
> + * through the upstream device (ie, MIPI-DCS for a MIPI-DSI device).
> + *
> + * Lookup for a child node of the given parent that isn't either port
> + * or ports.
> + */
> + for_each_available_child_of_node(np, remote) {
> + if (of_node_name_eq(remote, "port") ||
> + of_node_name_eq(remote, "ports"))
> + continue;
> +
> + if (!(of_node_name_eq(remote, "aux-bus") &&
> + of_get_child_by_name(remote, "panel")))
> + continue;
> +
> + goto of_find_panel_or_bridge;
> + }
> +
> /*
> * of_graph_get_remote_node() produces a noisy error message if port
> * node isn't found and the absence of the port is a legit case here,
> @@ -254,6 +273,8 @@ int drm_of_find_panel_or_bridge(const struct
> device_node *np,
> return -ENODEV;
>
> remote = of_graph_get_remote_node(np, port, endpoint);
> +
> +of_find_panel_or_bridge:
> if (!remote)
> return -ENODEV;
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2022-04-27 13:10 UTC|newest]
Thread overview: 82+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-20 23:12 [PATCH 1/2] Revert "drm: of: Properly try all possible cases for bridge/panel detection" Bjorn Andersson
2022-04-20 23:12 ` Bjorn Andersson
2022-04-20 23:12 ` [PATCH 2/2] Revert "drm: of: Lookup if child node has panel or bridge" Bjorn Andersson
2022-04-20 23:12 ` Bjorn Andersson
2022-04-21 7:20 ` (subset) " Maxime Ripard
2022-04-21 7:20 ` Maxime Ripard
2022-04-21 7:45 ` Jagan Teki
2022-04-21 7:45 ` Jagan Teki
2022-04-21 8:23 ` Maxime Ripard
2022-04-21 8:23 ` Maxime Ripard
2022-04-21 8:59 ` Paul Kocialkowski
2022-04-21 8:59 ` Paul Kocialkowski
2022-04-26 7:54 ` Paul Kocialkowski
2022-04-26 7:54 ` Paul Kocialkowski
2022-04-26 8:10 ` Jagan Teki
2022-04-26 8:10 ` Jagan Teki
2022-04-27 14:34 ` Maxime Ripard
2022-04-27 14:34 ` Maxime Ripard
2022-04-28 6:17 ` Marek Szyprowski
2022-04-28 6:17 ` Marek Szyprowski
2022-04-28 8:25 ` Jagan Teki
2022-04-28 8:25 ` Jagan Teki
2022-04-28 8:39 ` Jagan Teki
2022-04-28 8:39 ` Jagan Teki
2022-04-28 22:17 ` Laurent Pinchart
2022-04-28 22:17 ` Laurent Pinchart
2022-04-29 8:24 ` Jagan Teki
2022-04-29 8:24 ` Jagan Teki
2022-04-29 15:46 ` Maxime Ripard
2022-04-29 15:46 ` Maxime Ripard
2022-04-29 16:05 ` Laurent Pinchart
2022-04-29 16:05 ` Laurent Pinchart
2022-05-04 15:08 ` Maxime Ripard
2022-05-04 15:08 ` Maxime Ripard
2022-04-26 11:33 ` Laurent Pinchart
2022-04-26 11:33 ` Laurent Pinchart
2022-04-26 12:41 ` Paul Kocialkowski
2022-04-26 12:41 ` Paul Kocialkowski
2022-04-26 12:54 ` Maxime Ripard
2022-04-26 12:54 ` Maxime Ripard
2022-04-26 12:55 ` Maxime Ripard
2022-04-26 12:55 ` Maxime Ripard
2022-04-26 13:04 ` Paul Kocialkowski
2022-04-26 13:04 ` Paul Kocialkowski
2022-04-26 13:19 ` Maxime Ripard
2022-04-26 13:19 ` Maxime Ripard
2022-04-26 13:50 ` Paul Kocialkowski
2022-04-26 13:50 ` Paul Kocialkowski
2022-04-26 21:10 ` Bjorn Andersson
2022-04-26 21:10 ` Bjorn Andersson
2022-04-27 7:34 ` Paul Kocialkowski
2022-04-27 7:34 ` Paul Kocialkowski
2022-05-03 0:03 ` Bjorn Andersson
2022-05-03 0:03 ` Bjorn Andersson
2022-04-26 12:58 ` Paul Kocialkowski
2022-04-26 12:58 ` Paul Kocialkowski
2022-04-27 13:10 ` Laurent Pinchart
2022-04-27 13:10 ` Laurent Pinchart
2022-04-26 12:51 ` Maxime Ripard
2022-04-26 12:51 ` Maxime Ripard
2022-04-27 6:59 ` Jagan Teki
2022-04-27 6:59 ` Jagan Teki
2022-04-27 11:52 ` Jagan Teki
2022-04-27 11:52 ` Jagan Teki
2022-04-27 12:19 ` Paul Kocialkowski
2022-04-27 12:19 ` Paul Kocialkowski
2022-04-27 12:59 ` Jagan Teki
2022-04-27 12:59 ` Jagan Teki
2022-04-27 13:10 ` Laurent Pinchart [this message]
2022-04-27 13:10 ` Laurent Pinchart
2022-04-20 23:19 ` [PATCH 1/2] Revert "drm: of: Properly try all possible cases for bridge/panel detection" Bjorn Andersson
2022-04-20 23:19 ` Bjorn Andersson
2022-04-21 7:13 ` Paul Kocialkowski
2022-04-21 7:13 ` Paul Kocialkowski
2022-04-21 7:26 ` Maxime Ripard
2022-04-21 7:26 ` Maxime Ripard
2022-04-22 7:58 ` Raphael Gallais-Pou
2022-04-22 7:58 ` Raphael Gallais-Pou
2022-04-21 7:11 ` Paul Kocialkowski
2022-04-21 7:11 ` Paul Kocialkowski
2022-04-21 7:20 ` (subset) " Maxime Ripard
2022-04-21 7:20 ` Maxime Ripard
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=YmlAtUTJiBrsFBN3@pendragon.ideasonboard.com \
--to=laurent.pinchart@ideasonboard.com \
--cc=airlied@linux.ie \
--cc=bjorn.andersson@linaro.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=jagan@amarulasolutions.com \
--cc=linux-kernel@vger.kernel.org \
--cc=m.szyprowski@samsung.com \
--cc=maxime@cerno.tech \
--cc=michael@amarulasolutions.com \
--cc=paul.kocialkowski@bootlin.com \
--cc=robert.foss@linaro.org \
--cc=thierry.reding@gmail.com \
--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.