From 1a36b157baa77d34014e6be9f62b79e0fea98033 Mon Sep 17 00:00:00 2001 From: Jon Lin Date: Mon, 9 Aug 2021 18:15:28 +0800 Subject: [PATCH] drivers: rkflash: Add retry after flash buffer bitflip We found that this abnormality exists not only in power lost, but also in extreme environments during normal use, so the retry mechanism is added. Change-Id: Iaaa84a099c575dde833f6806036ea216ab98fe54 Signed-off-by: Jon Lin --- drivers/rkflash/sfc_nand.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/drivers/rkflash/sfc_nand.c b/drivers/rkflash/sfc_nand.c index 75b8b44e5548..34b967076a68 100644 --- a/drivers/rkflash/sfc_nand.c +++ b/drivers/rkflash/sfc_nand.c @@ -762,15 +762,16 @@ u32 sfc_nand_prog_page_raw(u8 cs, u32 addr, u32 *p_page_buf) sfc_request(&op, plane, p_page_buf, page_size); /* - * At the moment of power lost, flash maybe work in a unkonw state - * and result in bit flip, when this situation is detected by cache - * recheck, it's better to wait a second for a reliable hardware - * environment to avoid abnormal data written to flash array. + * At the moment of power lost or dev running in harsh environment, flash + * maybe work in a unkonw state and result in bit flip, when this situation + * is detected by cache recheck, it's better to wait a second for a reliable + * hardware environment to avoid abnormal data written to flash array. */ sfc_nand_read_cache(addr, (u32 *)sfc_nand_dev.recheck_buffer, 0, data_area_size); if (memcmp(sfc_nand_dev.recheck_buffer, p_page_buf, data_area_size)) { rkflash_print_error("%s cache bitflip1\n", __func__); msleep(1000); + sfc_request(&op, plane, p_page_buf, page_size); } op.sfcmd.d32 = 0;