[U-Boot] [PATCH] spi: sf: add support for throughput mesurement of sf read/write

Mugunthan V N mugunthanvnm at ti.com
Tue Oct 27 14:54:23 CET 2015


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 <mugunthanvnm at ti.com>
---
 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



More information about the U-Boot mailing list