From 1fc1d9aed08f2b3366d634fda6712a710b2cff9a Mon Sep 17 00:00:00 2001 From: Giulio Benetti Date: Fri, 31 Jul 2009 17:30:34 -0500 Subject: [PATCH 1/2] add WATCHDOG_RESET() on nand write and read Signed-off-by: giulio.benetti@micronovasrl.com Acked-by: Wolfgang Denk Signed-off-by: Scott Wood --- drivers/mtd/nand/nand_util.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/mtd/nand/nand_util.c b/drivers/mtd/nand/nand_util.c index 694ead68a1..bec927706f 100644 --- a/drivers/mtd/nand/nand_util.c +++ b/drivers/mtd/nand/nand_util.c @@ -508,6 +508,8 @@ int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length, size_t block_offset = offset & (nand->erasesize - 1); size_t write_size; + WATCHDOG_RESET (); + if (nand_block_isbad (nand, offset & ~(nand->erasesize - 1))) { printf ("Skip bad block 0x%08llx\n", offset & ~(nand->erasesize - 1)); @@ -578,6 +580,8 @@ int nand_read_skip_bad(nand_info_t *nand, loff_t offset, size_t *length, size_t block_offset = offset & (nand->erasesize - 1); size_t read_length; + WATCHDOG_RESET (); + if (nand_block_isbad (nand, offset & ~(nand->erasesize - 1))) { printf ("Skipping bad block 0x%08llx\n", offset & ~(nand->erasesize - 1)); From 269610f6ba2e4a7bc27d2e53d43160614016964f Mon Sep 17 00:00:00 2001 From: Mingkai Hu Date: Thu, 30 Jul 2009 17:56:51 +0800 Subject: [PATCH 2/2] NAND boot: fix nand_load overlap issue The code copy data from NAND flash block by block, so when the data length isn't a whole-number multiple of the block size, it will overlap the rest space. Signed-off-by: Mingkai Hu Signed-off-by: Scott Wood --- nand_spl/nand_boot_fsl_elbc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nand_spl/nand_boot_fsl_elbc.c b/nand_spl/nand_boot_fsl_elbc.c index 0d0c44e1e3..7f14a6fe45 100644 --- a/nand_spl/nand_boot_fsl_elbc.c +++ b/nand_spl/nand_boot_fsl_elbc.c @@ -120,7 +120,7 @@ static void nand_load(unsigned int offs, int uboot_size, uchar *dst) pos += page_size; offs += page_size; - } while (offs & (block_size - 1)); + } while ((offs & (block_size - 1)) && (pos < uboot_size)); } }