lkml.org 
[lkml]   [2022]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH 5.4 007/320] mtd: rawnand: gpmi: Add ERR007117 protection for nfc_apply_timings
    Date
    Hi Pavel,

    On Monday, 24 January 2022, 21:41:48 CET, Pavel Machek wrote:
    > Hi!
    >
    > > commit f53d4c109a666bf1a4883b45d546fba079258717 upstream.
    > >
    > > gpmi_io clock needs to be gated off when changing the parent/dividers of
    > > enfc_clk_root (i.MX6Q/i.MX6UL) respectively qspi2_clk_root (i.MX6SX).
    > > Otherwise this rate change can lead to an unresponsive GPMI core which
    > > results in DMA timeouts and failed driver probe:
    > ...
    >
    > > @@ -2429,7 +2449,9 @@ static int gpmi_nfc_exec_op(struct nand_
    > > */
    > > if (this->hw.must_apply_timings) {
    > > this->hw.must_apply_timings = false;
    > > - gpmi_nfc_apply_timings(this);
    > > + ret = gpmi_nfc_apply_timings(this);
    > > + if (ret)
    > > + return ret;
    > > }
    > >
    > > dev_dbg(this->dev, "%s: %d instructions\n", __func__, op->ninstrs);
    > >
    >
    > AFAICT this leaks pm reference in the error case. Not sure what
    > variant is right, there, so...
    You're right, thanks for pointing this out. I think that the error path
    currently should not appear in practice, but I plan to add further patches
    in future where this could happen then.

    Although there's a potential new error, I think that this patch should
    improve the situation.

    >
    > Best regards,
    > Pavel
    >
    > diff --git a/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c b/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c
    > index 1b64c5a5140d..06840cff6945 100644
    > --- a/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c
    > +++ b/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c
    > @@ -2284,8 +2284,10 @@ static int gpmi_nfc_exec_op(struct nand_chip *chip,
    > if (this->hw.must_apply_timings) {
    > this->hw.must_apply_timings = false;
    > ret = gpmi_nfc_apply_timings(this);
    > - if (ret)
    > + if (ret) {
    > + pm_runtime_put_....(this->dev);
    > return ret;
    > + }
    > }
    >
    > dev_dbg(this->dev, "%s: %d instructions\n", __func__, op->ninstrs);

    I'll prepare and send a new patch tomorrow.

    regards
    Christian




    \
     
     \ /
      Last update: 2022-01-24 23:10    [W:4.127 / U:0.564 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site