From: s.hauer@pengutronix.de (Sascha Hauer)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 7/8] mxc_nand: support 8bit ecc
Date: Fri, 6 Aug 2010 15:53:10 +0200 [thread overview]
Message-ID: <1281102791-8089-8-git-send-email-s.hauer@pengutronix.de> (raw)
In-Reply-To: <1281102791-8089-1-git-send-email-s.hauer@pengutronix.de>
Nand devices with at least 26 bytes of oob data per 512 byte block
can have 8bit ecc on v2 type controllers. This is currently not tested,
but at least this patch puts the ECC_MODE bit into a well defined state.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
drivers/mtd/nand/mxc_nand.c | 30 ++++++++++++++++++++++++++++++
1 files changed, 30 insertions(+), 0 deletions(-)
diff --git a/drivers/mtd/nand/mxc_nand.c b/drivers/mtd/nand/mxc_nand.c
index a6dc5a5..030da08 100644
--- a/drivers/mtd/nand/mxc_nand.c
+++ b/drivers/mtd/nand/mxc_nand.c
@@ -58,6 +58,7 @@
#define NFC_V1_V2_CONFIG1 (host->regs + 0x1a)
#define NFC_V1_V2_CONFIG2 (host->regs + 0x1c)
+#define NFC_V2_CONFIG1_ECC_MODE_4 (1 << 0)
#define NFC_V1_V2_CONFIG1_SP_EN (1 << 2)
#define NFC_V1_V2_CONFIG1_ECC_EN (1 << 3)
#define NFC_V1_V2_CONFIG1_INT_MSK (1 << 4)
@@ -581,6 +582,23 @@ static void mxc_do_addr_cycle(struct mtd_info *mtd, int column, int page_addr)
}
}
+/*
+ * v2 and v3 type controllers can do 4bit or 8bit ecc depending
+ * on how much oob the nand chip has. For 8bit ecc we need@least
+ * 26 bytes of oob data per 512 byte block.
+ */
+static int get_eccsize(struct mtd_info *mtd)
+{
+ int oobbytes_per_512 = 0;
+
+ oobbytes_per_512 = mtd->oobsize * 512 / mtd->writesize;
+
+ if (oobbytes_per_512 < 26)
+ return 4;
+ else
+ return 8;
+}
+
static void preset_v1_v2(struct mtd_info *mtd)
{
struct nand_chip *nand_chip = mtd->priv;
@@ -596,6 +614,15 @@ static void preset_v1_v2(struct mtd_info *mtd)
} else {
tmp &= ~NFC_V1_V2_CONFIG1_ECC_EN;
}
+
+ if (nfc_is_v21() && mtd->writesize) {
+ host->eccsize = get_eccsize(mtd);
+ if (host->eccsize == 4)
+ tmp |= NFC_V2_CONFIG1_ECC_MODE_4;
+ } else {
+ host->eccsize = 1;
+ }
+
writew(tmp, NFC_V1_V2_CONFIG1);
/* preset operation */
@@ -859,6 +886,9 @@ static int __init mxcnd_probe(struct platform_device *pdev)
goto escan;
}
+ /* Call preset again, with correct writesize this time */
+ host->preset(mtd);
+
if (mtd->writesize == 2048)
this->ecc.layout = oob_largepage;
--
1.7.1
next prev parent reply other threads:[~2010-08-06 13:53 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-06 13:53 Add i.MX51 support to mxc_nand Sascha Hauer
2010-08-06 13:53 ` [PATCH 1/8] mxc_nand: remove 0xe00 offset from registers Sascha Hauer
2010-08-06 13:53 ` [PATCH 2/8] mxc_nand: rework get_dev_status Sascha Hauer
2010-08-06 13:53 ` [PATCH 3/8] mxc_nand: make some internally used functions overwriteable Sascha Hauer
2010-08-06 13:53 ` [PATCH 4/8] mxc_nand: factor out a check_int function Sascha Hauer
2010-08-06 13:53 ` [PATCH 5/8] mxc_nand: add V1_V2 namespace to registers Sascha Hauer
2010-08-06 13:53 ` [PATCH 6/8] mxc_nand: fix correct_data function Sascha Hauer
2010-08-08 6:19 ` Baruch Siach
2010-08-08 20:44 ` Sascha Hauer
2010-08-08 8:19 ` Russell King - ARM Linux
2010-08-08 8:32 ` Baruch Siach
2010-08-08 20:43 ` Sascha Hauer
2010-08-08 22:10 ` Russell King - ARM Linux
2010-08-09 4:20 ` [PATCH] nand: fix .correct callback return value check Baruch Siach
2010-08-12 5:42 ` Baruch Siach
2010-08-29 11:01 ` Artem Bityutskiy
2010-08-06 13:53 ` Sascha Hauer [this message]
2010-08-06 13:53 ` [PATCH 8/8] mxc_nand: Add v3 (i.MX51) Support Sascha Hauer
2010-08-09 11:38 ` [PATCH 0/2] mxc_nand: fixes for purposed updates Baruch Siach
2010-08-09 11:38 ` [PATCH 1/2] mxc_nand: fix build error Baruch Siach
2010-08-09 12:28 ` Sascha Hauer
2010-08-09 11:38 ` [PATCH 2/2] mxc_nand: remove unused variables Baruch Siach
2010-08-09 12:34 ` Lothar Waßmann
2010-08-09 11:53 ` [PATCH 0/2] mxc_nand: fixes for purposed updates David Woodhouse
2010-08-09 12:19 ` Baruch Siach
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1281102791-8089-8-git-send-email-s.hauer@pengutronix.de \
--to=s.hauer@pengutronix.de \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).