flashcp

Jörn Engel joern at logfs.org
Thu Jul 19 18:13:39 EDT 2007


Please keep me on Cc:.  It is generally considered to be polite and
significantly reduces the chances of me missing a reply.

On Thu, 19 July 2007 23:08:21 +0200, Tobias Simon wrote:
> 
> > 1. You're off-by-one when (filestat.st_size % mtd.erasesize) yields
> > zero.
> Oops, you're right!
> 
> > 2. In principle the "patch" looks fine.  Except that it should be a
> > patch and probably follow kernel coding style or something similar.
> 
> --- mtd-utils-1.0.0/flashcp.c   2006-04-30 22:59:15.000000000 +0200
> +++ mtd-utils-1.0.0_new/flashcp.c       2007-07-19 22:57:25.000000000 +0200
> @@ -258,7 +258,14 @@
>  #warning "Check for smaller erase regions"
> 
>     erase.start = 0;
> -   erase.length = filestat.st_size & ~(mtd.erasesize - 1);
> +
> +   if (filestat.st_size % mtd.erasesize) {
> +      erase.length = filestat.st_size + mtd.erasesize - (filestat.st_size % 
> mtd.erasesize);
> +   }
> +   else {
> +      erase.length = filestat.st_size;
> +   }
> +

Still off-by-one and needlessly complicated.

	erase.length = (filestat.st_size / mtd.erasesize) * mtd.erasesize

This always rounds down, just like the current implementation.  Whether
rounding down is correct I don't know.  Maybe Josh does.

> The standard page/erase-size of the AT45DB642x Dataflash we use 
> (http://www.atmel.com/dyn/resources/prod_documents/doc3542.pdf) is 1056.
> Although it is configurable to 1024 by software, the atmel_mtd.c driver 
> (linux-2.6.21) uses 1056 as the erase size. The driver itself is full of odd 
> erase-sizes: 
> /*
>  * Detect and initialize DataFlash device:
>  *
>  *   Device      Density         ID code          #Pages PageSize  Offset
>  *   AT45DB011B  1Mbit   (128K)  xx0011xx (0x0c)    512    264      9
>  *   AT45DB021B  2Mbit   (256K)  xx0101xx (0x14)   1025    264      9
>  *   AT45DB041B  4Mbit   (512K)  xx0111xx (0x1c)   2048    264      9
>  *   AT45DB081B  8Mbit   (1M)    xx1001xx (0x24)   4096    264      9
>  *   AT45DB0161B 16Mbit  (2M)    xx1011xx (0x2c)   4096    528     10
>  *   AT45DB0321B 32Mbit  (4M)    xx1101xx (0x34)   8192    528     10
>  *   AT45DB0642  64Mbit  (8M)    xx111xxx (0x3c)   8192   1056     11
>  *   AT45DB1282  128Mbit (16M)   xx0100xx (0x10)  16384   1056     11
>  */

Not too odd.  Just the usual 8/256 bytes extra for OOB usage.

> ------------------------------------------------------------------------
> Important Note: This e-mail and any attachments are confidential, may contain 
> trade secrets and may well also be legally privileged or otherwise protected 
> from disclosure. If you have received it in error, you are on notice of its 
> status. Please notify us immediately by reply e-mail and then delete this 
> e-mail and any attachment from your system. If you are not the intended 
> recipient please understand that you must not copy this e-mail or any 
> attachments or disclose the contents to any other person. Thank you.

Such a disclaimer will make most people simply ignore you.  If I hadn't
already answered most of your mail before seeing this I would have as
well.

Jörn

-- 
Happiness isn't having what you want, it's wanting what you have.
-- unknown



More information about the linux-mtd mailing list