Hi Thierry, On 26 August 2014 09:33, Thierry Reding <thierry.red...@gmail.com> wrote: > > From: Thierry Reding <tred...@nvidia.com> > > Provide a new modifier to vsprintf() to print phys_addr_t variables to > avoid having to cast or #ifdef when printing them out. The %pa modifier > is used for this purpose, so phys_addr_t variables need to be passed by > reference, like so: > > phys_addr_t start = 0; > > printf("start: %pa\n", &start); > > Depending on the size of phys_addr_t this will print out the address > with 8 or 16 hexadecimal digits following a 0x prefix.
Would it be better to use %#pa to get the 0x prefix so we have the option? Hex is the default in U-Boot. > > Signed-off-by: Thierry Reding <tred...@nvidia.com> > --- > lib/vsprintf.c | 16 ++++++++++++++-- > 1 file changed, 14 insertions(+), 2 deletions(-) > > diff --git a/lib/vsprintf.c b/lib/vsprintf.c > index 7ec758e40fc5..044d5551bdd0 100644 > --- a/lib/vsprintf.c > +++ b/lib/vsprintf.c > @@ -518,6 +518,8 @@ static char *ip4_addr_string(char *buf, char *end, u8 > *addr, int field_width, > static char *pointer(const char *fmt, char *buf, char *end, void *ptr, > int field_width, int precision, int flags) > { > + u64 num = (uintptr_t)ptr; > + Will this impact code size much? I suppose it is vsprintf() so it doesn't matter too much? > /* > * Being a boot loader, we explicitly allow pointers to > * (physical) address null. > @@ -530,6 +532,17 @@ static char *pointer(const char *fmt, char *buf, char > *end, void *ptr, > > #ifdef CONFIG_CMD_NET > switch (*fmt) { > + case 'a': > + flags |= SPECIAL | ZEROPAD; > + > + switch (fmt[1]) { > + case 'p': > + default: > + field_width = sizeof(phys_addr_t) * 2 + 2; > + num = *(phys_addr_t *)ptr; > + break; > + } > + break; > case 'm': > flags |= SPECIAL; > /* Fallthrough */ > @@ -555,8 +568,7 @@ static char *pointer(const char *fmt, char *buf, char > *end, void *ptr, > field_width = 2*sizeof(void *); > flags |= ZEROPAD; > } > - return number(buf, end, (unsigned long)ptr, 16, field_width, > - precision, flags); > + return number(buf, end, num, 16, field_width, precision, flags); > } > > static int vsnprintf_internal(char *buf, size_t size, const char *fmt, > -- > 2.0.4 > Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot