From fafed75d9831c8038c5504fc94e941f0ee9770e5 Mon Sep 17 00:00:00 2001
From: Jon Povey <jon.povey@racelogic.co.uk>
Date: Mon, 17 May 2010 16:15:35 +0900
Subject: 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>
---
 src/flash/nand/core.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

(limited to 'src/flash')

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)) ||
-- 
cgit v1.2.3