summaryrefslogtreecommitdiff
path: root/src/flash/nand
diff options
context:
space:
mode:
authorJon Povey <jon.povey@racelogic.co.uk>2010-05-17 16:15:35 +0900
committerØyvind Harboe <oyvind.harboe@zylin.com>2010-05-18 09:23:48 +0200
commitfafed75d9831c8038c5504fc94e941f0ee9770e5 (patch)
tree838bcdf951c5b81d8277476b1146e2ae9c6b3c9c /src/flash/nand
parent3ecc191b361d913d3bdf156568454de57f093aee (diff)
downloadopenocd+libswd-fafed75d9831c8038c5504fc94e941f0ee9770e5.tar.gz
openocd+libswd-fafed75d9831c8038c5504fc94e941f0ee9770e5.tar.bz2
openocd+libswd-fafed75d9831c8038c5504fc94e941f0ee9770e5.tar.xz
openocd+libswd-fafed75d9831c8038c5504fc94e941f0ee9770e5.zip
NAND: catch read errors when building BBT
nand_build_bbt() was ignoring the return value from nand_read_page() and blindly continuing. It now passes the return value up to the caller if the read fails. Signed-off-by: Jon Povey <jon.povey@racelogic.co.uk>
Diffstat (limited to 'src/flash/nand')
-rw-r--r--src/flash/nand/core.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/flash/nand/core.c b/src/flash/nand/core.c
index 44b13ce1..b3220e2a 100644
--- a/src/flash/nand/core.c
+++ b/src/flash/nand/core.c
@@ -226,6 +226,7 @@ int nand_build_bbt(struct nand_device *nand, int first, int last)
int i;
int pages_per_block = (nand->erase_size / nand->page_size);
uint8_t oob[6];
+ int ret;
if ((first < 0) || (first >= nand->num_blocks))
first = 0;
@@ -236,7 +237,9 @@ int nand_build_bbt(struct nand_device *nand, int first, int last)
page = first * pages_per_block;
for (i = first; i <= last; i++)
{
- nand_read_page(nand, page, NULL, 0, oob, 6);
+ ret = nand_read_page(nand, page, NULL, 0, oob, 6);
+ if (ret != ERROR_OK)
+ return ret;
if (((nand->device->options & NAND_BUSWIDTH_16) && ((oob[0] & oob[1]) != 0xff))
|| (((nand->page_size == 512) && (oob[5] != 0xff)) ||