All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Vetter <daniel@ffwll.ch>
To: Mihail Atanassov <Mihail.Atanassov@arm.com>
Cc: "dri-devel@lists.freedesktop.org"
	<dri-devel@lists.freedesktop.org>, nd <nd@arm.com>,
	Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
	Maxime Ripard <mripard@kernel.org>,
	David Airlie <airlied@linux.ie>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 01/30] drm: Introduce drm_bridge_init()
Date: Tue, 26 Nov 2019 18:04:24 +0100	[thread overview]
Message-ID: <CAKMK7uG2T9hPCsQ6yLekGoz5qA2-ePa2_MmsmQRBH5je+7Kaow@mail.gmail.com> (raw)
In-Reply-To: <11447519.fzG14qnjOE@e123338-lin>

On Tue, Nov 26, 2019 at 4:55 PM Mihail Atanassov
<Mihail.Atanassov@arm.com> wrote:
>
> Hi Daniel,
>
> Thanks for the quick review.
>
> On Tuesday, 26 November 2019 14:26:10 GMT Daniel Vetter wrote:
> > On Tue, Nov 26, 2019 at 01:15:59PM +0000, Mihail Atanassov wrote:
> > > A simple convenience function to initialize the struct drm_bridge.
> > >
> > > Signed-off-by: Mihail Atanassov <mihail.atanassov@arm.com>
> >
> > The commit message here leaves figuring out why we need this to the
> > reader. Reading ahead the reasons seems to be to roll out bridge->dev
> > setting for everyone, so that we can set the device_link. Please explain
> > that in the commit message so the patch is properly motivated.
>
> Ack, but with one caveat: bridge->dev is the struct drm_device that is
> the bridge client, we need to add a bridge->device (patch 29 in this
> series) which is the struct device that will manage the bridge lifetime.

Ah yes, ->dev is for drm_bridge_attach.

> >
> > > ---
> > >  drivers/gpu/drm/drm_bridge.c | 29 +++++++++++++++++++++++++++++
> > >  include/drm/drm_bridge.h     |  4 ++++
> > >  2 files changed, 33 insertions(+)
> > >
> > > diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c
> > > index cba537c99e43..cbe680aa6eac 100644
> > > --- a/drivers/gpu/drm/drm_bridge.c
> > > +++ b/drivers/gpu/drm/drm_bridge.c
> > > @@ -89,6 +89,35 @@ void drm_bridge_remove(struct drm_bridge *bridge)
> > >  }
> > >  EXPORT_SYMBOL(drm_bridge_remove);
> > >
> > > +/**
> > > + * drm_bridge_init - initialise a drm_bridge structure
> > > + *
> > > + * @bridge: bridge control structure
> > > + * @funcs: control functions
> > > + * @dev: device
> > > + * @timings: timing specification for the bridge; optional (may be NULL)
> > > + * @driver_private: pointer to the bridge driver internal context (may be NULL)
> >
> > Please also sprinkle some links to this new function to relevant places,
> > I'd add at least:
> >
> > "Drivers should call drm_bridge_init() first." to the kerneldoc for
> > drm_bridge_add. drm_bridge_add should also mention drm_bridge_remove as
> > the undo function.
> >
> > And perhaps a longer paragraph to &struct drm_bridge:
> >
> > "Bridge drivers should call drm_bridge_init() to initialized a bridge
> > driver, and then register it with drm_bridge_add().
> >
> > "Users of bridges link a bridge driver into their overall display output
> > pipeline by calling drm_bridge_attach()."
>
> Will do.
>
> >
> > > + */
> > > +void drm_bridge_init(struct drm_bridge *bridge, struct device *dev,
> > > +                const struct drm_bridge_funcs *funcs,
> > > +                const struct drm_bridge_timings *timings,
> > > +                void *driver_private)
> > > +{
> > > +   WARN_ON(!funcs);
> > > +
> > > +   bridge->dev = NULL;
> >
> > Given that the goal here is to get bridge->dev set up, why not
> >
> >       WARN_ON(!dev);
> >       bridge->dev = dev;
>
> See above struct device vs struct drm_device. I add a
>
>         bridge->device = dev;
>
> in patch 29, which takes care of that. I skipped the warn since
> there's a dereference of dev, but I now realized it's behind CONFIG_OF,
> so I'll add it in for v2.

Ok, sounds good. Having the WARN_ON in patch 1 should also help making
sure all the conversion patches dtrt (and any future users).
-Daniel

> Yes, 'device' isn't the best of names, but I took Russell's patch
> almost as-is, I didn't have any better ideas for bikeshedding.
>
> >
> > That should help us to really move forward with all this.
> > -Daniel
> >
> > > +   bridge->encoder = NULL;
> > > +   bridge->next = NULL;
> > > +
> > > +#ifdef CONFIG_OF
> > > +   bridge->of_node = dev->of_node;
> > > +#endif
> > > +   bridge->timings = timings;
> > > +   bridge->funcs = funcs;
> > > +   bridge->driver_private = driver_private;
> > > +}
> > > +EXPORT_SYMBOL(drm_bridge_init);
> > > +
> > >  /**
> > >   * drm_bridge_attach - attach the bridge to an encoder's chain
> > >   *
> > > diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h
> > > index c0a2286a81e9..d6d9d5301551 100644
> > > --- a/include/drm/drm_bridge.h
> > > +++ b/include/drm/drm_bridge.h
> > > @@ -402,6 +402,10 @@ struct drm_bridge {
> > >
> > >  void drm_bridge_add(struct drm_bridge *bridge);
> > >  void drm_bridge_remove(struct drm_bridge *bridge);
> > > +void drm_bridge_init(struct drm_bridge *bridge, struct device *dev,
> > > +                const struct drm_bridge_funcs *funcs,
> > > +                const struct drm_bridge_timings *timings,
> > > +                void *driver_private);
> > >  struct drm_bridge *of_drm_find_bridge(struct device_node *np);
> > >  int drm_bridge_attach(struct drm_encoder *encoder, struct drm_bridge *bridge,
> > >                   struct drm_bridge *previous);
> >
> >
>
>
> --
> Mihail
>
>
>


--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch

WARNING: multiple messages have this Message-ID (diff)
From: Daniel Vetter <daniel@ffwll.ch>
To: Mihail Atanassov <Mihail.Atanassov@arm.com>
Cc: David Airlie <airlied@linux.ie>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"dri-devel@lists.freedesktop.org"
	<dri-devel@lists.freedesktop.org>, nd <nd@arm.com>
Subject: Re: [PATCH 01/30] drm: Introduce drm_bridge_init()
Date: Tue, 26 Nov 2019 18:04:24 +0100	[thread overview]
Message-ID: <CAKMK7uG2T9hPCsQ6yLekGoz5qA2-ePa2_MmsmQRBH5je+7Kaow@mail.gmail.com> (raw)
Message-ID: <20191126170424.PYfR-0zNVeLp_N8aw5g4NO3Sbt1hTVHN5UxXMgWczB0@z> (raw)
In-Reply-To: <11447519.fzG14qnjOE@e123338-lin>

On Tue, Nov 26, 2019 at 4:55 PM Mihail Atanassov
<Mihail.Atanassov@arm.com> wrote:
>
> Hi Daniel,
>
> Thanks for the quick review.
>
> On Tuesday, 26 November 2019 14:26:10 GMT Daniel Vetter wrote:
> > On Tue, Nov 26, 2019 at 01:15:59PM +0000, Mihail Atanassov wrote:
> > > A simple convenience function to initialize the struct drm_bridge.
> > >
> > > Signed-off-by: Mihail Atanassov <mihail.atanassov@arm.com>
> >
> > The commit message here leaves figuring out why we need this to the
> > reader. Reading ahead the reasons seems to be to roll out bridge->dev
> > setting for everyone, so that we can set the device_link. Please explain
> > that in the commit message so the patch is properly motivated.
>
> Ack, but with one caveat: bridge->dev is the struct drm_device that is
> the bridge client, we need to add a bridge->device (patch 29 in this
> series) which is the struct device that will manage the bridge lifetime.

Ah yes, ->dev is for drm_bridge_attach.

> >
> > > ---
> > >  drivers/gpu/drm/drm_bridge.c | 29 +++++++++++++++++++++++++++++
> > >  include/drm/drm_bridge.h     |  4 ++++
> > >  2 files changed, 33 insertions(+)
> > >
> > > diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c
> > > index cba537c99e43..cbe680aa6eac 100644
> > > --- a/drivers/gpu/drm/drm_bridge.c
> > > +++ b/drivers/gpu/drm/drm_bridge.c
> > > @@ -89,6 +89,35 @@ void drm_bridge_remove(struct drm_bridge *bridge)
> > >  }
> > >  EXPORT_SYMBOL(drm_bridge_remove);
> > >
> > > +/**
> > > + * drm_bridge_init - initialise a drm_bridge structure
> > > + *
> > > + * @bridge: bridge control structure
> > > + * @funcs: control functions
> > > + * @dev: device
> > > + * @timings: timing specification for the bridge; optional (may be NULL)
> > > + * @driver_private: pointer to the bridge driver internal context (may be NULL)
> >
> > Please also sprinkle some links to this new function to relevant places,
> > I'd add at least:
> >
> > "Drivers should call drm_bridge_init() first." to the kerneldoc for
> > drm_bridge_add. drm_bridge_add should also mention drm_bridge_remove as
> > the undo function.
> >
> > And perhaps a longer paragraph to &struct drm_bridge:
> >
> > "Bridge drivers should call drm_bridge_init() to initialized a bridge
> > driver, and then register it with drm_bridge_add().
> >
> > "Users of bridges link a bridge driver into their overall display output
> > pipeline by calling drm_bridge_attach()."
>
> Will do.
>
> >
> > > + */
> > > +void drm_bridge_init(struct drm_bridge *bridge, struct device *dev,
> > > +                const struct drm_bridge_funcs *funcs,
> > > +                const struct drm_bridge_timings *timings,
> > > +                void *driver_private)
> > > +{
> > > +   WARN_ON(!funcs);
> > > +
> > > +   bridge->dev = NULL;
> >
> > Given that the goal here is to get bridge->dev set up, why not
> >
> >       WARN_ON(!dev);
> >       bridge->dev = dev;
>
> See above struct device vs struct drm_device. I add a
>
>         bridge->device = dev;
>
> in patch 29, which takes care of that. I skipped the warn since
> there's a dereference of dev, but I now realized it's behind CONFIG_OF,
> so I'll add it in for v2.

Ok, sounds good. Having the WARN_ON in patch 1 should also help making
sure all the conversion patches dtrt (and any future users).
-Daniel

> Yes, 'device' isn't the best of names, but I took Russell's patch
> almost as-is, I didn't have any better ideas for bikeshedding.
>
> >
> > That should help us to really move forward with all this.
> > -Daniel
> >
> > > +   bridge->encoder = NULL;
> > > +   bridge->next = NULL;
> > > +
> > > +#ifdef CONFIG_OF
> > > +   bridge->of_node = dev->of_node;
> > > +#endif
> > > +   bridge->timings = timings;
> > > +   bridge->funcs = funcs;
> > > +   bridge->driver_private = driver_private;
> > > +}
> > > +EXPORT_SYMBOL(drm_bridge_init);
> > > +
> > >  /**
> > >   * drm_bridge_attach - attach the bridge to an encoder's chain
> > >   *
> > > diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h
> > > index c0a2286a81e9..d6d9d5301551 100644
> > > --- a/include/drm/drm_bridge.h
> > > +++ b/include/drm/drm_bridge.h
> > > @@ -402,6 +402,10 @@ struct drm_bridge {
> > >
> > >  void drm_bridge_add(struct drm_bridge *bridge);
> > >  void drm_bridge_remove(struct drm_bridge *bridge);
> > > +void drm_bridge_init(struct drm_bridge *bridge, struct device *dev,
> > > +                const struct drm_bridge_funcs *funcs,
> > > +                const struct drm_bridge_timings *timings,
> > > +                void *driver_private);
> > >  struct drm_bridge *of_drm_find_bridge(struct device_node *np);
> > >  int drm_bridge_attach(struct drm_encoder *encoder, struct drm_bridge *bridge,
> > >                   struct drm_bridge *previous);
> >
> >
>
>
> --
> Mihail
>
>
>


--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  reply	other threads:[~2019-11-26 17:04 UTC|newest]

Thread overview: 110+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-26 13:15 [PATCH 00/30] drm/bridge: Add device links for lifetime control Mihail Atanassov
2019-11-26 13:15 ` Mihail Atanassov
2019-11-26 13:15 ` Mihail Atanassov
2019-11-26 13:15 ` [PATCH 01/30] drm: Introduce drm_bridge_init() Mihail Atanassov
2019-11-26 13:15   ` Mihail Atanassov
2019-11-26 14:26   ` Daniel Vetter
2019-11-26 14:26     ` Daniel Vetter
2019-11-26 15:55     ` Mihail Atanassov
2019-11-26 15:55       ` Mihail Atanassov
2019-11-26 17:04       ` Daniel Vetter [this message]
2019-11-26 17:04         ` Daniel Vetter
2019-11-26 19:24       ` Sam Ravnborg
2019-11-26 19:24         ` Sam Ravnborg
2019-11-27 11:05         ` Mihail Atanassov
2019-11-27 11:05           ` Mihail Atanassov
2019-11-27 11:05           ` Mihail Atanassov
2019-11-27 11:31           ` Daniel Vetter
2019-11-27 11:31             ` Daniel Vetter
2019-12-02  5:55   ` [01/30] " james qian wang (Arm Technology China)
2019-12-02  5:55     ` james qian wang (Arm Technology China)
2019-12-02  8:49     ` Daniel Vetter
2019-12-02  8:49       ` Daniel Vetter
2019-12-03  6:12       ` james qian wang (Arm Technology China)
2019-12-03  6:12         ` james qian wang (Arm Technology China)
2019-11-26 13:16 ` [PATCH 02/30] drm/bridge: adv7511: Use drm_bridge_init() Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-26 13:16 ` [PATCH 03/30] drm/bridge: anx6345: " Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-26 13:16 ` [PATCH 04/30] drm/bridge: anx78xx: " Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-26 13:16 ` [PATCH 05/30] drm/bridge: cdns: " Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-26 13:16 ` [PATCH 06/30] drm/bridge: dumb-vga-dac: " Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-26 13:16 ` [PATCH 07/30] drm/bridge: lvds-encoder: " Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-26 13:16 ` [PATCH 08/30] drm/bridge: megachips-stdpxxxx-ge-b850v3-fw: " Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-26 13:16 ` [PATCH 09/30] drm/bridge: nxp-ptn3460: " Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-26 13:16 ` [PATCH 10/30] drm/bridge: panel: " Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-26 13:16 ` [PATCH 11/30] drm/bridge: ps8622: " Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-26 13:16 ` [PATCH 12/30] drm/bridge: sii902x: " Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-26 13:16 ` [PATCH 13/30] gpu: drm: bridge: sii9234: " Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-26 13:16 ` [PATCH 14/30] drm/bridge: sil_sii8620: " Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-26 13:16 ` [PATCH 15/30] drm/bridge: dw-hdmi: " Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-26 13:16 ` [PATCH 17/30] drm/bridge: tc358764: " Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-26 13:16 ` [PATCH 16/30] drm/bridge/synopsys: dsi: " Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-26 13:16 ` [PATCH 18/30] drm/bridge: tc358767: " Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-26 13:16 ` [PATCH 19/30] drm/bridge: thc63: " Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-26 13:16 ` [PATCH 20/30] drm/bridge: ti-sn65dsi86: " Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-26 13:16 ` [PATCH 21/30] drm/bridge: ti-tfp410: " Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-26 13:16 ` [PATCH 22/30] drm/exynos: mic: " Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-12-03  4:54   ` Inki Dae
2019-12-03  4:54     ` Inki Dae
2019-12-03  4:54     ` Inki Dae
2019-11-26 13:16 ` [PATCH 23/30] drm/i2c: tda998x: " Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-26 13:16 ` [PATCH 24/30] drm/mcde: dsi: " Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-28  9:08   ` Linus Walleij
2019-11-28  9:08     ` Linus Walleij
2019-11-26 13:16 ` [PATCH 25/30] drm/mediatek: hdmi: " Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-26 13:16 ` [PATCH 26/30] drm: rcar-du: lvds: " Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-26 13:16 ` [PATCH 27/30] drm: rcar-du: lvds: Don't set drm_bridge private pointer Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-26 13:16 ` [PATCH 28/30] drm/sti: sti_vdo: Use drm_bridge_init() Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-26 19:37   ` Sam Ravnborg
2019-11-26 19:37     ` Sam Ravnborg
2019-11-27 11:02     ` Mihail Atanassov
2019-11-27 11:02       ` Mihail Atanassov
2019-11-27 16:19       ` Sam Ravnborg
2019-11-27 16:19         ` Sam Ravnborg
2019-11-27 16:30         ` Benjamin Gaignard
2019-11-27 16:30           ` Benjamin Gaignard
2019-11-26 13:16 ` [PATCH 29/30] drm/bridge: add support for device links to bridge Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-26 14:35   ` Daniel Vetter
2019-11-26 14:35     ` Daniel Vetter
2019-11-26 15:55     ` Mihail Atanassov
2019-11-26 15:55       ` Mihail Atanassov
2019-11-28 15:33     ` Mihail Atanassov
2019-11-28 15:33       ` Mihail Atanassov
2019-11-26 13:16 ` [PATCH 30/30] drm/komeda: Use drm_bridge interface for pipe outputs Mihail Atanassov
2019-11-26 13:16   ` Mihail Atanassov
2019-11-26 15:27 ` [PATCH 00/30] drm/bridge: Add device links for lifetime control Russell King - ARM Linux admin
2019-11-26 15:27   ` Russell King - ARM Linux admin
2019-11-26 15:27   ` Russell King - ARM Linux admin
2019-11-26 15:55   ` Mihail Atanassov
2019-11-26 15:55     ` Mihail Atanassov
2019-11-26 15:55     ` Mihail Atanassov

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=CAKMK7uG2T9hPCsQ6yLekGoz5qA2-ePa2_MmsmQRBH5je+7Kaow@mail.gmail.com \
    --to=daniel@ffwll.ch \
    --cc=Mihail.Atanassov@arm.com \
    --cc=airlied@linux.ie \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=mripard@kernel.org \
    --cc=nd@arm.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 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.