devicetree-compiler.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: David Gibson <david@gibson.dropbear.id.au>
To: Ayush Singh <ayush@beagleboard.org>
Cc: d-gole@ti.com, lorforlinux@beagleboard.org,
	jkridner@beagleboard.org, robertcnelson@beagleboard.org,
	nenad.marinkovic@mikroe.com, Andrew Davis <afd@ti.com>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Robert Nelson <robertcnelson@gmail.com>,
	devicetree-compiler@vger.kernel.org
Subject: Re: [PATCH 1/2] libfdt: overlay: Allow resolving phandle symbols
Date: Mon, 23 Sep 2024 13:41:15 +1000	[thread overview]
Message-ID: <ZvDjW7W1096FW8XL@zatzit.fritz.box> (raw)
In-Reply-To: <705b181e-2242-431f-bb6f-c00e178aa602@beagleboard.org>

[-- Attachment #1: Type: text/plain, Size: 8390 bytes --]

On Fri, Sep 20, 2024 at 10:04:56PM +0530, Ayush Singh wrote:
> On 9/18/24 08:06, David Gibson wrote:
> 
> > On Mon, Sep 16, 2024 at 03:10:52PM +0530, Ayush Singh wrote:
> > > On 9/12/24 09:08, David Gibson wrote:
> > > 
> > > > On Mon, Sep 09, 2024 at 12:54:34PM +0530, Ayush Singh wrote:
> > > > > On 9/9/24 10:33, David Gibson wrote:
> > > > > 
> > > > > > On Mon, Sep 02, 2024 at 05:47:55PM +0530, Ayush Singh wrote:
> > > > > > > Add ability to resolve symbols pointing to phandles instead of strings.
> > > > > > > 
> > > > > > > Combining this with existing fixups infrastructure allows creating
> > > > > > > symbols in overlays that refer to undefined phandles. This is planned to
> > > > > > > be used for addon board chaining [1].
> > > > > > I don't think this "autodetection" of whether the value is a phandle
> > > > > > or path is a good idea.  Yes, it's probably unlikely to get it wrong
> > > > > > in practice, but sloppy cases like this have a habit of coming back to
> > > > > > bite you later on.  If you want this, I think you need to design a new
> > > > > > way of encoding the new options.
> > > > > Would something like `__symbols_phandle__` work?
> > > > Preferable to the overloaded values in the original version, certainly.
> > > I can whip it up if that would be sufficient. But if we are talking about
> > > any big rewrite, well, I would like to get the details for that sorted out
> > > first.
> > Fair enough.
> > 
> > > > > It should be fairly
> > > > > straightforward to do. I am not sure how old devicetree compilers will react
> > > > > to it though?
> > > > Well, the devicetree compiler itself never actually looks at the
> > > > overlay encoding stuff.  The relevant thing is libfdt's overlay
> > > > application logic... and any other implementations of overlay handling
> > > > that are out there.
> > > > 
> > > > At which I should probably emphasize that changes to the overlay
> > > > format aren't really mine to approve or not.  It's more or less an
> > > > open standard, although not one with a particularly formal definition.
> > > > Of course, libfdt's implementation - and therefore I - do have a fair
> > > > bit of influence on what's considered the standard.
> > > So do I need to start a discussion for this somewhere other than the
> > > devicetree-compiler mailing list? Since ZephyrRTOS is also using devicetree,
> > > maybe things need to be discussed with them as well?
> > <devicetree-spec@vger.kernel.org> and <devicetree@vger.kernel.org> are
> > the obvious candidate places.  There will be substantial overlap with
> > devicetree-compiler of course, but not total probably.
> > 
> > > > > I really do not think having a different syntax for phandle symbols would be
> > > > > good since that would mean we will have 2 ways to represent phandles:
> > > > > 
> > > > > 1. For __symbols__
> > > > > 
> > > > > 2. For every other node.
> > > > I'm really not sure what you're getting at here.
> > > I just meant that I would like to keep the syntax the same:
> > > 
> > > sym = <&abc>;
> > Ok, the syntax for creating them in dts, rather than the encoding
> > within the dtb.  Why are you manually creating symbols?
> > 
> > So.. aside from all the rest, I don't really understand why you want
> > to encode the symbols as phandles rather than paths.
> 
> It's for connector stacking using the approach described here [0].

Thanks for the link.

> To go into more detail, let us assume that we have a mikrobus connector on
> the base board. We connect an addon board that exposes a grove connector.
> Now to describe the parent i2c adapter of the grove connector, we cannot
> really specify the full node path. However, having support for phandles
> would make writing the overlay for such an addon board possible.
> 
> In practice it might look as follows:
> 
> 
> mikrobus-connector.dtso
> 
> 
> &{/} {
> 
>    __symbols__ {
> 
>         MIKROBUS_SCL_I2C = "path";
> 
>         ...
> 
>     };
> 
> }
> 
> 
> grove-connector-addon.dtso
> 
> 
> &{/} {
> 
>     __symbols__ {
> 
>         GROVE_PIN1_I2C = <&MIKROBUS_SCL_I2C>;
> 
>     };
> 
> };

So, essentially you're just adding new labels as aliases to existing
labels?

Ok, I can see at least two ways of doing that which I think are a more
natural fit than allowing symbols to be phandles.

# Method 1: Allow path references in overlays

dts allows references both in integer context:
	foo = <&bar>;
in which case it resolves to a phandle, but also in string/bytestring context:
	foo = &bar;
In which case it resolves to a path.

Runtime overlays, only support the former, but could be extended to
support the latter form.  It would be a trickier than phandle
references, because updating a path reference would require expanding
/ shrinking the property including it, but I don't think it's super
difficult.

It might be somewhat harder to imlpement than your original proposal,
but it's conceptually simpler and more versatile.  In fact it removes
a currently existing asymmetry between what dts and overlays can do.

# Method 2: /aliases

/__symbols__ is very similar to the much older IEEE1275 concept of
/aliases.  In fact they're encoded identically except for appearing in
/aliases instead of /__symbols__.  The original use for these was in
interactive Open Firmware, so you could type, say, "dev hd" instead of
"dev /pci@XXXXXXXX/scsi@X,Y/lun@XX/..." or whatever path the primary
hard disk had.  Arguably, __symbols__ should never have been invented,
and we should have just used /aliases.  This is the kind of thing I
mean when I say they overlay encoding wasn't very well thought out.

But, here's the thing:

a) aliases can be defined in terms of other aliases:

	aliases {
		scsi0 = "/pci@XXXXX/pci-bridge@X,Y/scsi@X,Y";
		hd = "scsi0/lun@YY";
	}

b) fdt_path_offset() already resolves aliases

If given a path without a leading '/', it will look up the first
component as an alias, then look up the rest of the path relative to
that.

So, in your example, if the base layer defined MIKROBUS_SCL_I2C as
an alias rather than a symbol, then in the next layer you could have:

&{/} {
     	aliases {
		GROVE_PIN1_I2C = "MIKROBUS_SCL_I2C";
	}
}

libfdt should already resolve this when applying overlays, because it
just calls fdt_path_offset().

So your only remainingly difficulty is /aliases versus /__symbols__.
It would be fairly simple to make overlay application expand
__symbols__ in much the same way as aliases.  Or, you could just have
a copy of everything in __symbols__ in aliases as well (which might be
a path to eventually deprecating /__symbols__).  dtc already has the
-A flag which will but all labels into /aliases, very much like -@
will put them all in /__symbols__.

[snip]
> Well, a lot of work is still going in this direction [1]. I myself
> am trying to use it for mikroBUS connectors.

Sure, and I can see why: it seems tantalizingly close to working
simply.  But that doesn't mean it won't have limitations that will
bite you down the track.

> The reason for using devicetree overlays for such connectors is
> because of their loose nature (mikroBUS is also open
> connector). This means that as long as the sensor/ device can make
> do with the pins provided by mikroBUS connector, it can be an addon
> board. And there is no limitation of staking the boards. So one can
> do rpi hat -> mikrbus connectors -> grove connector -> grove some
> addon board.

For example, the very fact that these are loose exposes you to one
pretty obvious limitation here.  Suppose some future board has a
connector with enough pins that you can hang two independent grove
connectors off it, and someone makes a hat/shield/whatever that does
exactly that.  But now the grove addon dtbs need to be different
depending on whether they attach to grove connector 1 or grove
connector 2.

The old "connector binding" proposals I was describing aimed to
decouple the type of the connector from the instance of the connector
for exactly this sort of case.

-- 
David Gibson (he or they)	| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you, not the other way
				| around.
http://www.ozlabs.org/~dgibson

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2024-09-23  3:41 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-02 12:17 [PATCH 0/2] Add support for phandle in symbols Ayush Singh
2024-09-02 12:17 ` [PATCH 1/2] libfdt: overlay: Allow resolving phandle symbols Ayush Singh
2024-09-09  5:03   ` David Gibson
2024-09-09  7:24     ` Ayush Singh
2024-09-12  3:38       ` David Gibson
2024-09-16  9:40         ` Ayush Singh
2024-09-18  2:36           ` David Gibson
2024-09-20 16:34             ` Ayush Singh
2024-09-23  3:41               ` David Gibson [this message]
2024-09-23  8:22                 ` Geert Uytterhoeven
2024-09-23  8:38                   ` David Gibson
2024-09-23  9:12                     ` Geert Uytterhoeven
2024-09-23  9:48                       ` David Gibson
2024-11-13  9:46                         ` Ayush Singh
2024-10-06  5:13                       ` Ayush Singh
2024-09-24  6:41                 ` Ayush Singh
2024-09-25  7:28                   ` David Gibson
2024-09-25  7:58                     ` Geert Uytterhoeven
2024-09-26  3:51                       ` David Gibson
2024-10-03  7:35                     ` Ayush Singh
2024-09-02 12:17 ` [PATCH 2/2] tests: Add test for symbol resolution Ayush Singh
2024-09-05 14:37   ` Andrew Davis
2024-09-05 14:35 ` [PATCH 0/2] Add support for phandle in symbols Andrew Davis

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=ZvDjW7W1096FW8XL@zatzit.fritz.box \
    --to=david@gibson.dropbear.id.au \
    --cc=afd@ti.com \
    --cc=ayush@beagleboard.org \
    --cc=d-gole@ti.com \
    --cc=devicetree-compiler@vger.kernel.org \
    --cc=geert@linux-m68k.org \
    --cc=jkridner@beagleboard.org \
    --cc=lorforlinux@beagleboard.org \
    --cc=nenad.marinkovic@mikroe.com \
    --cc=robertcnelson@beagleboard.org \
    --cc=robertcnelson@gmail.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).