rkflash: Check bad block mark in spare 1st and 2nd byte
Change-Id: I60bb761d1f7a015c76939db165c53bf53bd514cf Signed-off-by: Jon Lin <jon.lin@rock-chips.com>
This commit is contained in:
parent
03d86fc3c0
commit
2ac88c1bbc
|
|
@ -742,7 +742,7 @@ u32 sfc_nand_check_bad_block(u8 cs, u32 addr)
|
||||||
(gp_page_buf[data_size / 4] & 0xFF));
|
(gp_page_buf[data_size / 4] & 0xFF));
|
||||||
|
|
||||||
/* Original bad block */
|
/* Original bad block */
|
||||||
if ((gp_page_buf[data_size / 4] & 0xFF) != 0xFF)
|
if ((gp_page_buf[data_size / 4] & 0xFFFF) != 0xFFFF)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
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)
|
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 bad_cnt, page;
|
||||||
u32 blk_per_die;
|
u32 blk_per_die;
|
||||||
u32 *pread;
|
u16 blk;
|
||||||
|
|
||||||
rkflash_print_info("%s\n", __func__);
|
rkflash_print_info("%s\n", __func__);
|
||||||
pread = ftl_malloc(SFC_NAND_PAGE_MAX_SIZE);
|
|
||||||
|
|
||||||
if (!pread)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
bad_cnt = 0;
|
bad_cnt = 0;
|
||||||
blk_per_die = p_nand_info->plane_per_die *
|
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++) {
|
for (blk = 0; blk < blk_per_die; blk++) {
|
||||||
page = (blk + blk_per_die * die) *
|
page = (blk + blk_per_die * die) *
|
||||||
p_nand_info->page_per_blk;
|
p_nand_info->page_per_blk;
|
||||||
sfc_nand_read_page_raw(0, page, (u32 *)pread);
|
|
||||||
|
|
||||||
if (pread[0] != 0xff ||
|
if (sfc_nand_check_bad_block(die, page)) {
|
||||||
pread[SFC_NAND_SECTOR_SIZE * sec_per_page] != 0xFF) {
|
|
||||||
table[bad_cnt++] = blk;
|
table[bad_cnt++] = blk;
|
||||||
rkflash_print_error("die[%d], bad_blk[%d]\n", die, blk);
|
rkflash_print_error("die[%d], bad_blk[%d]\n", die, blk);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ftl_free(pread);
|
|
||||||
|
|
||||||
return (int)bad_cnt;
|
return (int)bad_cnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue