[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <e52bf38913c20467e96c66ddf058129a5f063273.1616635406.git.ytc-mb-yfuruyama7@kioxia.com>
Date: Tue, 6 Apr 2021 10:47:26 +0900
From: Yoshio Furuyama <ytc-mb-yfuruyama7@...xia.com>
To: miquel.raynal@...tlin.com, richard@....at, vigneshr@...com
Cc: linux-mtd@...ts.infradead.org, linux-kernel@...r.kernel.org
Subject: [PATCH v2 2/2] Fix the issue for clearing status process
In the unlikely event of bad block,
it should update its block status to BBT,
In this case, there are 2 kind of issue for handling
a) Mark bad block status to BBT: It was fixed by Patric's patch
b) Clear status to BBT: I posted patch for this issue
Patch:
Issue of handing BBT (Bad Block Table) for
some particular blocks (Ex:10, 11)
Updating status is, first clear status, second set bad block status.
Patrick's patch is only fixed the issue for setting status process,
so this patch fix the clearing status process.
Signed-off-by: Yoshio Furuyama <ytc-mb-yfuruyama7@...xia.com>
---
drivers/mtd/nand/bbt.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/mtd/nand/bbt.c b/drivers/mtd/nand/bbt.c
index 64af6898131d..0780896eaafe 100644
--- a/drivers/mtd/nand/bbt.c
+++ b/drivers/mtd/nand/bbt.c
@@ -112,11 +112,13 @@ int nanddev_bbt_set_block_status(struct nand_device *nand, unsigned int entry,
((entry * bits_per_block) / BITS_PER_LONG);
unsigned int offs = (entry * bits_per_block) % BITS_PER_LONG;
unsigned long val = status & GENMASK(bits_per_block - 1, 0);
+ unsigned long shift = ((bits_per_block + offs <= BITS_PER_LONG) ?
+ (offs + bits_per_block - 1) : (BITS_PER_LONG - 1));
if (entry >= nanddev_neraseblocks(nand))
return -ERANGE;
- pos[0] &= ~GENMASK(offs + bits_per_block - 1, offs);
+ pos[0] &= ~GENMASK(shift, offs);
pos[0] |= val << offs;
if (bits_per_block + offs > BITS_PER_LONG) {
--
2.25.1
Powered by blists - more mailing lists