[U-Boot] Inconsistency between $filesize and commands which accept numeric params

Ian Campbell ijc at hellion.org.uk
Tue Nov 4 16:48:55 CET 2014


On Tue, 2014-11-04 at 10:44 -0500, Tom Rini wrote:
> On Thu, Oct 30, 2014 at 03:32:58PM +0000, Ian Campbell wrote:
> > On Thu, 2014-10-30 at 16:21 +0100, Wolfgang Denk wrote:
> > > Dear Ian,
> > > 
> > > In message <1414677435.2064.34.camel at hellion.org.uk> you wrote:
> > > > It seems there is some inconsistency wrt number base between commands
> > > > which set $filesize in the env and the commands which might consume
> > > > them.
> > > 
> > > That would be bugs, then.
> > > 
> > > >         
> > > >         sun7i# load scsi 0 $fdt_addr_r dtbs/$fdtfile
> > > >         21639 bytes read in 191 ms (110.4 KiB/s)
> > > >         sun7i# printenv filesize
> > > >         filesize=5487
> > > >         
> > > > So filesize is in hex, but without an 0x prefix. But:
> > > 
> > > This is normal.  U-Boot uses hex input base by default.  All commands
> > > should take hex input; the only inglorious exception is the "sleep"
> > > command which takes decimal; numbers as arguments.
> > > 
> > > >         sun7i# fdt addr $fdt_addr_r 0x10000 
> > > >         sun7i# fdt set /chosen foo <$filesize>
> > > >         sun7i# fdt print /chosen foo          
> > > >         foo = <0x0000156f>
> > > >         
> > > > IOW the parameter to fdt set has been interpreted as a decimal.
> > > 
> > > That's a bug.
> > > 
> > > > So I'm not sure if the bug is that setenv_hex doesn't include the 0x, or
> > > 
> > > No 0x prefix should be needed anywhere.
> > > 
> > > > that fdt set interprets things as decimal by default instead of hex. Or
> > > > maybe there is no bug at all?
> > > 
> > > The bug is in fdt set, then.
> > > 
> > > 
> > > Thanks for pointing out!
> > 
> > Thanks for pointing me in the right direction. CCing the folks who
> > get_maintainers.pl tells me might be involved with common/cmd_fdt.c
> > 
> > Looks like the function which does this is fdt_parse_prop, which is
> > documented with:
> > /*
> >  * Parse the user's input, partially heuristic.  Valid formats:
> >  * <0x00112233 4 05>	- an array of cells.  Numbers follow standard
> >  *			C conventions.
> >  * [00 11 22 .. nn] - byte stream
> >  * "string"	- If the the value doesn't start with "<" or "[", it is
> >  *			treated as a string.  Note that the quotes are
> >  *			stripped by the parser before we get the string.
> > 
> > which is inconsistent with the "U-Boot uses hex input base by default"
> > mantra.
> 
> Because this is FDT centric and not U-Boot centric, yes?

I guess?

>   Since <decimal
> numbers> is a valid thing to do in an entry here.  I think the right
> answer is the more hacky sounding one of when you script using 'fdt set'
> you need to be mindful of the constraints on input that are imposed upon
> us by FDT.  <hex> is invalid but <0xhex> is what is expected.

The 0x prefix hack/trick is what I'm actually doing, but the maintainer
of our test system wanted some assurances that u-boot wasn't going to
change under our feet if someone fixed a bug.

Sounds like you are saying this is all working as designed, and there is
no bug, but I'll let Wolfgang and you thrash that out ;-).

Ian.



More information about the U-Boot mailing list