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>
This commit is contained in:
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)
|
int nand_build_bbt(struct nand_device *nand, int first, int last)
|
||||||
{
|
{
|
||||||
uint32_t page = 0x0;
|
uint32_t page;
|
||||||
int i;
|
int i;
|
||||||
|
int pages_per_block = (nand->erase_size / nand->page_size);
|
||||||
uint8_t oob[6];
|
uint8_t oob[6];
|
||||||
|
|
||||||
if ((first < 0) || (first >= nand->num_blocks))
|
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))
|
if ((last >= nand->num_blocks) || (last == -1))
|
||||||
last = nand->num_blocks - 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);
|
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;
|
nand->blocks[i].is_bad = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
page += (nand->erase_size / nand->page_size);
|
page += pages_per_block;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
|
|
Loading…
Reference in New Issue