summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2009-10-05 10:12:57 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2009-10-05 10:14:41 +0200
commit16019c2ff98f1943de768a10f51b96d4993beadb (patch)
tree141d6faa7537af35909a9fa804ee878fe76df586 /drivers
parent762ba0dac53300e97cdfaa3819f570771b62c962 (diff)
downloadbarebox-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.c55
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;