
On Sat, Aug 02, 2008 at 08:51:54PM -0400, Jerry Van Baren wrote:
Kumar Gala wrote:
On Jul 9, 2008, at 12:02 PM, Jerry Van Baren wrote:
Thinking out loud... we could define the syntax that a leading "*" indicates the first part of the path is a dereference of /aliases.
Assuming /aliases/soc = /soc8360@e000000 /aliases/ethernet0 = /soc8360@e0000000/.../enet0 then print *soc/enet0 and print *ethernet0 would both work and print the right thing. You *would* have to know that the first element of the path is an /aliases dereference. Your original patch did not require that piece of knowledge (but silently and automagically, which makes me nervous).
did we come to resolution on this? I'd like to see this in 1.3.5.
- k
Hi Kumar,
I think we have basic resolution - I would like to see it in 1.3.5 too. I haven't pushed on this, waiting for 1.3.5 window to open (or some free time, whichever comes last).
I've CC:ed David Gibson in case he has some advice - the concept is to indicate a dereference of /aliases nodes so that us lazy engineers don't have to cut'n'paste the whole long path from the alias. Kumar originally proposed to do it automagically and I countered proposing using "*" to indicate the next path name should be looked up in /aliases and the result used instead (i.e. dereferenced). Discussion thread: http://thread.gmane.org/gmane.comp.boot-loaders.u-boot/43575/focus=44941
No, I really don't think using this "dereference" character is a good idea. If you're going to expand aliases, you should do it as real OF does - see section 4.3 of IEEE1275. Essentially it's the *lack* of a leading '/' character that triggers alias expansion. So you could use e.g. /soc8360@e0000000/ethernet@e0000400 or soc/ethernet@e0000400 or ethernet0
Looking at the ieee1275 doc http://playground.sun.com/pub/1275/coredoc/1275-1994/1275.ps.gz it looks like "*" will work for a dereference delimiter as it is not listed as one of the permitted punctuation characters in a node name. Quoting 3.2.1.1 Node names:
The driver name field is a sequence of between one and 31 letters, digits, and punctuation characters from the set ", . _ + - ". Uppercase and lowercase characters are distinct.
We do have a problem with property names, where "*" _is_ a legal name component. Quoting 3.2.2.1.1 Property names:
The property name is a human-readable text string consisting of one to thirty-one printable characters. Property names shall not contain uppercase characters or the characters "/", "", ":", "[", "]" and "@".
Note that "*" is not proscribed, making it a legal character in a property name.
I've observed a '*' in the device tree in the wild - some Apple tree, unfortunately I can't find it right at the moment. So I can't check if the '*' was in a node node, making it IEEE1275 illegal, or in a property name. I remember thinking it was illegal at the time, but I thought '*' was invalid in property names too, which seems to have been a misinterpretation.
Having noted that, I'm willing to take the risk and use "*" for the "alias dereference" separator.
Looking back at the original patch, Kumar's original patch only did the /aliases dereference for the "fdt print" command. I'm thinking more general purpose: being able to dereference /aliases in all "fdt" commands. This seems helpful for the "fdt set" command, for instance. Whether this is reasonable to implement remains to be seen...
If you're interepreting them in one place, you should probably interpret them everywhwere and have a single "resolve pathname" function. In fact, I should quite possibly put such a function into libfdt.