[U-Boot] flash erasing: len alignment

Mike Frysinger vapier at gentoo.org
Thu Dec 11 10:31:34 CET 2008


the different flash subsystems dont exactly all operate the same, specifically 
when it comes to erasing.  some require you to specify lengths that are 
aligned exactly to the erase sector size whereas others are much more 
intelligent: they automatically round up for you.  is there any real arguments 
for a particular method ?

personally, i prefer the latter behavior as it makes scripting a hell of a lot 
easier.  for example, if i want to load a binary file into a flash, the 
loading process (i.e. tftp) will automatically set $(filesize) which i can 
then use as the erase/write length.  otherwise i need to either manually do 
the rounding up based on sector size, or i have to assume ahead of time that 
the file will never exceed a certain max size and use that hardcoded value 
(which leads to wasted time erasing sectors that never actually get used and 
unable to use the same code across multiple platforms).

here's an example change to the SPI flash driver:
--- a/u-boot-2008.10/drivers/mtd/spi/stmicro.c
+++ b/u-boot-2008.10/drivers/mtd/spi/stmicro.c
@@ -262,12 +262,12 @@ int stmicro_erase(struct spi_flash
 
 	sector_size = stm->params->page_size * stm->params->pages_per_sector;
 
-	if (offset % sector_size || len % sector_size) {
+	if (offset % sector_size) {
 		debug("SF: Erase offset/length not multiple of sector size\n");
 		return -1;
 	}
 
-	len /= sector_size;
+	len = len / sector_size + !!(len % sector_size);
 	cmd[0] = CMD_M25PXX_SE;
 	cmd[2] = 0x00;
 	cmd[3] = 0x00;
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 835 bytes
Desc: This is a digitally signed message part.
Url : http://lists.denx.de/pipermail/u-boot/attachments/20081211/ba1a2e9c/attachment.pgp 


More information about the U-Boot mailing list