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>
int nand_build_bbt(struct nand_device *nand, int first, int last)
{
int nand_build_bbt(struct nand_device *nand, int first, int last)
{
+ int pages_per_block = (nand->erase_size / nand->page_size);
uint8_t oob[6];
if ((first < 0) || (first >= nand->num_blocks))
uint8_t oob[6];
if ((first < 0) || (first >= nand->num_blocks))
if ((last >= nand->num_blocks) || (last == -1))
last = nand->num_blocks - 1;
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);
{
nand_read_page(nand, page, NULL, 0, oob, 6);
nand->blocks[i].is_bad = 0;
}
nand->blocks[i].is_bad = 0;
}
- page += (nand->erase_size / nand->page_size);
+ page += pages_per_block;