On Mon, Aug 30, 2010 at 7:03 PM, Scott Wood <scottw...@freescale.com> wrote: > A while back, in http://lists.denx.de/pipermail/u-boot/2009-June/054428.html, > Michele De Candia posted a patch to not count bad blocks toward the > requested size to be erased. This is desireable when you're passing in > something like $filesize, but not when you're trying to erase a partition. > > Thus, a .spread subcommand (named for consistency with > http://lists.denx.de/pipermail/u-boot/2010-August/075163.html) is introduced > to make explicit the user's desire to erase for a given amount of data, > rather than to erase a specific region of the chip.
I'm flattered that you have chosen to use '.spread' > While passing $filesize to "nand erase" is useful, accidentally passing > something like $fliesize currently produces quite unpleasant results, as the > variable evaluates to nothing and U-Boot assumes that you want to erase > the entire rest of the chip/partition. To improve the safety of the > erase command, require the user to make explicit their intentions by > using a .part or .chip subcommand. This is an incompatible user interface > change, but keeping compatibility would eliminate the safety gain, and IMHO > it's worth it. Agreed. It also makes the arguments expected by the nand erase variants easier to understand for new users. > While touching nand_erase_opts(), make it accept 64-bit offsets and sizes, > fix the percentage display when erase length is rounded up, eliminate > an inconsistent warning about rounding up the erase length which only > happened when the length was less than one block (rounding up for $filesize > is normal operation), and add a diagnostic if there's an attempt to erase > beginning at a non-block boundary. > > Signed-off-by: Scott Wood <scottw...@freescale.com> applies to 962ad59e25640e586e2bceabf67a628a27f8f508 of git://git.denx.de/u-boot.git -- one checkpatch error Tested on da850evm_config with NAND enabled; Tested-by: Ben Gardiner <bengardi...@nanometrics.ca> > @@ -84,13 +84,19 @@ int nand_erase_opts(nand_info_t *meminfo, const > nand_erase_options_t *opts) > struct mtd_oob_ops oob_opts; > struct nand_chip *chip = meminfo->priv; > > + if ((opts->offset & (meminfo->writesize - 1)) != 0) { > + printf("Attempt to erase non page aligned data\n"); > + return -1; > + } > + > memset(&erase, 0, sizeof(erase)); > memset(&oob_opts, 0, sizeof(oob_opts)); > > erase.mtd = meminfo; > erase.len = meminfo->erasesize; > erase.addr = opts->offset; > - erase_length = opts->length; > + erase_length = lldiv(opts->length + meminfo->erasesize - 1, > + meminfo->erasesize); checkpatch is complaining: error: checkpatch: code indent should use tabs where possible drivers/mtd/nand/nand_util.c:99:1: +^I meminfo->erasesize);$ Best Regards, Ben Gardiner --- Nanometrics Inc. http://www.nanometrics.ca _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot