From: Stephen Boyd <swboyd@chromium.org> To: Bjorn Andersson <bjorn.andersson@linaro.org>, Doug Anderson <dianders@chromium.org> Cc: Rob Clark <robdclark@gmail.com>, Sean Paul <sean@poorly.run>, David Airlie <airlied@linux.ie>, Daniel Vetter <daniel@ffwll.ch>, linux-arm-msm <linux-arm-msm@vger.kernel.org>, LKML <linux-kernel@vger.kernel.org>, Abhinav Kumar <abhinavk@codeaurora.org>, Kuogee Hsieh <khsieh@codeaurora.org>, dri-devel <dri-devel@lists.freedesktop.org>, Vara Reddy <varar@codeaurora.org>, freedreno <freedreno@lists.freedesktop.org>, Chandan Uddaraju <chandanu@codeaurora.org> Subject: Re: [RFC] drm/msm/dp: Allow attaching a drm_panel Date: Mon, 4 Oct 2021 21:50:24 -0400 [thread overview] Message-ID: <CAE-0n51nP7c5VziUMMoOrE2THK0xdA3A_EiJTquYc0+8KhAWAQ@mail.gmail.com> (raw) In-Reply-To: <YVumL1lHLqtb/HKS@ripper> Quoting Bjorn Andersson (2021-10-04 18:11:11) > On Mon 04 Oct 17:36 PDT 2021, Doug Anderson wrote: > > > Hi, > > > > On Fri, Oct 1, 2021 at 2:00 PM Bjorn Andersson > > <bjorn.andersson@linaro.org> wrote: > > > > > > On Fri 27 Aug 13:52 PDT 2021, Doug Anderson wrote: > > > > > > > Hi, > > > > > > > > On Mon, Jul 26, 2021 at 4:15 PM Bjorn Andersson > > > > <bjorn.andersson@linaro.org> wrote: > > > > > > > > > > +static int dp_parser_find_panel(struct dp_parser *parser) > > > > > +{ > > > > > + struct device_node *np = parser->pdev->dev.of_node; > > > > > + int rc; > > > > > + > > > > > + rc = drm_of_find_panel_or_bridge(np, 2, 0, &parser->drm_panel, NULL); > > > > > > > > Why port 2? Shouldn't this just be port 1 always? The yaml says that > > > > port 1 is "Output endpoint of the controller". We should just use port > > > > 1 here, right? > > > > > > > > > > Finally got back to this, changed it to 1 and figured out why I left it > > > at 2. > > > > > > drm_of_find_panel_or_bridge() on a DP controller will find the of_graph > > > reference to the USB-C controller, scan through the registered panels > > > and conclude that the of_node of the USB-C controller isn't a registered > > > panel and return -EPROBE_DEFER. > > > > I'm confused, but maybe it would help if I could see something > > concrete. Is there a specific board this was happening on? > > > > Right, let's make this more concrete with a snippet from the actual > SC8180x DT. Where is this DT? Is it in the kernel tree? > > > Under the DP node in the device tree I expect: > > > > ports { > > port@1 { > > reg = <1>; > > edp_out: endpoint { > > remote-endpoint = <&edp_panel_in>; > > }; > > }; > > }; > > > > /* We got a panel */ > panel { > ... > ports { > port { > auo_b133han05_in: endpoint { > remote-endpoint = <&mdss_edp_out>; > }; > }; > }; > }; > > /* And a 2-port USB-C controller */ > type-c-controller { > ... > connector@0 { > ports { > port@0 { > reg = <0>; > ucsi_port_0_dp: endpoint { > remote-endpoint = <&dp0_mode>; > }; > }; > > port@1 { > reg = <1>; > ucsi_port_0_switch: endpoint { > remote-endpoint = <&primary_qmp_phy>; > }; > }; > }; > }; > > connector@1 { > ports { > port@0 { > reg = <0>; > ucsi_port_1_dp: endpoint { > remote-endpoint = <&dp1_mode>; > }; > }; > > port@1 { > reg = <1>; > ucsi_port_1_switch: endpoint { > remote-endpoint = <&second_qmp_phy>; > }; > }; > }; > }; > }; > > /* And then our 2 DP and single eDP controllers */ > &mdss_dp0 { > ports { > port@1 { > reg = <1>; > dp0_mode: endpoint { > remote-endpoint = <&ucsi_port_0_dp>; > }; > }; > }; > }; > > &mdss_dp1 { > ports { > port@1 { > reg = <1>; > dp1_mode: endpoint { > remote-endpoint = <&ucsi_port_1_dp>; > }; > }; > }; > }; > > &mdss_edp { > ports { > port@1 { > reg = <1>; > mdss_edp_out: endpoint { > remote-endpoint = <&auo_b133han05_in>; > }; > }; > }; > }; > > > If you have "port@1" pointing to a USB-C controller but this instance > > of the DP controller is actually hooked up straight to a panel then > > you should simply delete the "port@1" that points to the typeC and > > replace it with one that points to a panel, right? > > > > As you can see, port 1 on &mdss_dp0 and &mdss_dp1 points to the two UCSI > connectors and the eDP points to the panel, exactly like we agreed. > > So now I call: > drm_of_find_panel_or_bridge(dev->of_node, 1, 0, &panel, NULL); > > which for the two DP nodes will pass respective UCSI connector to > drm_find_panel() and get EPROBE_DEFER back - because they are not on > panel_list. That's "good" right? > > There's nothing indicating in the of_graph that the USB connectors > aren't panels (or bridges), so I don't see a way to distinguish the two > types remotes. > I'd like to create a bridge, not panel, for USB connectors, so that we can push sideband HPD signaling through to the DP driver. But either way this should work, right? If drm_of_find_panel_or_bridge() returns -EPROBE_DEFER, then assume the connector is DP. Otherwise if there's a valid pointer then treat it as eDP. We can't go too crazy though because once we attach a bridge we're assuming eDP which may not actually be true. If we make a bridge for type-C USB connectors then we'll be able to use the drm_bridge_connector code to automatically figure out the connector type (eDP vs. DP vs. whatever else is chained onto the end of the DP connector). That would require updating the bridge connector code to treat DP as a connector type though. And then the eDP path would need to be handled when there's no bridge really involved, like in your case where the eDP hardware is directly connected to the eDP panel. In this case I think we're supposed to make a bridge in this DP driver itself that does pretty basic stuff and assumes the connector is eDP or DP based on the hardware type it is. Then if we wire a type-c connector up to the eDP hardware the eDP bridge we make in this driver will see a type-c connector that makes a bridge saying "I'm a DP connector" and the drm_bridge_connector code will look at the last bridge in the chain to see that it's actually a DP connector.
next prev parent reply other threads:[~2021-10-05 1:50 UTC|newest] Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-07-26 23:13 Bjorn Andersson 2021-07-29 9:59 ` Dmitry Baryshkov 2021-08-25 23:28 ` Bjorn Andersson 2021-08-26 1:31 ` Stephen Boyd 2021-08-26 20:36 ` Doug Anderson 2021-08-26 20:29 ` Doug Anderson 2021-08-27 20:52 ` Doug Anderson 2021-08-28 14:40 ` Bjorn Andersson 2021-08-30 16:01 ` Doug Anderson 2021-10-01 21:02 ` Bjorn Andersson 2021-10-05 0:36 ` Doug Anderson 2021-10-05 1:11 ` Bjorn Andersson 2021-10-05 1:50 ` Stephen Boyd [this message] 2021-10-05 2:11 ` Bjorn Andersson 2021-10-05 15:39 ` Doug Anderson 2021-10-05 17:34 ` Bjorn Andersson 2021-10-05 23:09 ` Doug Anderson 2021-10-06 2:29 ` Bjorn Andersson 2021-10-06 15:12 ` Doug Anderson 2021-10-06 20:26 ` Prashant Malani 2021-10-07 10:17 ` Heikki Krogerus 2021-10-07 16:15 ` Bjorn Andersson 2021-10-08 12:38 ` Heikki Krogerus 2021-12-06 22:31 ` Bjorn Andersson 2021-12-07 12:26 ` Heikki Krogerus 2021-12-07 16:56 ` Hans de Goede 2021-12-07 17:29 ` Bjorn Andersson 2021-12-07 17:54 ` Imre Deak
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=CAE-0n51nP7c5VziUMMoOrE2THK0xdA3A_EiJTquYc0+8KhAWAQ@mail.gmail.com \ --to=swboyd@chromium.org \ --cc=abhinavk@codeaurora.org \ --cc=airlied@linux.ie \ --cc=bjorn.andersson@linaro.org \ --cc=chandanu@codeaurora.org \ --cc=daniel@ffwll.ch \ --cc=dianders@chromium.org \ --cc=dri-devel@lists.freedesktop.org \ --cc=freedreno@lists.freedesktop.org \ --cc=khsieh@codeaurora.org \ --cc=linux-arm-msm@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=robdclark@gmail.com \ --cc=sean@poorly.run \ --cc=varar@codeaurora.org \ --subject='Re: [RFC] drm/msm/dp: Allow attaching a drm_panel' \ /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
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).