
Hi all,
after testing the recent U-Boot code on a couple of 405EP boards I noticed, that the memsize in the output of the "bdinfo" command is always 0x00000000.
This is caused by using 64 types and format directives in printf that only work when CFG_64BIT_VSPRINTF is defined.
So what's the best way to fix this? Here are four solutions. My favorite is no. 2.
1) Define CFG_64BIT_STRTOUL for all effected board. Currently all 405 boards have memsize output as 0 in bdinfo.
2) Define CFG_64BIT_VSPRINTF and CFG_64BIT_STRTOUL for all 4xx boards in include/ppc4xx.h:
diff --git a/include/ppc4xx.h b/include/ppc4xx.h index 59a3b06..f0dfa38 100644 --- a/include/ppc4xx.h +++ b/include/ppc4xx.h @@ -102,13 +102,14 @@
#endif /* 440EP/EPX 440GR/GRX 440SP/SPE 460EX/GT/SX 405EX*/
-#if defined(CONFIG_440) /* * Enable long long (%ll ...) printf format on 440 PPC's since most of * them support 36bit physical addressing */ #define CFG_64BIT_VSPRINTF #define CFG_64BIT_STRTOUL + +#if defined(CONFIG_440) #include <ppc440.h> #else #include <ppc405.h>
3) Generally define CFG_64BIT_VSPRINTF and CFG_64BIT_STRTOUL for all boards.
4) Use an (ugly) workaround in common/cmd_bdinfo.c:
static void print_lnum(const char *name, u64 value) { #ifdef CFG_64BIT_VSPRINTF printf ("%-12s= 0x%.8llX\n", name, value); #else u32 *value32 = (u32*)&value; if (value32[0]) printf ("%-12s= 0x%lX%.8lX\n", name, value32[0], value32[1]); else printf ("%-12s= 0x%.8lX\n", name, value32[1]); #endif }
So what do you think?
Matthias