From: rnd4@dave-tech.it
To: linux-mtd@lists.infradead.org
Cc: boris.brezillon@free-electrons.com, Andrea Scian <andrea.scian@dave.eu>
Subject: [PATCH 2/2] mtd: nand: use nand_chip badblockbits when checking bad block pattern
Date: Fri, 6 Mar 2015 13:12:18 +0100 [thread overview]
Message-ID: <1425643938-24749-3-git-send-email-rnd4@dave-tech.it> (raw)
In-Reply-To: <1425643938-24749-1-git-send-email-rnd4@dave-tech.it>
From: Andrea Scian <andrea.scian@dave.eu>
Use nand_chip->badblockbits like it's used inside nand_base.c when scanning
bad block markers.
This is particularly useful when using MLC NAND
Signed-off-by: Andrea Scian <andrea.scian@dave.eu>
---
drivers/mtd/nand/nand_bbt.c | 19 ++++++++++++++++---
include/linux/mtd/bbm.h | 3 +++
2 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/drivers/mtd/nand/nand_bbt.c b/drivers/mtd/nand/nand_bbt.c
index 2672643..dba7f8b 100644
--- a/drivers/mtd/nand/nand_bbt.c
+++ b/drivers/mtd/nand/nand_bbt.c
@@ -127,9 +127,21 @@ static int check_pattern(uint8_t *buf, int len, int paglen, struct nand_bbt_desc
*/
static int check_short_pattern(uint8_t *buf, struct nand_bbt_descr *td)
{
- /* Compare the pattern */
- if (memcmp(buf + td->offs, td->pattern, td->len))
- return -1;
+ if (likely(td->toleratedbitdiff == 0)) {
+ /* Compare the pattern */
+ if (memcmp(buf + td->offs, td->pattern, td->len))
+ return -1;
+ } else {
+ int i, nbitdiff = 0;
+ uint8_t tmp;
+
+ for (i = 0; i < td->len; i++) {
+ tmp = buf[td->offs + i] ^ td->pattern[i];
+ nbitdiff += hweight8(tmp);
+ if (nbitdiff > td->toleratedbitdiff)
+ return -1;
+ }
+ }
return 0;
}
@@ -1309,6 +1321,7 @@ static int nand_create_badblock_pattern(struct nand_chip *this)
bd->len = (this->options & NAND_BUSWIDTH_16) ? 2 : 1;
bd->pattern = scan_ff_pattern;
bd->options |= NAND_BBT_DYNAMICSTRUCT;
+ bd->toleratedbitdiff = 8-this->badblockbits;
this->badblock_pattern = bd;
return 0;
}
diff --git a/include/linux/mtd/bbm.h b/include/linux/mtd/bbm.h
index 211ff67..0714337 100644
--- a/include/linux/mtd/bbm.h
+++ b/include/linux/mtd/bbm.h
@@ -48,6 +48,8 @@
* bad) block in the stored bbt
* @pattern: pattern to identify bad block table or factory marked good /
* bad blocks, can be NULL, if len = 0
+ * @toleratedbitdiff: number of tolerated bit difference (in a byte) between
+ * pattern and buffer
*
* Descriptor for the bad block table marker and the descriptor for the
* pattern which identifies good and bad blocks. The assumption is made
@@ -64,6 +66,7 @@ struct nand_bbt_descr {
int maxblocks;
int reserved_block_code;
uint8_t *pattern;
+ int toleratedbitdiff;
};
/* Options for the bad block table descriptors */
--
1.7.9.5
next prev parent reply other threads:[~2015-03-06 12:12 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-06 12:12 [PATCH 0/2] Use badblockbits-like approach in nand_bbt.c rnd4
2015-03-06 12:12 ` [PATCH 1/2] mtd: nand: use a lower value for badblockbits when working with MLC NAND rnd4
2015-03-15 9:07 ` Boris Brezillon
2015-04-03 12:52 ` Andrea Scian
2015-07-23 21:24 ` Andrea Scian
2015-07-23 22:00 ` Brian Norris
2015-03-06 12:12 ` rnd4 [this message]
2015-03-15 9:18 ` [PATCH 2/2] mtd: nand: use nand_chip badblockbits when checking bad block pattern Boris Brezillon
2015-10-13 10:46 ` [PATCH 0/2] Use badblockbits-like approach in nand_bbt.c Boris Brezillon
2015-10-13 18:04 ` Brian Norris
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=1425643938-24749-3-git-send-email-rnd4@dave-tech.it \
--to=rnd4@dave-tech.it \
--cc=andrea.scian@dave.eu \
--cc=boris.brezillon@free-electrons.com \
--cc=linux-mtd@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).