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__
parent
0eb7fb59a0
commit
dcca0b7694
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue