[U-Boot-Users] libfdt release?

Jerry Van Baren gerald.vanbaren at smiths-aerospace.com
Fri Oct 12 13:58:28 CEST 2007


David Gibson wrote:
> On Thu, Oct 11, 2007 at 07:35:45PM -0400, Jerry Van Baren wrote:

[snip]

>>>>> * Add some utilities to manipulate the reserved memory map. (think
>>>>> your recent patch my cover that)
>>>> Should do.
>>>>
>>>>> * libfdt: Make fdt_check_header() public
>>>> Hrm.  Why?
>>> Jerry?
>> Because we needed to check the validity of the header outside of libfdt 
>> and decide whether we wanted to use the blob or not.
> 
> That seems reasonable.  I'll look at exporting that.  Although.. I'm a
> little surprised that u-boot doesn't just to an fdt_open_into() as the
> first thing, which would include the check.

Yes, that would be the alternative, but fdt_open_into() potentially 
changes things (copies the blob) and doing an fdt_open_into() just to 
check the validity of the header is not intuitive.

While it is true that, by giving the same start and end address, you can 
avoid doing the actual copy, it isn't obvious that the read/write 
doesn't actually occur if source == dest... the code goes through all 
the motions and relies on the underlying memory utility library to short 
circuit the actual operation.  If the underlying memory utility library 
*doesn't* short circuit the operation, we could have severe problems 
with blobs that are burned into flash (potential write protection 
exceptions).

I submit that is a lot of ugly to avoid a simple export of an already 
existing, useful, function.

>>>>> * libfdt: Enhanced and published fdt_next_tag()
>>>> Hrm.  I'm not categorically opposed to publishing fdt_next_tag(), but
>>>> I'm disinclined to do so without good reason.
>>> Jerry?
>>>
>>> Hopefully Jerry will comment on why the additions were made to u-boot.
>> I needed it to implement my u-boot "fdt print" command, to step through 
>> the tags so I could print them out in a human readable format (it 
>> actually is dtc-input-compatible and, in most cases, matches the 
>> original dtc input source code).
> 
> Hrm, I see.  For debugging purposes, essentially.
> 
> I have been thinking for some time that I needed to add user-accesible
> traversal functions - I just haven't managed to come up with an
> interface I like, yet.

More than debugging purposes, the "fdt print" command is extremely 
useful for the u-boot command line to see what you have to start with, 
figure out what parameters need to be modified, and format a correct 
string to do the modification.  This is doubly important when the blob 
was created /n/ steps before you got it (a board manufacturer, reseller, 
or some poor luser) and you have no clue what the blob is to start with.

It would be very useful for the kernel as well, to implement the /proc 
blob display.  Again, on the face of it, your "debugging purposes" would 
apply, but it is essential debugging, not nicety debugging.  I suspect 
kernel developers are going to be a lot happier getting an ascii dump of 
/proc/fdt/asciiblob (sorry, forgot where it lives) than a mime encoded 
binary lump that they then have to decode (only to find out that the 
poor luser didn't dd or mime encode it properly).

In common/cmd_fdt.c line 551 (line 601 is where the traversal starts) 
you can see how I used it to walk through the blob:
<http://www.denx.de/cgi-bin/gitweb.cgi?p=u-boot.git;a=blob;f=common/cmd_fdt.c;h=571b8f14d56f3bc97dcd49eb8465cfdc9988d786;hb=HEAD#l551>

IMHO it is an ideal user-accessible traversal function.  It is simple 
yet sufficient.  It does what you need with very little fuss required of 
the user, yet it can be used in lots of unexpected ways (that's a *good* 
thing here).  For instance, in my "print" example, I add a looping 
construct with a nesting depth variable and viola, an elegant print 
function that can start anywhere in the blob, print out a syntactically 
correct ASCII representation, etc. etc.

Thanks,
gvb




More information about the U-Boot mailing list