NAND: fix first and last handling in nand_build_bbt

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 <jon.povey@racelogic.co.uk>
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
__archive__
Jon Povey 2010-05-13 18:31:42 +09:00 committed by Øyvind Harboe
parent 0eb7fb59a0
commit dcca0b7694
1 changed files with 5 additions and 3 deletions

View File

@ -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;