From 2ac88c1bbc5a062944d9d27b5681a6aec850f95f Mon Sep 17 00:00:00 2001 From: Jon Lin Date: Wed, 16 Sep 2020 10:55:44 +0800 Subject: [PATCH] rkflash: Check bad block mark in spare 1st and 2nd byte Change-Id: I60bb761d1f7a015c76939db165c53bf53bd514cf Signed-off-by: Jon Lin --- drivers/rkflash/sfc_nand.c | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/drivers/rkflash/sfc_nand.c b/drivers/rkflash/sfc_nand.c index 60dbf6d559..ee77b1f225 100644 --- a/drivers/rkflash/sfc_nand.c +++ b/drivers/rkflash/sfc_nand.c @@ -742,7 +742,7 @@ u32 sfc_nand_check_bad_block(u8 cs, u32 addr) (gp_page_buf[data_size / 4] & 0xFF)); /* Original bad block */ - if ((gp_page_buf[data_size / 4] & 0xFF) != 0xFF) + if ((gp_page_buf[data_size / 4] & 0xFFFF) != 0xFFFF) return true; return false; @@ -790,17 +790,11 @@ int sfc_nand_read_id(u8 *data) */ static int sfc_nand_get_bad_block_list(u16 *table, u32 die) { - u32 sec_per_page = p_nand_info->sec_per_page; - u16 blk; u32 bad_cnt, page; u32 blk_per_die; - u32 *pread; + u16 blk; rkflash_print_info("%s\n", __func__); - pread = ftl_malloc(SFC_NAND_PAGE_MAX_SIZE); - - if (!pread) - return -1; bad_cnt = 0; blk_per_die = p_nand_info->plane_per_die * @@ -809,17 +803,13 @@ static int sfc_nand_get_bad_block_list(u16 *table, u32 die) for (blk = 0; blk < blk_per_die; blk++) { page = (blk + blk_per_die * die) * p_nand_info->page_per_blk; - sfc_nand_read_page_raw(0, page, (u32 *)pread); - if (pread[0] != 0xff || - pread[SFC_NAND_SECTOR_SIZE * sec_per_page] != 0xFF) { + if (sfc_nand_check_bad_block(die, page)) { table[bad_cnt++] = blk; rkflash_print_error("die[%d], bad_blk[%d]\n", die, blk); } } - ftl_free(pread); - return (int)bad_cnt; }