[PATCH v2 2/2] Fix the issue for clearing status process
Yoshio Furuyama
ytc-mb-yfuruyama7 at kioxia.com
Tue Apr 6 02:47:26 BST 2021
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 at kioxia.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
More information about the linux-mtd
mailing list