From: Tomasz Figa <tomasz.figa@gmail.com>
To: Olof Johansson <olof@lixom.net>
Cc: "Stéphane Marchesin" <marcheu@chromium.org>,
"Sylwester Nawrocki" <s.nawrocki@samsung.com>,
"Laurent Pinchart" <laurent.pinchart@ideasonboard.com>,
"DRI mailing list" <dri-devel@lists.freedesktop.org>
Subject: Re: [PATCH v2 12/26] drm/exynos: Split manager/display/subdrv
Date: Tue, 29 Oct 2013 20:23:15 +0100 [thread overview]
Message-ID: <2912271.n3p0qlGDVj@flatron> (raw)
In-Reply-To: <CAOesGMhNFvhxnbMxY7ZgJeX8SHtQbwAO8zysi40HceTQPRU+rQ@mail.gmail.com>
On Tuesday 29 of October 2013 12:19:35 Olof Johansson wrote:
> On Mon, Oct 28, 2013 at 4:13 PM, Tomasz Figa <tomasz.figa@gmail.com>
wrote:
> > Hi,
> >
> > On Wednesday 23 of October 2013 12:09:06 Sean Paul wrote:
> >> On Wed, Oct 23, 2013 at 11:53 AM, Dave Airlie <airlied@gmail.com>
wrote:
> >> >>>>> I think we need to start considering a framework where
> >> >>>>> subdrivers
> >> >>>>> just
> >> >>>>> add drm objects themselves, then the toplevel node is
> >> >>>>> responsible
> >> >>>>> for
> >> >>>>> knowing that everything for the current configuration is
> >> >>>>> loaded.
> >> >>>>
> >> >>>> It would be nice to specify the various pieces in dt, then have
> >> >>>> some
> >> >>>> type of drm notifier to the toplevel node when everything has
> >> >>>> been
> >> >>>> probed. Doing it in the dt would allow standalone
> >> >>>> drm_bridge/drm_panel
> >> >>>> drivers to be transparent as far as the device's drm driver is
> >> >>>> concerned.
> >> >>>>
> >> >>>> Sean
> >> >>>>
> >> >>>>> I realise we may need to make changes to the core drm to allow
> >> >>>>> this
> >> >>>>> but we should probably start to create a strategy for fixing
> >> >>>>> the
> >> >>>>> API
> >> >>>>> issues that this throws up.
> >> >>>>>
> >> >>>>> Note I'm not yet advocating for dynamic addition of nodes once
> >> >>>>> the
> >> >>>>> device is in use, or removing them.
> >> >>>
> >> >>> I do wonder if we had some sort of tag in the device tree for any
> >> >>> nodes
> >> >>> involved in the display, and the core drm layer would read that
> >> >>> list,
> >> >>> and when every driver registers tick things off, and when the
> >> >>> last
> >> >>> one
> >> >>> joins we get a callback and init the drm layer, we'd of course
> >> >>> have
> >> >>> the
> >> >>> basic drm layer setup prior to that so we can add the objects as
> >> >>> the
> >> >>> drivers load. It might make development a bit trickier as you'd
> >> >>> need
> >> >>> to make sure someone claimed ownership of all the bits for init
> >> >>> to
> >> >>> proceed.>>
> >> >>
> >> >> Yeah, that's basically what the strawman looked like in my head.
> >> >>
> >> >> Instead of a property in each node, I was thinking of having a
> >> >> separate gfx pipe nodes that would have dt pointers to the various
> >> >> pieces involved in that pipe. This would allow us to associate
> >> >> standalone entities like bridges and panels with encoders in dt
> >> >> w/o
> >> >> doing it in the drm code. I *think* this should be Ok with the dt
> >> >> guys
> >> >> since it is still describing the hardware, but I think we'd have
> >> >> to
> >> >> make sure it wasn't drm-specific.
> >> >
> >> > I suppose the question is how much dynamic pipeline construction
> >> > there
> >> > is,
> >> >
> >> > even on things like radeon and i915 we have dynamic clock generator
> >> > to
> >> > crtc to encoder setups, so I worry about static lists per-pipe, so
> >> > I
> >> > still think just stating all these devices are needed for display
> >> > and
> >> > a list of valid interconnections between them, then we can have the
> >> > generic code model drm crtc/encoders/connectors on that list, and
> >> > construct the possible_crtcs /possible_clones etc at that stage.
> >>
> >> I'm, without excuse, hopeless at devicetree, so there are probably
> >> some violations, but something like:
> >>
> >> display-pipelines {
> >>
> >> required-elements = <&bridge-a &panel-a &encoder-x &encoder-y
> >>
> >> &crtc-x &crtc-y>;
> >>
> >> pipe1 {
> >>
> >> bridge = <&bridge-a>;
> >> encoder = <&encoder-x>;
> >> crtc = <&crtc-y>;
> >>
> >> };
> >> pipe2 {
> >>
> >> encoder = <&encoder-x>;
> >> crtc = <&crtc-x>;
> >>
> >> };
> >> pipe3 {
> >>
> >> panel = <&panel-a>;
> >> encoder = <&encoder-y>;
> >> crtc = <&crtc-y>;
> >>
> >> };
> >>
> >> };
> >>
> >> I'm tempted to add connector to the pipe nodes as well, so it's
> >> obvious which connector should be used in cases where multiple
> >> entities in the pipe implement drm_connector. However, I'm not sure
> >> if
> >> that would be NACKed by dt people.
> >>
> >> I'm also not sure if there are too many combinations for i915 and
> >> radeon to make this unreasonable. I suppose those devices could just
> >> use required-elements and leave the pipe nodes out.
> >
> > Just to put my two cents in, as one of the people involved into "the
> > device tree movement", I'd say that instead of creating artifical
> > entities, such as display-pipelines and all of the pipeX'es, device
> > tree should represent relations between nodes.
> >
> > According to the generic DT bindings we already have for
> > video-interfaces [1] your example connection layout would look as
> > follows:
> >
> > panel-a {
> >
> > /* Single input port */
> > port {
> >
> > panel_a: endpoint@0 {
> >
> > remote-endpoint = <&encoder_y_out>;
> >
> > };
> >
> > };
> >
> > };
> >
> > bridge-a {
> >
> > ports {
> >
> > /* Input port */
> > port@0 {
> >
> > bridge_a_in: endpoint@0 {
> >
> > remote-endpoint = <&encoder_x_out>;
> >
> > };
> >
> > };
> >
> > /*
> >
> > * Since it is a bridge, port@1 should be probably
> > * present here as well...
> > */
> >
> > };
> >
> > };
> >
> > encoder-x {
> >
> > ports {
> >
> > /* Input port */
> > port@0 {
> >
> > encoder_x_in0: endpoint@0 {
> >
> > remote-endpoint = <&crtc_x>;
> >
> > };
> >
> > encoder_x_in1: endpoint@1 {
> >
> > remote-endpoint = <&crtc_y_out0>;
> >
> > };
> >
> > };
> >
> > /* Output port */
> > port@1 {
> >
> > encoder_x_out: endpoint@0 {
> >
> > remote-endpoint = <&bridge_a_in>;
> >
> > };
> >
> > };
> >
> > };
> >
> > };
> >
> > encoder-y {
> >
> > ports {
> >
> > /* Input port */
> > port@0 {
> >
> > encoder_y_in: endpoint@0 {
> >
> > remote-endpoint = <&encoder_y_in>;
> >
> > };
> >
> > };
> >
> > /* Output port */
> > port@1 {
> >
> > encoder_y_out: endpoint@0 {
> >
> > remote-endpoint = <&panel_a>;
> >
> > };
> >
> > };
> >
> > };
> >
> > };
> >
> > crtc-x {
> >
> > /* Single output port */
> > port {
> >
> > crtc_x: endpoint@0 {
> >
> > remote-endpoint = <&encoder_x_in0>;
> >
> > };
> >
> > };
> >
> > };
> >
> > crtc-y {
> >
> > /* Single output port */
> > port {
> >
> > crtc_y_out0: endpoint@0 {
> >
> > remote-endpoint = <&encoder_x_in1>;
> >
> > };
> >
> > crtc_y_out1: endpoint@1 {
> >
> > remote-endpoint = <&encoder_y_in>;
> >
> > };
> >
> > };
> >
> > };
> >
> > If I didn't make any typos, then the nodes above should not only
> > represent fully the layout of your sample video pipelines, but also
> > map connections between video entities with their physical endpoints,
> > allowing respective drivers to properly configure any muxes based
> > purely on DT data. Of course this also includes dependencies between
> > all display entities.
>
> It's a very deeply nested structure, I'm not sure there's a need to
> make a ports {} subnode really.
>
> Also, I don't know if it makes sense to always name it
> remote-endpoint, or to use a more flexible name depending on what is
> actually connected, over which bus, etc.
>
> But overall this looks sane-ish.
I fully agree with you. Personally I would take a bit different design
decisions when designing this bindings, but here I'm just pointing an
already defined binding that should suit the needs described in this
thread, to avoid reinventing the wheel.
Best regards,
Tomasz
next prev parent reply other threads:[~2013-10-29 19:23 UTC|newest]
Thread overview: 93+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-16 19:26 [PATCH v2 00/26] drm/exynos: Refactor parts of the exynos driver Sean Paul
2013-10-16 19:26 ` [PATCH v2 01/26] drm/exynos: Remove useless slab.h include Sean Paul
2013-10-16 19:26 ` [PATCH v2 02/26] drm/exynos: Merge overlay_ops into manager_ops Sean Paul
2013-10-16 19:26 ` [PATCH v2 03/26] drm/exynos: Add an initialize function to manager and display Sean Paul
2013-10-16 19:26 ` [PATCH v2 04/26] drm/exynos: Use manager_op initialize in fimd Sean Paul
2013-10-16 19:26 ` [PATCH v2 05/26] drm/exynos: hdmi: Implement initialize op for hdmi Sean Paul
2013-10-16 19:26 ` [PATCH v2 06/26] drm/exynos: Pass exynos_drm_manager in manager ops instead of dev Sean Paul
2013-10-16 19:26 ` [PATCH v2 07/26] drm/exynos: Remove apply manager callback Sean Paul
2013-10-16 19:26 ` [PATCH v2 08/26] drm/exynos: Remove dpms link between encoder/connector Sean Paul
2013-10-16 19:26 ` [PATCH v2 09/26] drm/exynos: Rename display_op power_on to dpms Sean Paul
2013-10-16 19:26 ` [PATCH v2 10/26] drm/exynos: Don't keep dpms state in encoder Sean Paul
2013-10-16 19:26 ` [PATCH v2 11/26] drm/exynos: Use unsigned long for possible_crtcs Sean Paul
2013-10-16 19:26 ` [PATCH v2 12/26] drm/exynos: Split manager/display/subdrv Sean Paul
2013-10-17 8:21 ` Inki Dae
2013-10-17 14:37 ` Sean Paul
2013-10-18 2:31 ` Inki Dae
2013-10-21 14:46 ` Sean Paul
2013-10-21 21:17 ` Sean Paul
2013-10-22 5:30 ` Inki Dae
2013-10-22 13:45 ` Sean Paul
2013-10-23 2:28 ` Inki Dae
2013-10-23 2:40 ` Stéphane Marchesin
2013-10-23 3:38 ` Inki Dae
2013-10-23 4:03 ` Stéphane Marchesin
2013-10-23 4:15 ` Inki Dae
2013-10-23 4:28 ` Stéphane Marchesin
2013-10-23 4:48 ` Inki Dae
2013-10-23 5:19 ` Sean Paul
2013-10-23 5:42 ` Inki Dae
2013-10-23 12:20 ` Sean Paul
2013-10-23 13:18 ` Inki Dae
2013-10-23 14:29 ` Dave Airlie
2013-10-23 14:45 ` Sean Paul
2013-10-23 15:22 ` Dave Airlie
2013-10-23 15:27 ` Rob Clark
2013-10-23 15:27 ` Sean Paul
2013-10-23 15:28 ` Sean Paul
2013-10-23 15:53 ` Dave Airlie
2013-10-23 16:09 ` Sean Paul
2013-10-28 16:49 ` Olof Johansson
2013-10-28 17:39 ` Sean Paul
2013-10-28 23:13 ` Tomasz Figa
2013-10-29 19:19 ` Olof Johansson
2013-10-29 19:23 ` Tomasz Figa [this message]
2013-10-29 19:47 ` Sylwester Nawrocki
2013-10-29 23:08 ` Laurent Pinchart
2013-10-29 20:36 ` Sean Paul
2013-10-29 20:50 ` Tomasz Figa
2013-10-29 21:29 ` Rob Clark
2013-10-29 23:32 ` Laurent Pinchart
2013-11-04 10:21 ` Thierry Reding
2013-11-04 10:10 ` Thierry Reding
2013-11-04 12:14 ` Rob Clark
2013-11-04 12:52 ` Thierry Reding
2013-11-04 16:12 ` Daniel Vetter
2013-10-30 3:46 ` Stéphane Marchesin
2013-11-04 10:25 ` Thierry Reding
2013-11-04 11:30 ` Inki Dae
2013-11-04 15:44 ` Sean Paul
2013-11-05 7:38 ` Inki Dae
2013-10-30 15:32 ` Sean Paul
2013-10-30 15:45 ` Laurent Pinchart
2013-10-30 15:56 ` Sean Paul
2013-11-04 10:12 ` Laurent Pinchart
2013-10-30 15:53 ` Daniel Vetter
2013-11-04 10:13 ` Laurent Pinchart
2013-11-04 10:36 ` Thierry Reding
2013-11-04 10:08 ` Thierry Reding
2013-10-24 6:47 ` Inki Dae
2013-10-23 14:51 ` Rob Clark
2013-10-24 7:46 ` Inki Dae
2013-10-25 5:15 ` Inki Dae
2013-10-28 20:43 ` Rob Clark
2013-10-23 3:39 ` Sean Paul
2013-10-22 4:55 ` Inki Dae
2013-10-22 10:30 ` Inki Dae
2013-10-23 5:18 ` Inki Dae
2013-10-16 19:26 ` [PATCH v2 13/26] drm/exynos: hdmi: remove the i2c drivers and use devtree Sean Paul
2013-10-16 19:26 ` [PATCH v2 14/26] drm/exynos: Remove exynos_drm_hdmi shim Sean Paul
2013-10-16 19:26 ` [PATCH v2 15/26] drm/exynos: Use drm_mode_copy to copy modes Sean Paul
2013-10-16 19:26 ` [PATCH v2 16/26] drm/exynos: Disable unused crtc planes from crtc Sean Paul
2013-10-16 19:26 ` [PATCH v2 17/26] drm/exynos: Add mode_set manager operation Sean Paul
2013-10-16 19:26 ` [PATCH v2 18/26] drm/exynos: Implement mode_fixup " Sean Paul
2013-10-16 19:26 ` [PATCH v2 19/26] drm/exynos: Use mode_set to configure fimd Sean Paul
2013-10-16 19:26 ` [PATCH v2 20/26] drm/exynos: Remove unused/useless fimd_context members Sean Paul
2013-10-16 19:26 ` [PATCH v2 21/26] drm/exynos: Move dp driver from video/ to drm/ Sean Paul
2013-10-16 19:26 ` [PATCH v2 22/26] drm/exynos: Move display implementation into dp Sean Paul
2013-10-16 19:26 ` [PATCH v2 23/26] ARM: dts: Move display-timings node from fimd to dp Sean Paul
2013-10-16 19:26 ` [PATCH v2 24/26] drm/exynos: Implement dpms display callback in DP Sean Paul
2013-10-16 19:26 ` [PATCH v2 25/26] drm/exynos: Clean up FIMD power on/off routines Sean Paul
2013-10-16 19:26 ` [PATCH v2 26/26] drm/exynos: Consolidate suspend/resume in drm_drv Sean Paul
2013-10-16 20:40 ` Sean Paul
2013-10-17 5:10 ` Inki Dae
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=2912271.n3p0qlGDVj@flatron \
--to=tomasz.figa@gmail.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=laurent.pinchart@ideasonboard.com \
--cc=marcheu@chromium.org \
--cc=olof@lixom.net \
--cc=s.nawrocki@samsung.com \
/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 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).