Hi

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

Il lun 4 ago 2025, 11:15 Miquel Raynal <miquel.ray...@bootlin.com> ha
scritto:

> Hello Michael,
>
> >> 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
> >>
> >
> > I was using time and reading but this looked much nicer. I will give it
> a try
> > and review.
>
> Thanks! It turned out very useful for development purposes :-)
>
> >> Signed-off-by: Miquel Raynal <miquel.ray...@bootlin.com>
> >> ---
>
> [...]
>
> >> -       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;
> >>         struct mtd_oob_ops io_op = {};
> >>         uint user_addr = 0, npages;
> >> +       u32 bench_start, bench_end;
> >
> > unsigned long
>
> Okay.
>
> >>         const char *cmd = argv[0];
> >>         struct mtd_info *mtd;
> >>         u32 oob_len;
> >> @@ -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);
> >
> > Did you check if it can not wrap?
>
> That is a good question, if my calculations are correct, time capture
> may wrap if one spends more than 1h12 in the Bootloader. So yes it is
> 'doable' to make the time overlap.
>
> But is this relevant? It really is a development feature at the moment
> (developers comparing speeds would notice the overlap) and Bootloaders
> in general are not supposed to run for that long anyway. So I would
> argue that it is acceptable like that.
>

No was not. Because we run 10 seconds test

Michael

>
> Thanks,
> Miquèl
>

Reply via email to