Re: [U-Boot] [PATCH v3] lib: Add hexdump

2018-06-08 Thread Simon Glass
Hi,

On 5 June 2018 at 06:17, Alexey Brodkin  wrote:
> Often during debugging session it's very interesting to see
> what data we were dealing with. For example what we write or read
> to/from memory or peripherals.
>
> This change introduces functions that allow to dump binary
> data with one simple function invocation like:
> --->8
> print_hex_dump_bytes("", DUMP_PREFIX_OFFSET, buf, len);
> --->8
>
> which gives us the following:
> --->8
> : f2 b7 c9 88 62 61 75 64 72 61 74 65 3d 31 31 35  baudrate=115
> 0010: 32 30 30 00 62 6f 6f 74 61 72 67 73 3d 63 6f 6e  200.bootargs=con
> 0020: 73 6f 6c 65 3d 74 74 79 53 33 2c 31 31 35 32 30  sole=ttyS3,11520
> 0030: 30 6e 38 00 62 6f 6f 74 64 65 6c 61 79 3d 33 00  0n8.bootdelay=3.
> 0040: 62 6f 6f 74 66 69 6c 65 3d 75 49 6d 61 67 65 00  bootfile=uImage.
> 0050: 66 64 74 63 6f 6e 74 72 6f 6c 61 64 64 72 3d 39  fdtcontroladdr=9
> 0060: 66 66 62 31 62 61 30 00 6c 6f 61 64 61 64 64 72  ffb1ba0.loadaddr
> 0070: 3d 30 78 38 32 30 30 30 30 30 30 00 73 74 64 65  =0x8200.stde
> 0080: 72 72 3d 73 65 72 69 61 6c 30 40 65 30 30 32 32  rr=serial0@e0022
> 0090: 30 30 30 00 73 74 64 69 6e 3d 73 65 72 69 61 6c  000.stdin=serial
> 00a0: 30 40 65 30 30 32 32 30 30 30 00 73 74 64 6f 75  0@e0022000.stdou
> 00b0: 74 3d 73 65 72 69 61 6c 30 40 65 30 30 32 32 30  t=serial0@e00220
> 00c0: 30 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00  00..
> ...
> --->8
>
> Source of hexdump.c was copied from Linux kernel v4.7-rc2.
>
> Signed-off-by: Alexey Brodkin 
> Cc: Anatolij Gustschin 
> Cc: Mario Six 
> Cc: Simon Glass 
> Cc: Tom Rini 
> Cc: Stefan Roese 
>
> ---
>
> Build-tested by Travis CI, see https://travis-ci.org/abrodkin/u-boot.
>
> Changes v2 -> v3:
>  * Remove hexdump.h from common.h
>  * Drop verbose level argument from print_hex_dump()
>  * Update users of print_hex_dump() accordingly
>
> Changes v1 -> v2:
>  * Move hexdump definitions to a separate header.
>  * Move helper funcions to the header so they might be used even if
>CONFIG_HEXDUMP is not enabled and if not used they will not occupy
>extra bytes of memory being "static inline" ones.
>  * While at it replace its own hex_asc[], hex_asc_{lo|hi}() and
>pack_hex_byte() in lib/vsprintf.c with generic ones from hexdump.
>  * In print_hex_dump() revert back first parametr for debug level,
>otherwise existing users of the function will be broken.
>
>  drivers/mtd/ubi/attach.c|   2 +-
>  drivers/mtd/ubi/debug.c |   7 +-
>  drivers/mtd/ubi/debug.h |   6 +-
>  drivers/mtd/ubi/io.c|   7 +-
>  drivers/usb/gadget/f_mass_storage.c |   1 +
>  drivers/usb/gadget/storage_common.c |   4 +-
>  examples/api/Makefile   |   1 +
>  fs/ubifs/debug.c|   6 +-
>  fs/ubifs/scan.c |   3 +-
>  include/hexdump.h   |  91 +++
>  include/linux/compat.h  |   1 -
>  lib/Kconfig |   5 +
>  lib/Makefile|   1 +
>  lib/hexdump.c   | 245 
>  lib/vsprintf.c  |  18 +-
>  15 files changed, 369 insertions(+), 29 deletions(-)
>  create mode 100644 include/hexdump.h
>  create mode 100644 lib/hexdump.c

This code looks good but please add a test in test/

You could use print_ut.c as an example

Regards,
Simon
___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


[U-Boot] [PATCH v3] lib: Add hexdump

2018-06-05 Thread Alexey Brodkin
Often during debugging session it's very interesting to see
what data we were dealing with. For example what we write or read
to/from memory or peripherals.

This change introduces functions that allow to dump binary
data with one simple function invocation like:
--->8
print_hex_dump_bytes("", DUMP_PREFIX_OFFSET, buf, len);
--->8

which gives us the following:
--->8
: f2 b7 c9 88 62 61 75 64 72 61 74 65 3d 31 31 35  baudrate=115
0010: 32 30 30 00 62 6f 6f 74 61 72 67 73 3d 63 6f 6e  200.bootargs=con
0020: 73 6f 6c 65 3d 74 74 79 53 33 2c 31 31 35 32 30  sole=ttyS3,11520
0030: 30 6e 38 00 62 6f 6f 74 64 65 6c 61 79 3d 33 00  0n8.bootdelay=3.
0040: 62 6f 6f 74 66 69 6c 65 3d 75 49 6d 61 67 65 00  bootfile=uImage.
0050: 66 64 74 63 6f 6e 74 72 6f 6c 61 64 64 72 3d 39  fdtcontroladdr=9
0060: 66 66 62 31 62 61 30 00 6c 6f 61 64 61 64 64 72  ffb1ba0.loadaddr
0070: 3d 30 78 38 32 30 30 30 30 30 30 00 73 74 64 65  =0x8200.stde
0080: 72 72 3d 73 65 72 69 61 6c 30 40 65 30 30 32 32  rr=serial0@e0022
0090: 30 30 30 00 73 74 64 69 6e 3d 73 65 72 69 61 6c  000.stdin=serial
00a0: 30 40 65 30 30 32 32 30 30 30 00 73 74 64 6f 75  0@e0022000.stdou
00b0: 74 3d 73 65 72 69 61 6c 30 40 65 30 30 32 32 30  t=serial0@e00220
00c0: 30 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00  00..
...
--->8

Source of hexdump.c was copied from Linux kernel v4.7-rc2.

Signed-off-by: Alexey Brodkin 
Cc: Anatolij Gustschin 
Cc: Mario Six 
Cc: Simon Glass 
Cc: Tom Rini 
Cc: Stefan Roese 

---

Build-tested by Travis CI, see https://travis-ci.org/abrodkin/u-boot.

Changes v2 -> v3:
 * Remove hexdump.h from common.h
 * Drop verbose level argument from print_hex_dump()
 * Update users of print_hex_dump() accordingly

Changes v1 -> v2:
 * Move hexdump definitions to a separate header.
 * Move helper funcions to the header so they might be used even if
   CONFIG_HEXDUMP is not enabled and if not used they will not occupy
   extra bytes of memory being "static inline" ones.
 * While at it replace its own hex_asc[], hex_asc_{lo|hi}() and
   pack_hex_byte() in lib/vsprintf.c with generic ones from hexdump.
 * In print_hex_dump() revert back first parametr for debug level,
   otherwise existing users of the function will be broken.

 drivers/mtd/ubi/attach.c|   2 +-
 drivers/mtd/ubi/debug.c |   7 +-
 drivers/mtd/ubi/debug.h |   6 +-
 drivers/mtd/ubi/io.c|   7 +-
 drivers/usb/gadget/f_mass_storage.c |   1 +
 drivers/usb/gadget/storage_common.c |   4 +-
 examples/api/Makefile   |   1 +
 fs/ubifs/debug.c|   6 +-
 fs/ubifs/scan.c |   3 +-
 include/hexdump.h   |  91 +++
 include/linux/compat.h  |   1 -
 lib/Kconfig |   5 +
 lib/Makefile|   1 +
 lib/hexdump.c   | 245 
 lib/vsprintf.c  |  18 +-
 15 files changed, 369 insertions(+), 29 deletions(-)
 create mode 100644 include/hexdump.h
 create mode 100644 lib/hexdump.c

diff --git a/drivers/mtd/ubi/attach.c b/drivers/mtd/ubi/attach.c
index ba40e58e5133..b4ba339c804c 100644
--- a/drivers/mtd/ubi/attach.c
+++ b/drivers/mtd/ubi/attach.c
@@ -789,7 +789,7 @@ static int check_corruption(struct ubi_device *ubi, struct 
ubi_vid_hdr *vid_hdr,
ubi_dump_vid_hdr(vid_hdr);
pr_err("hexdump of PEB %d offset %d, length %d",
   pnum, ubi->leb_start, ubi->leb_size);
-   ubi_dbg_print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET, 32, 1,
+   ubi_dbg_print_hex_dump("", DUMP_PREFIX_OFFSET, 32, 1,
   ubi->peb_buf, ubi->leb_size, 1);
err = 1;
 
diff --git a/drivers/mtd/ubi/debug.c b/drivers/mtd/ubi/debug.c
index 412ea9f6f5a6..0a7427522cd5 100644
--- a/drivers/mtd/ubi/debug.c
+++ b/drivers/mtd/ubi/debug.c
@@ -5,6 +5,7 @@
  * Author: Artem Bityutskiy (Битюцкий Артём)
  */
 
+#include 
 #include 
 #include "ubi.h"
 #ifndef __UBOOT__
@@ -39,7 +40,7 @@ void ubi_dump_flash(struct ubi_device *ubi, int pnum, int 
offset, int len)
 
ubi_msg(ubi, "dumping %d bytes of data from PEB %d, offset %d",
len, pnum, offset);
-   print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET, 32, 1, buf, len, 1);
+   print_hex_dump("", DUMP_PREFIX_OFFSET, 32, 1, buf, len, 1);
 out:
vfree(buf);
return;
@@ -60,7 +61,7 @@ void ubi_dump_ec_hdr(const struct ubi_ec_hdr *ec_hdr)
pr_err("\timage_seq  %d\n", be32_to_cpu(ec_hdr->image_seq));
pr_err("\thdr_crc%#08x\n", be32_to_cpu(ec_hdr->hdr_crc));
pr_err("erase counter header hexdump:\n");
-   print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET, 32, 1,
+   print_hex_dump("", DUMP_PREFIX_OFFSET, 32, 1,