From: Jerry Van Baren <gerald.vanbaren@smiths-aerospace.com>
To: u-boot@lists.denx.de
Subject: [U-Boot-Users] RFA & Update: Using libfdt in u-boot for fdt command
Date: Thu, 01 Mar 2007 09:01:24 -0500 [thread overview]
Message-ID: <45E6DCB4.3080106@smiths-aerospace.com> (raw)
Hi all,
This is a Request for Advice.
First off, for those on both the u-boot and linuxppc-dev lists, sorry
for cross posting. :-)
Git repo pointers...
libfdt hacks:
<http://www.cideas.us/cgi-bin/gitweb.cgi?p=linux/libfdt.git;a=summary>
u-boot hacks:
<http://www.cideas.us/cgi-bin/gitweb.cgi?p=u-boot/u-boot-mpc83xx;a=summary>
I have a proof-of-concept (actually, somewhat more than PoC) fdt command
built using libfdt. Now I'm looking for advice on the best way to turn
the PoC into Real Code[tm].
Current commands:
-----------------
fdt address - set the base address of the blob
fdt get <property> - get a property
fdt print <node> - print the subtree starting at <node>[1]
Planned commands:
-----------------
fdt set <property> <value> - set a property value (do we want an
"=" as in <property> = <value>?)
fdt ?synthesize? - create the "chosen" branch and optionally the
u-boot variables branch. The OF code/calls
currently in bootm would be moved to this
command. I'm open to suggestions for a good
subcommand name.
Other commands:
---------------
fdt node <name> - create a node that can then be populated with
properties (have not thought about this in any detail yet).
[1] If <node> is actually a <property> (which is a usage error, but I
expect will happen all the time), "fdt print" actually does a "fdt get
<property>" This makes "fdt get" redundant and likely will make it go away.
Philosophy question primarily for David Gibson and Wolfgang Denk: What
is the best way to integrate libfdt with u-boot? Currently it is in its
own git repository. Options?
1) Do we want to capture the source in the u-boot git repository? If
so, it becomes a snapshot and will require cross pushing/pulling between
the libfdt repo and the u-boot repo or they will drift apart. However,
it makes problems #1 and #2 (below) simpler to solve but causes drift.
2) Not capturing libfdt in the u-boot repo makes it more difficult for
integrating it with and maintaining it in u-boot, I'm not sure how to
actually do it in a useful/usable manner.
There are three problem areas with libfdt:
1) The official Makefile is stand-alone which doesn't work well with
u-boot. I took the expedient route for the PoC of simply replacing it
with a u-boot style Makefile from a different lib* subdirectory. There
should be a better way.
2) The official libfdt uses two header files that are not in u-boot. I
"fixed" this by substituting u-boot headers with equivalent functionality.
* I need to address this and see what the best compromise for header
files is...
a) If the u-boot headers are acceptable for the stand-alone version
of libfdt, that would be the simplest.
b) It may be more effective to add the necessary linux headers to
u-boot.
c) We could use #ifdefs to conditionally include the right files. (but
does u-boot have a distinctive configuration def? Probably...)
3) I added a "fdt_next_tag()" function to fdt_ro.c to allow me to step
through the blob's tags:
uint32_t fdt_next_tag(const void *fdt, int offset,
int *nextoffset, char **namep);
This is similar to "_fdt_next_tag()" (a "private" function, note the
leading underscore) in fdt.c, but with a related but different purpose -
the "_fdt_next_tag()" steps through _node_ tags (skipping property
tags) where I need to step through all tags sequentially.
Usability trivia for David: libfdt distinguishes between nodes and
properties, which makes sense since that is how the fdt is structured.
From a usability standpoint, however, it is annoying to have to
separate the property name from the node, find the node, then find the
property. I will probably create Yet Another Function:
int fdt_split(char *path, char **property);
Call it with a path string and the function will separate it into the
node portion and the property name. If the path is invalid, it will
return an error. If the path is a node, it will set **property to NULL
and return the node's offset. If the path is a property, it will return
the owning node's offset and set the **property pointer to point to the
start of the property portion of the path (i.e. the next character after
the last '/').
If you got this far, thank you for your attention. :-)
Best regards,
gvb
next reply other threads:[~2007-03-01 14:01 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-03-01 14:01 Jerry Van Baren [this message]
2007-03-01 23:49 ` [U-Boot-Users] RFA & Update: Using libfdt in u-boot for fdt command Mark A. Greer
2007-03-02 1:17 ` Jerry Van Baren
2007-03-02 20:53 ` Mark A. Greer
2007-03-02 1:55 ` David Gibson
2007-03-02 4:08 ` Jerry Van Baren
2007-03-02 4:48 ` David Gibson
2007-03-02 5:25 ` Jerry Van Baren
2007-03-02 5:36 ` David Gibson
2007-03-02 12:31 ` Jerry Van Baren
2007-03-02 18:35 ` Jerry Van Baren
2007-03-02 22:31 ` David Gibson
2007-03-02 18:38 ` Jerry Van Baren
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=45E6DCB4.3080106@smiths-aerospace.com \
--to=gerald.vanbaren@smiths-aerospace.com \
--cc=u-boot@lists.denx.de \
/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