diff options
author | Jon 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 |
commit | dcca0b7694d23dbee6f1554dfbc4bffc4bedb4f2 (patch) | |
tree | b251d235d15be84be9aed549d16b8f93cdc9c8ce /src | |
parent | 0eb7fb59a0afe9c82f1f3d3f88fb88e3f04d706a (diff) | |
download | openocd+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')
-rw-r--r-- | src/flash/nand/core.c | 8 |
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; |