Hi Boris,

Boris Brezillon <boris.brezil...@bootlin.com> wrote on Thu, 12 Jul 2018
00:42:13 +0200:

> On Wed, 11 Jul 2018 17:25:28 +0200
> Miquel Raynal <miquel.ray...@bootlin.com> wrote:
> 
> > +
> > +static void mtd_show_device(struct mtd_info *mtd)
> > +{
> > +   printf("* %s", mtd->name);  
> 
> Printing the device type might be interesting? And maybe also the size,
> writesize, oobsize and erasesize?

Absolutely.

> 
> > +   if (mtd->dev)
> > +           printf(" [device: %s] [parent: %s] [driver: %s]",
> > +                  mtd->dev->name, mtd->dev->parent->name,
> > +                  mtd->dev->driver->name);
> > +
> > +   printf("\n");
> > +}  

[...]

> > +   } else if (!strcmp(cmd, "erase")) {
> > +           bool scrub = strstr(cmd, ".dontskipbad");
> > +           bool full_erase = strstr(cmd, ".chip");  
> 
> Again, I think .chip extension is not needed. Just consider a full erase
> is requested when offset and length are not provided. Plus, chip is
> misleading since I guess mtd partitions are also exposed as mtd devices,
> and could thus be erased with the .chip extension as well.

".chip" removed.

Default now is mtd->size (the entire MTD device) for erase/read/write,
and mtd->writesize (a page) for a dump.

> 
> > +           struct erase_info erase_op = {};
> > +           u64 off, len;
> > +
> > +           off = argc > 0 ? simple_strtoul(argv[0], NULL, 16) : 0;
> > +           len = argc > 1 ? simple_strtoul(argv[1], NULL, 16) : 
> > mtd->erasesize;  
> 
> Hm. Are we sure we want the default to be 1 eraseblock? Shouldn't we
> consider that missing size means "erase up to the MTD device end". Same
> goes for the read/write accesses, but maybe not for dump where dumping
> a single page makes more sense.

See above.

> 
> > +
> > +           if (full_erase) {
> > +                   off = 0;
> > +                   len = mtd->size;
> > +           }
> > +
> > +           if ((u32)off % mtd->erasesize) {  
> 
> Sounds dangerous. We have 8GB NANDs on sunxi platforms...

[...]

> > +
> > +           if ((u32)len % mtd->erasesize) {  
> 
> Same here. I guess there's a do_div() in uboot.

In both cases I take the less significant bytes of a 64-bit value. The
modulo operation is safe as long as mtd->erasesize is a 32-bit value
too. I don't think there is any danger?

[...]

Thanks,
Miquèl
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to