* Re: [PATCH 01/13] media: v4l2-fwnode: Let parse_endpoint callback decide if no remote is error
[not found] ` <2571855.0gglA1aPyk@avalon>
@ 2018-02-23 10:14 ` Sakari Ailus
[not found] ` <1519384577.7712.4.camel@pengutronix.de>
1 sibling, 0 replies; 3+ messages in thread
From: Sakari Ailus @ 2018-02-23 10:14 UTC (permalink / raw)
To: Laurent Pinchart
Cc: Philipp Zabel, Steve Longerbeam, Yong Zhi, Sakari Ailus,
Mauro Carvalho Chehab, niklas.soderlund, Sebastian Reichel,
Hans Verkuil, linux-media, Steve Longerbeam, devicetree
Hi guys,
On Fri, Feb 23, 2018 at 12:05:38PM +0200, Laurent Pinchart wrote:
> Hi Philipp,
>
> On Friday, 23 February 2018 11:56:52 EET Philipp Zabel wrote:
> > On Fri, 2018-02-23 at 11:29 +0200, Laurent Pinchart wrote:
> > > On Thursday, 22 February 2018 03:39:37 EET Steve Longerbeam wrote:
> > >> For some subdevices, a fwnode endpoint that has no connection to a
> > >> remote endpoint may not be an error. Let the parse_endpoint callback
> > > make that decision in v4l2_async_notifier_fwnode_parse_endpoint(). If
> > >> the callback indicates that is not an error, skip adding the asd to the
> > >> notifier and return 0.
> > >>
> > >> For the current users of v4l2_async_notifier_parse_fwnode_endpoints()
> > >> (omap3isp, rcar-vin, intel-ipu3), return -EINVAL in the callback for
> > >> unavailable remote fwnodes to maintain the previous behavior.
> > >
> > > I'm not sure this should be a per-driver decision.
> > >
> > > Generally speaking, if an endpoint node has no remote-endpoint property,
> > > the endpoint node is not needed. I've always considered such an endpoint
> > > node as invalid. The OF graphs DT bindings are however not clear on this
> > > subject.
> >
> > Documentation/devicetree/bindings/graph.txt says:
> >
> > Each endpoint should contain a 'remote-endpoint' phandle property
> > that points to the corresponding endpoint in the port of the remote
> > device.
> >
> > ("should", not "must").
>
> The DT bindings documentation has historically used "should" to mean "must" in
> many places :-( That was a big mistake.
"Shall", not "must".
Indeed, there's hardly use for an endpoint without the remote-endpoint
property. My understanding is that such nodes might be best ignored, that's
been at least the practice in a lot of DT parsing code. There are arguments
both ways I guess.
What comes to this patch is that I'd rather not burden individual drivers
with such checks.
>
> > Later, the remote-node property explicitly lists the remote-endpoint
> > property as optional.
>
> I've seen that too, and that's why I mentioned that the documentation isn't
> clear on the subject.
>
> > > I have either failed to notice when they got merged, or they slowly
> > > evolved over time to contain contradictory information. In any case, I
> > > think we should decide on whether such a situation is valid or not from
> > > an OF graph point of view, and then always reject or always accept and
> > > ignore those endpoints.
> >
> > We are currently using this on i.MX6 to provide empty labeled endpoints
> > in the dtsi files for board DT writers to link to, both for the display
> > output and video capture ports.
> > See for example the endpoints with the labels ipu1_di0_disp0 and
> > ipu1_csi0_mux_from_parallel_sensor in arch/arm/boot/dts/imx6q.dtsi.
>
> This could also be achieved by adding the endpoints in the board DT files. See
> for instance the hdmi@fead0000 node in arch/arm64/boot/dts/renesas/
> r8a7795.dtsi and how it gets extended in arch/arm64/boot/dts/renesas/r8a7795-
> salvator-x.dts. On the other hand, I also have empty endpoints in the
> display@feb00000 node of arch/arm64/boot/dts/renesas/r8a7795.dtsi.
>
> I think we should first decide what we want to do going forward (allowing for
> empty endpoints or not), clarify the documentation, and then update the code.
> In any case I don't think it should be a per-device decision.
I don't think they should be allowed in the documentation. The
implementation could still simply ignore them.
Cc the devicetree list.
--
Regards,
Sakari Ailus
e-mail: sakari.ailus@iki.fi
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 01/13] media: v4l2-fwnode: Let parse_endpoint callback decide if no remote is error
[not found] ` <20180223124741.d4l4vjahe6beqe65@paasikivi.fi.intel.com>
@ 2018-02-27 9:13 ` Philipp Zabel
2018-02-27 9:53 ` Laurent Pinchart
0 siblings, 1 reply; 3+ messages in thread
From: Philipp Zabel @ 2018-02-27 9:13 UTC (permalink / raw)
To: Sakari Ailus
Cc: Laurent Pinchart, Steve Longerbeam, Yong Zhi,
Mauro Carvalho Chehab, niklas.soderlund, Sebastian Reichel,
Hans Verkuil, linux-media, Steve Longerbeam, devicetree
Hi Sakari,
On Fri, 2018-02-23 at 14:47 +0200, Sakari Ailus wrote:
> Hi Philipp,
>
> On Fri, Feb 23, 2018 at 12:16:17PM +0100, Philipp Zabel wrote:
> > Hi Laurent,
> >
> > On Fri, 2018-02-23 at 12:05 +0200, Laurent Pinchart wrote:
> > > Hi Philipp,
> > >
> > > On Friday, 23 February 2018 11:56:52 EET Philipp Zabel wrote:
> > > > On Fri, 2018-02-23 at 11:29 +0200, Laurent Pinchart wrote:
> > > > > On Thursday, 22 February 2018 03:39:37 EET Steve Longerbeam wrote:
> > > > > > For some subdevices, a fwnode endpoint that has no connection to a
> > > > > > remote endpoint may not be an error. Let the parse_endpoint callback
> > > > >
> > > > > make that decision in v4l2_async_notifier_fwnode_parse_endpoint(). If
> > > > > > the callback indicates that is not an error, skip adding the asd to the
> > > > > > notifier and return 0.
> > > > > >
> > > > > > For the current users of v4l2_async_notifier_parse_fwnode_endpoints()
> > > > > > (omap3isp, rcar-vin, intel-ipu3), return -EINVAL in the callback for
> > > > > > unavailable remote fwnodes to maintain the previous behavior.
> > > > >
> > > > > I'm not sure this should be a per-driver decision.
> > > > >
> > > > > Generally speaking, if an endpoint node has no remote-endpoint property,
> > > > > the endpoint node is not needed. I've always considered such an endpoint
> > > > > node as invalid. The OF graphs DT bindings are however not clear on this
> > > > > subject.
> > > >
> > > > Documentation/devicetree/bindings/graph.txt says:
> > > >
> > > > Each endpoint should contain a 'remote-endpoint' phandle property
> > > > that points to the corresponding endpoint in the port of the remote
> > > > device.
> > > >
> > > > ("should", not "must").
> > >
> > > The DT bindings documentation has historically used "should" to mean "must" in
> > > many places :-( That was a big mistake.
> >
> > Maybe I could have worded that better? The intention was to let "should"
> > be read as a strong suggestion, like "it is recommended", but not as a
> > requirement.
>
> Is there a reason for have an endpoint without a remote-endpoint property?
It allows to slightly reduce boilerplate in board device trees at the
cost of empty endpoint nodes included from the dtsi in board DTs that
don't use them.
> The problem with should (in general when it is used when the intention is
> "shall") is that it lets the developer to write broken DT source that is
> still conforming to the spec.
>
> I don't have a strong preference to change should to shall in this
> particular case now but I would have used "shall" to begin with.
I used "should" on purpose, but I'd be fine with giving up on it when
all current users of this loophole are transitioned away from it:
git grep -A1 "endpoint {" arch/ | grep -B1 "};"
I'm very much against enforcing a required remote-endpoint property in
core DT parsing code, though.
> > > > Later, the remote-node property explicitly lists the remote-endpoint
> > > > property as optional.
> > >
> > > I've seen that too, and that's why I mentioned that the documentation isn't
> > > clear on the subject.
> >
> > Do you have a suggestion how to improve the documentation? I thought
> > listing the remote-endpoint property under a header called "Optional
> > endpoint properties" was pretty clear.
> >
> > > This could also be achieved by adding the endpoints in the board DT files. See
> > > for instance the hdmi@fead0000 node in arch/arm64/boot/dts/renesas/
> > > r8a7795.dtsi and how it gets extended in arch/arm64/boot/dts/renesas/r8a7795-
> > > salvator-x.dts. On the other hand, I also have empty endpoints in the
> > > display@feb00000 node of arch/arm64/boot/dts/renesas/r8a7795.dtsi.
> >
> > Right, that would be possible.
> >
> > > I think we should first decide what we want to do going forward (allowing for
> > > empty endpoints or not), clarify the documentation, and then update the code.
> > > In any case I don't think it should be a per-device decision.
> >
> > There are device trees in the wild that have those empty endpoints, so I
> > don't think retroactively declaring the remote-endpoint property
> > required is a good idea.
>
> You could IMO, but the kernel (and existing drivers) would still need to
> work with DT binaries without those bits. And leave comments in the code
> why it's there.
>
> >
> > Is there any driver that currently benefits from throwing an error on
> > empty endpoints in any way? I'd prefer to just let the core ignore empty
> > endpoints for all drivers.
>
> Not necessarily, but it's overhead in parsing the DT as well as in the
> DT source and in the DT binary.
True. I suppose whether or not that is enough reason to change the
wording in the existing of-graph bindings is something to be decided on
the devicetree list (in Cc).
regards
Philipp
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 01/13] media: v4l2-fwnode: Let parse_endpoint callback decide if no remote is error
2018-02-27 9:13 ` Philipp Zabel
@ 2018-02-27 9:53 ` Laurent Pinchart
0 siblings, 0 replies; 3+ messages in thread
From: Laurent Pinchart @ 2018-02-27 9:53 UTC (permalink / raw)
To: Philipp Zabel
Cc: Sakari Ailus, Steve Longerbeam, Yong Zhi, Mauro Carvalho Chehab,
niklas.soderlund, Sebastian Reichel, Hans Verkuil, linux-media,
Steve Longerbeam, devicetree
Hi Philipp,
On Tuesday, 27 February 2018 11:13:04 EET Philipp Zabel wrote:
> On Fri, 2018-02-23 at 14:47 +0200, Sakari Ailus wrote:
> > On Fri, Feb 23, 2018 at 12:16:17PM +0100, Philipp Zabel wrote:
> >> On Fri, 2018-02-23 at 12:05 +0200, Laurent Pinchart wrote:
> >>> On Friday, 23 February 2018 11:56:52 EET Philipp Zabel wrote:
> >>>> On Fri, 2018-02-23 at 11:29 +0200, Laurent Pinchart wrote:
> >>>>> On Thursday, 22 February 2018 03:39:37 EET Steve Longerbeam wrote:
> >>>>>> For some subdevices, a fwnode endpoint that has no connection to
> >>>>>> a remote endpoint may not be an error. Let the parse_endpoint
> >>>>>> callback
> >>>>>
> >>>>> make that decision in v4l2_async_notifier_fwnode_parse_endpoint().
> >>>>> If
> >>>>>
> >>>>>> the callback indicates that is not an error, skip adding the asd
> >>>>>> to the notifier and return 0.
> >>>>>>
> >>>>>> For the current users of v4l2_async_notifier_parse_fwnode_endpoints()
> >>>>>> (omap3isp, rcar-vin, intel-ipu3), return -EINVAL in the callback
> >>>>>> for unavailable remote fwnodes to maintain the previous behavior.
> >>>>>
> >>>>> I'm not sure this should be a per-driver decision.
> >>>>>
> >>>>> Generally speaking, if an endpoint node has no remote-endpoint
> >>>>> property, the endpoint node is not needed. I've always considered such
> >>>>> an endpoint node as invalid. The OF graphs DT bindings are however not
> >>>>> clear on this subject.
> >>>>
> >>>> Documentation/devicetree/bindings/graph.txt says:
> >>>> Each endpoint should contain a 'remote-endpoint' phandle property
> >>>> that points to the corresponding endpoint in the port of the
> >>>> remote device.
> >>>>
> >>>> ("should", not "must").
> >>>
> >>> The DT bindings documentation has historically used "should" to mean
> >>> "must" in many places :-( That was a big mistake.
> >>
> >> Maybe I could have worded that better? The intention was to let "should"
> >> be read as a strong suggestion, like "it is recommended", but not as a
> >> requirement.
> >
> > Is there a reason for have an endpoint without a remote-endpoint property?
>
> It allows to slightly reduce boilerplate in board device trees at the
> cost of empty endpoint nodes included from the dtsi in board DTs that
> don't use them.
>
> > The problem with should (in general when it is used when the intention is
> > "shall") is that it lets the developer to write broken DT source that is
> > still conforming to the spec.
> >
> > I don't have a strong preference to change should to shall in this
> > particular case now but I would have used "shall" to begin with.
>
> I used "should" on purpose, but I'd be fine with giving up on it when
> all current users of this loophole are transitioned away from it:
>
> git grep -A1 "endpoint {" arch/ | grep -B1 "};"
>
> I'm very much against enforcing a required remote-endpoint property in
> core DT parsing code, though.
Just to make it clear, I'm fine with making the property either optional or
mandatory, but I would like the rule to be global, not per-bindings. When the
OF graphs bindings were developed we reasoned that there was no use for empty
endpoints and that they should thus be forbidden. Now, if we have good use
cases for empty endpoints, I don't object them.
Regardless of what we decide I agree that we need to support existing device
trees and must thus not reject empty endpoints as invalid. We could, however,
if we decide to forbid empty endpoints, print a warning to encourage DT
authors to fix the problem.
> >>>> Later, the remote-node property explicitly lists the remote-endpoint
> >>>> property as optional.
> >>>
> >>> I've seen that too, and that's why I mentioned that the documentation
> >>> isn't clear on the subject.
> >>
> >> Do you have a suggestion how to improve the documentation? I thought
> >> listing the remote-endpoint property under a header called "Optional
> >> endpoint properties" was pretty clear.
> >>
> >>> This could also be achieved by adding the endpoints in the board DT
> >>> files. See for instance the hdmi@fead0000 node in
> >>> arch/arm64/boot/dts/renesas/ r8a7795.dtsi and how it gets extended in
> >>> arch/arm64/boot/dts/renesas/r8a7795- salvator-x.dts. On the other
> >>> hand, I also have empty endpoints in the display@feb00000 node of
> >>> arch/arm64/boot/dts/renesas/r8a7795.dtsi.
> >>
> >> Right, that would be possible.
> >>
> >>> I think we should first decide what we want to do going forward
> >>> (allowing for empty endpoints or not), clarify the documentation, and
> >>> then update the code. In any case I don't think it should be a
> >>> per-device decision.
> >>
> >> There are device trees in the wild that have those empty endpoints, so I
> >> don't think retroactively declaring the remote-endpoint property
> >> required is a good idea.
> >
> > You could IMO, but the kernel (and existing drivers) would still need to
> > work with DT binaries without those bits. And leave comments in the code
> > why it's there.
> >
> >> Is there any driver that currently benefits from throwing an error on
> >> empty endpoints in any way? I'd prefer to just let the core ignore empty
> >> endpoints for all drivers.
> >
> > Not necessarily, but it's overhead in parsing the DT as well as in the
> > DT source and in the DT binary.
>
> True. I suppose whether or not that is enough reason to change the
> wording in the existing of-graph bindings is something to be decided on
> the devicetree list (in Cc).
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2018-02-27 9:52 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1519263589-19647-1-git-send-email-steve_longerbeam@mentor.com>
[not found] ` <3283028.CgXzGkPyKt@avalon>
[not found] ` <1519379812.7712.1.camel@pengutronix.de>
[not found] ` <2571855.0gglA1aPyk@avalon>
2018-02-23 10:14 ` [PATCH 01/13] media: v4l2-fwnode: Let parse_endpoint callback decide if no remote is error Sakari Ailus
[not found] ` <1519384577.7712.4.camel@pengutronix.de>
[not found] ` <20180223124741.d4l4vjahe6beqe65@paasikivi.fi.intel.com>
2018-02-27 9:13 ` Philipp Zabel
2018-02-27 9:53 ` Laurent Pinchart
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).