Hi On Mon, Aug 4, 2025 at 11:22 AM Michael Nazzareno Trimarchi < mich...@amarulasolutions.com> wrote:
> Hi > > On Mon, Aug 4, 2025 at 11:21 AM Miquel Raynal <miquel.ray...@bootlin.com> > wrote: > >> Linux features a flash_speed speed test from the mtd-utils suite, U-Boot >> does not. Benchmarks are useful for speed improvement developments as >> well as troubleshooting or regression testing sometimes. >> >> Enable a benchmark option to enable this feature. >> >> Example of output on a Nuvoton platform: >> >> MA35D1> mtd read nor0 0x81000000 0 0x10000 >> Reading 65536 byte(s) at offset 0x00000000 >> MA35D1> mtd read.benchmark nor0 0x81000000 0 0x10000 >> Reading 65536 byte(s) at offset 0x00000000 >> Read speed: 3752kiB/s >> >> Signed-off-by: Miquel Raynal <miquel.ray...@bootlin.com> >> --- >> Changes in v2: >> * Use an unsigned long as advised by Michael for accounting time. >> --- >> cmd/mtd.c | 15 ++++++++++++++- >> 1 file changed, 14 insertions(+), 1 deletion(-) >> >> diff --git a/cmd/mtd.c b/cmd/mtd.c >> index c25997cfb246..2520b89eed2c 100644 >> --- a/cmd/mtd.c >> +++ b/cmd/mtd.c >> @@ -17,6 +17,7 @@ >> #include <malloc.h> >> #include <mapmem.h> >> #include <mtd.h> >> +#include <time.h> >> #include <dm/devres.h> >> #include <linux/err.h> >> >> @@ -466,8 +467,9 @@ static int mtd_special_write_oob(struct mtd_info >> *mtd, u64 off, >> static int do_mtd_io(struct cmd_tbl *cmdtp, int flag, int argc, >> char *const argv[]) >> { >> - bool dump, read, raw, woob, write_empty_pages, has_pages = false; >> + bool dump, read, raw, woob, benchmark, write_empty_pages, >> has_pages = false; >> u64 start_off, off, len, remaining, default_len; >> + unsigned long bench_start, bench_end; >> struct mtd_oob_ops io_op = {}; >> uint user_addr = 0, npages; >> const char *cmd = argv[0]; >> @@ -490,6 +492,7 @@ static int do_mtd_io(struct cmd_tbl *cmdtp, int flag, >> int argc, >> read = dump || !strncmp(cmd, "read", 4); >> raw = strstr(cmd, ".raw"); >> woob = strstr(cmd, ".oob"); >> + benchmark = strstr(cmd, ".benchmark"); >> write_empty_pages = !has_pages || strstr(cmd, ".dontskipff"); >> >> argc -= 2; >> @@ -559,6 +562,9 @@ static int do_mtd_io(struct cmd_tbl *cmdtp, int flag, >> int argc, >> >> led_activity_blink(); >> >> + if (benchmark) >> + bench_start = timer_get_us(); >> + >> /* Loop over the pages to do the actual read/write */ >> while (remaining) { >> /* Skip the block if it is bad */ >> @@ -586,6 +592,13 @@ static int do_mtd_io(struct cmd_tbl *cmdtp, int >> flag, int argc, >> io_op.oobbuf += io_op.oobretlen; >> } >> >> + if (benchmark && bench_start) { >> + bench_end = timer_get_us(); >> + printf("%s speed: %lukiB/s\n", >> + read ? "Read" : "Write", >> + ((io_op.len * 1000000) / (bench_end - >> bench_start)) / 1024); >> + } >> + >> > > Reviewed-by: Michael Trimarchi <mich...@amarulasolutions.com> > > >> led_activity_off(); >> >> if (!ret && dump) >> -- >> 2.50.1 >> >> > > Applied thanks Michael > -- > Michael Nazzareno Trimarchi > Co-Founder & Chief Executive Officer > M. +39 347 913 2170 > mich...@amarulasolutions.com > __________________________________ > > Amarula Solutions BV > Joop Geesinkweg 125, 1114 AB, Amsterdam, NL > T. +31 (0)85 111 9172 > i...@amarulasolutions.com > www.amarulasolutions.com > -- Michael Nazzareno Trimarchi Co-Founder & Chief Executive Officer M. +39 347 913 2170 mich...@amarulasolutions.com __________________________________ Amarula Solutions BV Joop Geesinkweg 125, 1114 AB, Amsterdam, NL T. +31 (0)85 111 9172 i...@amarulasolutions.com www.amarulasolutions.com