From: Magnus Lilja <lilja.magnus@gmail.com>
Date: Sun, 17 Jan 2010 16:46:10 +0000 (+0100)
Subject: MXC: Add large page oob layout for i.MX31 NAND controller.
X-Git-Tag: v2025.01-rc5-pxa1908~20529^2~1
X-Git-Url: http://git.dujemihanovic.xyz/html/%7B%7B%20.RelPermalink%20%7D%7D?a=commitdiff_plain;h=c4832dffff20519e72879a8da010174ac0526141;p=u-boot.git

MXC: Add large page oob layout for i.MX31 NAND controller.

Import the large page oob layout from Linux mxc_nand.c driver.

The CONFIG_SYS_NAND_LARGEPAGE option is used to activate
the large page oob layout. Run time detection is not supported
as this moment.

This has been tested on the i.MX31 PDK board with a large
page NAND device.

Signed-off-by: Magnus Lilja <lilja.magnus@gmail.com>
---

diff --git a/drivers/mtd/nand/mxc_nand.c b/drivers/mtd/nand/mxc_nand.c
index fc111b5bb6..b2b612e3a4 100644
--- a/drivers/mtd/nand/mxc_nand.c
+++ b/drivers/mtd/nand/mxc_nand.c
@@ -149,6 +149,13 @@ static struct nand_ecclayout nand_soft_eccoob = {
 };
 #endif
 
+static struct nand_ecclayout nand_hw_eccoob_largepage = {
+	.eccbytes = 20,
+	.eccpos = {6, 7, 8, 9, 10, 22, 23, 24, 25, 26,
+		   38, 39, 40, 41, 42, 54, 55, 56, 57, 58},
+	.oobfree = {{2, 4}, {11, 10}, {27, 10}, {43, 10}, {59, 5}, }
+};
+
 #ifdef CONFIG_MX27
 static int is_16bit_nand(void)
 {
@@ -902,7 +909,12 @@ int board_nand_init(struct nand_chip *this)
 	if (is_16bit_nand())
 		this->options |= NAND_BUSWIDTH_16;
 
+#ifdef CONFIG_SYS_NAND_LARGEPAGE
+	host->pagesize_2k = 1;
+	this->ecc.layout = &nand_hw_eccoob_largepage;
+#else
 	host->pagesize_2k = 0;
+#endif
 
 	return err;
 }