summaryrefslogtreecommitdiff
path: root/src/flash/nand
diff options
context:
space:
mode:
authorJon Povey <jon.povey@racelogic.co.uk>2010-05-13 18:31:42 +0900
committerØyvind Harboe <oyvind.harboe@zylin.com>2010-05-14 13:23:01 +0200
commitdcca0b7694d23dbee6f1554dfbc4bffc4bedb4f2 (patch)
treeb251d235d15be84be9aed549d16b8f93cdc9c8ce /src/flash/nand
parent0eb7fb59a0afe9c82f1f3d3f88fb88e3f04d706a (diff)
downloadopenocd+libswd-dcca0b7694d23dbee6f1554dfbc4bffc4bedb4f2.tar.gz
openocd+libswd-dcca0b7694d23dbee6f1554dfbc4bffc4bedb4f2.tar.bz2
openocd+libswd-dcca0b7694d23dbee6f1554dfbc4bffc4bedb4f2.tar.xz
openocd+libswd-dcca0b7694d23dbee6f1554dfbc4bffc4bedb4f2.zip
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>
Diffstat (limited to 'src/flash/nand')
-rw-r--r--src/flash/nand/core.c8
1 files changed, 5 insertions, 3 deletions
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;