diff mbox series

[RESEND,4.9] mtd: rawnand: brcmnand: Fixed incorrect sub-page ECC status

Message ID 20220223174431.1083-3-f.fainelli@gmail.com
State Superseded
Headers show
Series [RESEND,4.9] mtd: rawnand: brcmnand: Fixed incorrect sub-page ECC status | expand

Commit Message

Florian Fainelli Feb. 23, 2022, 5:44 p.m. UTC
From: david regan <dregan@mail.com>

commit 36415a7964711822e63695ea67fede63979054d9 upstream

The brcmnand driver contains a bug in which if a page (example 2k byte)
is read from the parallel/ONFI NAND and within that page a subpage (512
byte) has correctable errors which is followed by a subpage with
uncorrectable errors, the page read will return the wrong status of
correctable (as opposed to the actual status of uncorrectable.)

The bug is in function brcmnand_read_by_pio where there is a check for
uncorrectable bits which will be preempted if a previous status for
correctable bits is detected.

The fix is to stop checking for bad bits only if we already have a bad
bits status.

Fixes: 27c5b17cd1b1 ("mtd: nand: add NAND driver "library" for Broadcom STB NAND controller")
Signed-off-by: david regan <dregan@mail.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/trinity-478e0c09-9134-40e8-8f8c-31c371225eda-1643237024774@3c-app-mailcom-lxa02
[florian: make patch apply to 4.14, file was renamed]
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
 drivers/mtd/nand/brcmnand/brcmnand.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Greg Kroah-Hartman Feb. 23, 2022, 6:24 p.m. UTC | #1
On Wed, Feb 23, 2022 at 09:54:59AM -0800, Florian Fainelli wrote:
> 
> 
> On 2/23/2022 9:54 AM, Greg KH wrote:
> > On Wed, Feb 23, 2022 at 09:44:31AM -0800, Florian Fainelli wrote:
> > > From: david regan <dregan@mail.com>
> > > 
> > > commit 36415a7964711822e63695ea67fede63979054d9 upstream
> > > 
> > > The brcmnand driver contains a bug in which if a page (example 2k byte)
> > > is read from the parallel/ONFI NAND and within that page a subpage (512
> > > byte) has correctable errors which is followed by a subpage with
> > > uncorrectable errors, the page read will return the wrong status of
> > > correctable (as opposed to the actual status of uncorrectable.)
> > > 
> > > The bug is in function brcmnand_read_by_pio where there is a check for
> > > uncorrectable bits which will be preempted if a previous status for
> > > correctable bits is detected.
> > > 
> > > The fix is to stop checking for bad bits only if we already have a bad
> > > bits status.
> > > 
> > > Fixes: 27c5b17cd1b1 ("mtd: nand: add NAND driver "library" for Broadcom STB NAND controller")
> > > Signed-off-by: david regan <dregan@mail.com>
> > > Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
> > > Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> > > Link: https://lore.kernel.org/linux-mtd/trinity-478e0c09-9134-40e8-8f8c-31c371225eda-1643237024774@3c-app-mailcom-lxa02
> > > [florian: make patch apply to 4.14, file was renamed]
> > > Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
> > > ---
> > >   drivers/mtd/nand/brcmnand/brcmnand.c | 2 +-
> > >   1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > Why is this a RESEND?  What happened with the first set?
> 
> I forgot to copy stable and you and Sasha, wanted to make it clear to the
> MTD folks why this is being resent.

But this commit is already in the 4.14.268 and 4.19.231 release, why do
we need to add it again?

For 4.9 we need the backport, I'll take that one...

thanks,

greg k-h
diff mbox series

Patch

diff --git a/drivers/mtd/nand/brcmnand/brcmnand.c b/drivers/mtd/nand/brcmnand/brcmnand.c
index 40fdc9d267b9..1c8e95cf29d2 100644
--- a/drivers/mtd/nand/brcmnand/brcmnand.c
+++ b/drivers/mtd/nand/brcmnand/brcmnand.c
@@ -1637,7 +1637,7 @@  static int brcmnand_read_by_pio(struct mtd_info *mtd, struct nand_chip *chip,
 					mtd->oobsize / trans,
 					host->hwcfg.sector_size_1k);
 
-		if (!ret) {
+		if (ret != -EBADMSG) {
 			*err_addr = brcmnand_read_reg(ctrl,
 					BRCMNAND_UNCORR_ADDR) |
 				((u64)(brcmnand_read_reg(ctrl,