summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/arm/imx-common/cmd_writebcb_mx7.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/arch/arm/imx-common/cmd_writebcb_mx7.c b/arch/arm/imx-common/cmd_writebcb_mx7.c
index 326ed6ec7d..4267cd7546 100644
--- a/arch/arm/imx-common/cmd_writebcb_mx7.c
+++ b/arch/arm/imx-common/cmd_writebcb_mx7.c
@@ -372,19 +372,27 @@ static void create_dbbt(nand_info_t *nand, uint8_t *buf)
static void write_bootloader(nand_info_t *nand, uint8_t * addr, loff_t off,
ulong fw_size)
{
- int i, j, ret;
+ int i, j, ret = 0;
size_t maxsize;
unsigned used_page_size, used_page_size_tmp;
- ret = 0;
used_page_size = 3 * nand->writesize / 4;
maxsize = nand->writesize;
- for (i = 0, j = 0; i < fw_size;
- i += used_page_size, j += nand->writesize) {
+ for (i = 0, j = 0; i < fw_size; j += nand->writesize) {
used_page_size_tmp = used_page_size;
- ret |= nand_write_skip_bad(nand, off + j, &used_page_size_tmp,
+ ret = nand_write_skip_bad(nand, off + j, &used_page_size_tmp,
NULL, maxsize, (u_char *)addr + i,
WITH_WR_VERIFY);
+
+ /* Increment only if data have been written */
+ i += used_page_size_tmp;
+
+ /* Ignore EFBIG, it means that we hit a bad block... */
+ if (ret == -EFBIG)
+ ret = 0;
+
+ if (ret)
+ break;
}
printf("Bootloader %d bytes written to 0x%x: %s\n", (int)fw_size,
(int) off, ret ? "ERROR" : "OK");