diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2009-10-05 10:12:57 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2009-10-05 10:14:41 +0200 |
commit | 16019c2ff98f1943de768a10f51b96d4993beadb (patch) | |
tree | 141d6faa7537af35909a9fa804ee878fe76df586 /drivers | |
parent | 762ba0dac53300e97cdfaa3819f570771b62c962 (diff) | |
download | barebox-16019c2ff98f1943de768a10f51b96d4993beadb.tar.gz barebox-16019c2ff98f1943de768a10f51b96d4993beadb.tar.xz |
nand_imx_v2: Use generic bbt scan function
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/nand/nand_imx_v2.c | 55 |
1 files changed, 11 insertions, 44 deletions
diff --git a/drivers/nand/nand_imx_v2.c b/drivers/nand/nand_imx_v2.c index 6d85ae8d0c..51d6120f6f 100644 --- a/drivers/nand/nand_imx_v2.c +++ b/drivers/nand/nand_imx_v2.c @@ -745,26 +745,10 @@ static void mxc_nand_write_page(struct mtd_info *mtd, struct nand_chip *chip, memcpy32(oob_buf, chip->oob_poi, mtd->oobsize); } -/* Define some generic bad / good block scan pattern which are used - * while scanning a device for factory marked good / bad blocks. */ -static uint8_t scan_ff_pattern[] = { 0xff, 0xff }; - -static struct nand_bbt_descr smallpage_memorybased = { - .options = NAND_BBT_SCAN2NDPAGE, - .offs = 5, - .len = 1, - .pattern = scan_ff_pattern -}; - -static struct nand_bbt_descr largepage_memorybased = { - .options = 0, - .offs = 0, - .len = 2, - .pattern = scan_ff_pattern -}; - -/* Generic flash bbt decriptors -*/ +/* + * We must provide a private bbt decriptor, because the settings from + * the generic one collide with our ECC hardware. + */ static uint8_t bbt_pattern[] = { 'B', 'b', 't', '0' }; static uint8_t mirror_pattern[] = { '1', 't', 'b', 'B' }; @@ -825,29 +809,6 @@ static void __bare_init mxc_nand_set_datawidth(struct mtd_info *mtd, int datawid } #endif -static int mxc_nand_scan_bbt(struct mtd_info *mtd) -{ - struct nand_chip *nand_chip = mtd->priv; - - /* propagate ecc.layout to mtd_info */ - mtd->ecclayout = nand_chip->ecc.layout; - - /* use flash based bbt */ - nand_chip->bbt_td = &bbt_main_descr; - nand_chip->bbt_md = &bbt_mirror_descr; - - /* update flash based bbt */ - nand_chip->options |= NAND_USE_FLASH_BBT; - - if (!nand_chip->badblock_pattern) { - nand_chip->badblock_pattern = (mtd->writesize > 512) ? - &largepage_memorybased : &smallpage_memorybased; - } - - /* Build bad block table */ - return nand_scan_bbt(mtd, nand_chip->badblock_pattern); -} - static void mxc_nfc_init(struct imx_nand_host *host) { /* Disable interrupt */ @@ -914,7 +875,13 @@ static int __init imxnd_probe(struct device_d *dev) this->write_buf = mxc_nand_write_buf; this->read_buf = mxc_nand_read_buf; this->verify_buf = mxc_nand_verify_buf; - this->scan_bbt = mxc_nand_scan_bbt; + + /* use flash based bbt */ + this->bbt_td = &bbt_main_descr; + this->bbt_md = &bbt_mirror_descr; + + /* update flash based bbt */ + this->options |= NAND_USE_FLASH_BBT; host->regs = (void __iomem *)dev->map_base; |