diff --git a/drivers/rkflash/sfc_nand.c b/drivers/rkflash/sfc_nand.c index 0bc1c6b43fd7..ddb7861880f2 100644 --- a/drivers/rkflash/sfc_nand.c +++ b/drivers/rkflash/sfc_nand.c @@ -881,7 +881,9 @@ u32 sfc_nand_read_page(u8 cs, u32 addr, u32 *p_data, u32 *p_spare) u32 sec_per_page = p_nand_info->sec_per_page; u32 data_size = sec_per_page * SFC_NAND_SECTOR_SIZE; struct nand_mega_area *meta = &p_nand_info->meta; + int retries = 0; +retry: ret = sfc_nand_read_page_raw(cs, addr, gp_page_buf); memcpy(p_data, gp_page_buf, data_size); p_spare[0] = gp_page_buf[(data_size + meta->off0) / 4]; @@ -903,6 +905,10 @@ u32 sfc_nand_read_page(u8 cs, u32 addr, u32 *p_data, u32 *p_spare) if (p_spare) rkflash_print_hex("spare:", p_spare, 4, 2); + if (ret == SFC_NAND_ECC_ERROR && retries < 1) { + retries++; + goto retry; + } } return ret;