From a888b5b88f078c8aaf1772f4eaa48f9625e78983 Mon Sep 17 00:00:00 2001 From: Stefan Agner Date: Tue, 25 Oct 2016 19:00:14 -0700 Subject: nand: force BBT scan for controllers which need it Commit 35c204d8a9d0 ("nand: reinstate lazy bad block scanning") introduced lazy BBT scanning. However, some controller do parts of the initialization (mxs_nand.c) during scan_bbt, hence for those controllers the BBT must be scanned at initialization time. Signed-off-by: Stefan Agner Acked-by: Marcel Ziswiler --- drivers/mtd/nand/mxs_nand.c | 2 +- drivers/mtd/nand/nand_base.c | 5 +++++ include/linux/mtd/nand.h | 2 ++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/mtd/nand/mxs_nand.c b/drivers/mtd/nand/mxs_nand.c index 7f6351fa69..87c62c4bcb 100644 --- a/drivers/mtd/nand/mxs_nand.c +++ b/drivers/mtd/nand/mxs_nand.c @@ -1250,7 +1250,7 @@ int board_nand_init(struct nand_chip *nand) memset(&fake_ecc_layout, 0, sizeof(fake_ecc_layout)); nand->priv = nand_info; - nand->options |= NAND_NO_SUBPAGE_WRITE; + nand->options |= NAND_NO_SUBPAGE_WRITE | NAND_NEED_BBTSCAN; nand->cmd_ctrl = mxs_nand_cmd_ctrl; diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c index c0e381ad2d..cbe083f988 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c @@ -4256,6 +4256,11 @@ int nand_scan_tail(struct mtd_info *mtd) if (!mtd->bitflip_threshold) mtd->bitflip_threshold = mtd->ecc_strength; + if (chip->options & NAND_NEED_BBTSCAN) { + chip->options |= NAND_BBT_SCANNED; + return chip->scan_bbt(mtd); + } + return 0; } EXPORT_SYMBOL(nand_scan_tail); diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h index 528266b498..130c3ae79b 100644 --- a/include/linux/mtd/nand.h +++ b/include/linux/mtd/nand.h @@ -222,6 +222,8 @@ typedef enum { * before calling nand_scan_tail. */ #define NAND_BUSWIDTH_AUTO 0x00080000 +/* Chip needs BBT scan */ +#define NAND_NEED_BBTSCAN 0x00200000 /* Options set by nand scan */ /* bbt has already been read */ -- cgit v1.2.3