changeset 56:d9a8dfe4cd72

Correct the calculation of the block number to erase. The use of ">> 5" to calculate the block number from the chunk number was incorrect for the actual value of PAGES_PER_BLOCK (64). At the same time, make this less error prone.
author luc
date Mon, 01 Aug 2005 21:48:41 +0100
parents f79e2c26f741
children c522b6a79f29
files mtdemul/nandemul2k.c
diffstat 1 files changed, 7 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/mtdemul/nandemul2k.c
+++ b/mtdemul/nandemul2k.c
@@ -44,13 +44,14 @@
 
 
 
-#define EM_SIZE_IN_MEG 4
-#define PAGE_DATA_SIZE  (2048)
+#define NAND_SHIFT      (11)   // Shifter for 2k
+#define PAGE_DATA_SIZE  (1 << NAND_SHIFT)
 #define PAGE_SPARE_SIZE (64)
-#define PAGES_PER_BLOCK (64)
-#define NAND_SHIFT      (11)   // Shifter for 2k
+#define BLK_SHIFT	6
+#define PAGES_PER_BLOCK (1 << BLK_SHIFT)	// = 64
 
 
+#define EM_SIZE_IN_MEG 4
 #define EM_SIZE_IN_BYTES (EM_SIZE_IN_MEG * (1<<20))
 
 #define PAGE_TOTAL_SIZE (PAGE_DATA_SIZE+PAGE_SPARE_SIZE)
@@ -557,8 +558,8 @@ static int nand_erase (struct mtd_info *
 		return -EINVAL;
 	}
 
-	nBlocks = instr->len >> (NAND_SHIFT + 5);
-	block = instr->addr >> (NAND_SHIFT + 5);
+	nBlocks = instr->len >> (NAND_SHIFT + BLK_SHIFT);
+	block = instr->addr >> (NAND_SHIFT + BLK_SHIFT);
 
 	for(i = 0; i < nBlocks; i++)
 	{