Message ID | 20240916-brcmnand-fixes-v2-2-08632f64c8ec@linaro.org |
---|---|
State | New |
Headers | show |
Series | mtd: nand: brcmnand: Backported fixes from Linux | expand |
> -----Original Message----- > From: Linus Walleij <linus.walleij@linaro.org> > Sent: Monday, September 16, 2024 2:59 AM > To: u-boot@lists.denx.de; Dario Binacchi > <dario.binacchi@amarulasolutions.com>; Michael Trimarchi > <michael@amarulasolutions.com>; Anand Gore > <anand.gore@broadcom.com>; William Zhang > <william.zhang@broadcom.com>; Kursad Oney > <kursad.oney@broadcom.com>; Philippe Reynes > <philippe.reynes@softathome.com> > Cc: Linus Walleij <linus.walleij@linaro.org>; Florian Fainelli > <florian.fainelli@broadcom.com>; Miquel Raynal > <miquel.raynal@bootlin.com> > Subject: [PATCH v2 2/7] mtd: rawnand: brcmnand: Fix potential false time > out warning > > From: William Zhang <william.zhang@broadcom.com> > > Backport from the Linux kernel: > commit 9cc0a598b944816f2968baf2631757f22721b996 > "mtd: rawnand: brcmnand: Fix potential false time out warning" > > If system is busy during the command status polling function, the driver > may not get the chance to poll the status register till the end of time > out and return the premature status. Do a final check after time out > happens to ensure reading the correct status. > > Signed-off-by: William Zhang <william.zhang@broadcom.com> > Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com> > Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> > Link: https://lore.kernel.org/linux-mtd/20230706182909.79151-3- > william.zhang@broadcom.com > Signed-off-by: Linus Walleij <linus.walleij@linaro.org> > --- > drivers/mtd/nand/raw/brcmnand/brcmnand.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/drivers/mtd/nand/raw/brcmnand/brcmnand.c > b/drivers/mtd/nand/raw/brcmnand/brcmnand.c > index 700d1122639f..46a4107a83a9 100644 > --- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c > +++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c > @@ -1011,6 +1011,14 @@ static int bcmnand_ctrl_poll_status(struct > brcmnand_controller *ctrl, > } while (get_timer(base) < limit); > #endif /* __UBOOT__ */ > > + /* > + * do a final check after time out in case the CPU was busy and the > driver > + * did not get enough time to perform the polling to avoid false > alarms > + */ > + val = brcmnand_read_reg(ctrl, BRCMNAND_INTFC_STATUS); > + if ((val & mask) == expected_val) > + return 0; > + > dev_warn(ctrl->dev, "timeout on status poll (expected %x got %x)\n", > expected_val, val & mask); > > > -- > 2.46.0 Reviewed-by: William Zhang <william.zhang@broadcom.com>
All, Dario On Tue, Sep 17, 2024 at 2:20 AM William Zhang <william.zhang@broadcom.com> wrote: > > > -----Original Message----- > > From: Linus Walleij <linus.walleij@linaro.org> > > Sent: Monday, September 16, 2024 2:59 AM > > To: u-boot@lists.denx.de; Dario Binacchi > > <dario.binacchi@amarulasolutions.com>; Michael Trimarchi > > <michael@amarulasolutions.com>; Anand Gore > > <anand.gore@broadcom.com>; William Zhang > > <william.zhang@broadcom.com>; Kursad Oney > > <kursad.oney@broadcom.com>; Philippe Reynes > > <philippe.reynes@softathome.com> > > Cc: Linus Walleij <linus.walleij@linaro.org>; Florian Fainelli > > <florian.fainelli@broadcom.com>; Miquel Raynal > > <miquel.raynal@bootlin.com> > > Subject: [PATCH v2 2/7] mtd: rawnand: brcmnand: Fix potential false time > > out warning > > > > From: William Zhang <william.zhang@broadcom.com> > > > > Backport from the Linux kernel: > > commit 9cc0a598b944816f2968baf2631757f22721b996 > > "mtd: rawnand: brcmnand: Fix potential false time out warning" > > > > If system is busy during the command status polling function, the driver > > may not get the chance to poll the status register till the end of time > > out and return the premature status. Do a final check after time out > > happens to ensure reading the correct status. > > > > Signed-off-by: William Zhang <william.zhang@broadcom.com> > > Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com> > > Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> > > Link: https://lore.kernel.org/linux-mtd/20230706182909.79151-3- > > william.zhang@broadcom.com > > Signed-off-by: Linus Walleij <linus.walleij@linaro.org> > > --- > > drivers/mtd/nand/raw/brcmnand/brcmnand.c | 8 ++++++++ > > 1 file changed, 8 insertions(+) > > > > diff --git a/drivers/mtd/nand/raw/brcmnand/brcmnand.c > > b/drivers/mtd/nand/raw/brcmnand/brcmnand.c > > index 700d1122639f..46a4107a83a9 100644 > > --- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c > > +++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c > > @@ -1011,6 +1011,14 @@ static int bcmnand_ctrl_poll_status(struct > > brcmnand_controller *ctrl, > > } while (get_timer(base) < limit); > > #endif /* __UBOOT__ */ > > > > + /* > > + * do a final check after time out in case the CPU was busy and the > > driver > > + * did not get enough time to perform the polling to avoid false > > alarms > > + */ > > + val = brcmnand_read_reg(ctrl, BRCMNAND_INTFC_STATUS); > > + if ((val & mask) == expected_val) > > + return 0; > > + > > dev_warn(ctrl->dev, "timeout on status poll (expected %x got %x)\n", > > expected_val, val & mask); > > > > > > -- > > 2.46.0 > > Reviewed-by: William Zhang <william.zhang@broadcom.com> Acked-by; Michael Trimarchi <michael@amarulasolutions.com>
diff --git a/drivers/mtd/nand/raw/brcmnand/brcmnand.c b/drivers/mtd/nand/raw/brcmnand/brcmnand.c index 700d1122639f..46a4107a83a9 100644 --- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c +++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c @@ -1011,6 +1011,14 @@ static int bcmnand_ctrl_poll_status(struct brcmnand_controller *ctrl, } while (get_timer(base) < limit); #endif /* __UBOOT__ */ + /* + * do a final check after time out in case the CPU was busy and the driver + * did not get enough time to perform the polling to avoid false alarms + */ + val = brcmnand_read_reg(ctrl, BRCMNAND_INTFC_STATUS); + if ((val & mask) == expected_val) + return 0; + dev_warn(ctrl->dev, "timeout on status poll (expected %x got %x)\n", expected_val, val & mask);