From: Miquel Raynal <miquel.raynal@bootlin.com>
To: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Richard Weinberger <richard@nod.at>,
Vignesh Raghavendra <vigneshr@ti.com>,
Tudor Ambarus <Tudor.Ambarus@microchip.com>,
Pratyush Yadav <p.yadav@ti.com>, Michael Walle <michael@walle.cc>,
MTD Maling List <linux-mtd@lists.infradead.org>,
Linux-Renesas <linux-renesas-soc@vger.kernel.org>,
Magnus Damm <magnus.damm@gmail.com>,
Gareth Williams <gareth.williams.jx@renesas.com>,
Phil Edworthy <phil.edworthy@renesas.com>,
Rob Herring <robh+dt@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
"open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS"
<devicetree@vger.kernel.org>,
Milan Stevanovic <milan.stevanovic@se.com>,
Jimmy Lalande <jimmy.lalande@se.com>,
Pascal Eberhard <pascal.eberhard@se.com>,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
Herve Codina <herve.codina@bootlin.com>,
Clement Leger <clement.leger@bootlin.com>
Subject: Re: [PATCH v2 2/2] mtd: rawnand: renesas: Use runtime PM instead of the raw clock API
Date: Tue, 10 May 2022 11:02:57 +0200 [thread overview]
Message-ID: <20220510110257.11ac55f1@xps13> (raw)
In-Reply-To: <CAMuHMdUQafhSHA6vz2FP4=CLodEB3uK2p2W6fu_xK8kA+pMGFA@mail.gmail.com>
Hi Geert,
geert@linux-m68k.org wrote on Tue, 10 May 2022 10:52:41 +0200:
> Hi Miquel,
>
> On Mon, May 9, 2022 at 5:49 PM Miquel Raynal <miquel.raynal@bootlin.com> wrote:
> > This NAND controller is part of a well defined power domain handled by
> > the runtime PM core. Let's keep the harmony with the other RZ/N1 drivers
> > and exclusively use the runtime PM API to enable/disable the clocks.
> >
> > We still need to retrieve the external clock rate in order to derive the
> > NAND timings, but that is not a big deal, we can still do that in the
> > probe and just save this value to reuse it later.
> >
> > Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
>
> Thanks for your patch!
>
> > --- a/drivers/mtd/nand/raw/renesas-nand-controller.c
> > +++ b/drivers/mtd/nand/raw/renesas-nand-controller.c
>
> > @@ -1335,29 +1336,10 @@ static int rnandc_probe(struct platform_device *pdev)
> > if (IS_ERR(rnandc->regs))
> > return PTR_ERR(rnandc->regs);
> >
> > - /* APB clock */
> > - rnandc->hclk = devm_clk_get(&pdev->dev, "hclk");
> > - if (IS_ERR(rnandc->hclk))
> > - return PTR_ERR(rnandc->hclk);
> > -
> > - /* External NAND bus clock */
> > - rnandc->eclk = devm_clk_get(&pdev->dev, "eclk");
> > - if (IS_ERR(rnandc->eclk))
> > - return PTR_ERR(rnandc->eclk);
> > -
> > - ret = clk_prepare_enable(rnandc->hclk);
> > - if (ret)
> > - return ret;
> > -
> > - ret = clk_prepare_enable(rnandc->eclk);
> > - if (ret)
> > - goto disable_hclk;
> > -
> > rnandc_dis_interrupts(rnandc);
>
> This touches the hardware, so the device must be operational.
> Hence please move the pm_runtime_*() calls up, to make sure the device
> is accessible.
> Sorry for missing that before.
Oh crap, I moved the pm runtime calls below to reduce the amount of
error handling but I clearly overlooked that function call here.
> > irq = platform_get_irq_optional(pdev, 0);
> > if (irq == -EPROBE_DEFER) {
> > - ret = irq;
> > - goto disable_eclk;
> > + return irq;
> > } else if (irq < 0) {
> > dev_info(&pdev->dev, "No IRQ found, fallback to polling\n");
> > rnandc->use_polling = true;
> > @@ -1365,12 +1347,27 @@ static int rnandc_probe(struct platform_device *pdev)
> > ret = devm_request_irq(&pdev->dev, irq, rnandc_irq_handler, 0,
> > "renesas-nand-controller", rnandc);
> > if (ret < 0)
> > - goto disable_eclk;
> > + return ret;
> > }
> >
> > ret = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
> > if (ret)
> > - goto disable_eclk;
> > + return ret;
> > +
> > + devm_pm_runtime_enable(&pdev->dev);
> > + ret = pm_runtime_get_sync(&pdev->dev);
> > + if (ret < 0)
> > + return ret;
> > +
> > + /* The external NAND bus clock rate is needed for computing timings */
> > + eclk = clk_get(&pdev->dev, "eclk");
> > + if (IS_ERR(eclk)) {
> > + ret = PTR_ERR(eclk);
> > + goto dis_runtime_pm;
> > + }
> > +
> > + rnandc->ext_clk_rate = clk_get_rate(eclk);
>
> Personally, I would do this before requesting the interrupt.
> But I guess it's fine to do that here, too.
What do you mean by "do this"? If you are talking about getting the
rate of the clock it's only needed when initializing the timings which
happens later in the probe path and has no relationship with the
interrupts at all. Anyway, I will move all of that earlier so that we
don't have a possible situation where the device is not clocked when
accessing it.
>
> > + clk_put(eclk);
> >
> > rnandc_clear_fifo(rnandc);
> >
>
> Gr{oetje,eeting}s,
>
> Geert
>
> --
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
>
> In personal conversations with technical people, I call myself a hacker. But
> when I'm talking to journalists I just say "programmer" or something like that.
> -- Linus Torvalds
Thanks,
Miquèl
next prev parent reply other threads:[~2022-05-10 9:03 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-09 15:49 [PATCH v2 0/2] mtd: rawnand: renesas: Runtime PM use Miquel Raynal
2022-05-09 15:49 ` [PATCH v2 1/2] dt-bindings: mtd: renesas: Fix the NAND controller description Miquel Raynal
2022-05-12 15:27 ` Miquel Raynal
2022-05-09 15:49 ` [PATCH v2 2/2] mtd: rawnand: renesas: Use runtime PM instead of the raw clock API Miquel Raynal
2022-05-10 8:52 ` Geert Uytterhoeven
2022-05-10 9:02 ` Miquel Raynal [this message]
2022-05-10 9:14 ` Geert Uytterhoeven
2022-05-12 15:27 ` Miquel Raynal
2022-05-12 15:37 ` Geert Uytterhoeven
2022-05-13 10:42 ` Miquel Raynal
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220510110257.11ac55f1@xps13 \
--to=miquel.raynal@bootlin.com \
--cc=Tudor.Ambarus@microchip.com \
--cc=clement.leger@bootlin.com \
--cc=devicetree@vger.kernel.org \
--cc=gareth.williams.jx@renesas.com \
--cc=geert@linux-m68k.org \
--cc=herve.codina@bootlin.com \
--cc=jimmy.lalande@se.com \
--cc=krzk+dt@kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=magnus.damm@gmail.com \
--cc=michael@walle.cc \
--cc=milan.stevanovic@se.com \
--cc=p.yadav@ti.com \
--cc=pascal.eberhard@se.com \
--cc=phil.edworthy@renesas.com \
--cc=richard@nod.at \
--cc=robh+dt@kernel.org \
--cc=thomas.petazzoni@bootlin.com \
--cc=vigneshr@ti.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).