This patch adds time measurement and throughput calculation for sf read/write commands.
The output of sf read changes from ---8<--- SF: 4096 bytes @ 0x0 Read: OK --->8--- to ---8<--- SF: 4096 bytes @ 0x0 Read: OK in 6 ms (666 KiB/s) --->8--- Signed-off-by: Mugunthan V N <[email protected]> --- common/cmd_sf.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/common/cmd_sf.c b/common/cmd_sf.c index ac7f5df..8687f3a 100644 --- a/common/cmd_sf.c +++ b/common/cmd_sf.c @@ -15,6 +15,7 @@ #include <spi_flash.h> #include <jffs2/jffs2.h> #include <linux/mtd/mtd.h> +#include <linux/math64.h> #include <asm/io.h> #include <dm/device-internal.h> @@ -266,6 +267,7 @@ static int do_spi_flash_read_write(int argc, char * const argv[]) int ret = 1; int dev = 0; loff_t offset, len, maxsize; + unsigned long time; if (argc < 3) return -1; @@ -298,17 +300,27 @@ static int do_spi_flash_read_write(int argc, char * const argv[]) int read; read = strncmp(argv[0], "read", 4) == 0; + + time = get_timer(0); if (read) ret = spi_flash_read(flash, offset, len, buf); else ret = spi_flash_write(flash, offset, len, buf); + time = get_timer(time); printf("SF: %zu bytes @ %#x %s: ", (size_t)len, (u32)offset, read ? "Read" : "Written"); - if (ret) + if (ret) { printf("ERROR %d\n", ret); - else - printf("OK\n"); + } else { + printf("OK in %lu ms", time); + if (time > 0) { + puts(" ("); + print_size(div_u64(len, time) * 1000, "/s"); + puts(")"); + } + puts("\n"); + } } unmap_physmem(buf, len); -- 2.6.2.280.g74301d6 _______________________________________________ U-Boot mailing list [email protected] http://lists.denx.de/mailman/listinfo/u-boot

