From dcca0b7694d23dbee6f1554dfbc4bffc4bedb4f2 Mon Sep 17 00:00:00 2001 From: Jon Povey Date: Thu, 13 May 2010 18:31:42 +0900 Subject: NAND: fix first and last handling in nand_build_bbt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Last block was being skipped, fix by changing the loop test from "<" to "<=" First block argument was ignored, always started from block 0 (and counted the wrong blocks as bad if first was nonzero). Now we use it. Signed-off-by: Jon Povey Signed-off-by: Øyvind Harboe --- src/flash/nand/core.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'src/flash/nand') diff --git a/src/flash/nand/core.c b/src/flash/nand/core.c index e7634916..44b13ce1 100644 --- a/src/flash/nand/core.c +++ b/src/flash/nand/core.c @@ -222,8 +222,9 @@ COMMAND_HELPER(nand_command_get_device, unsigned name_index, int nand_build_bbt(struct nand_device *nand, int first, int last) { - uint32_t page = 0x0; + uint32_t page; int i; + int pages_per_block = (nand->erase_size / nand->page_size); uint8_t oob[6]; if ((first < 0) || (first >= nand->num_blocks)) @@ -232,7 +233,8 @@ int nand_build_bbt(struct nand_device *nand, int first, int last) if ((last >= nand->num_blocks) || (last == -1)) last = nand->num_blocks - 1; - for (i = first; i < last; i++) + page = first * pages_per_block; + for (i = first; i <= last; i++) { nand_read_page(nand, page, NULL, 0, oob, 6); @@ -248,7 +250,7 @@ int nand_build_bbt(struct nand_device *nand, int first, int last) nand->blocks[i].is_bad = 0; } - page += (nand->erase_size / nand->page_size); + page += pages_per_block; } return ERROR_OK; -- cgit v1.2.3