From: Abel Vesa <abel.vesa@nxp.com>
To: Philipp Zabel <p.zabel@pengutronix.de>
Cc: Dong Aisheng <aisheng.dong@nxp.com>,
Rob Herring <robh@kernel.org>, Peng Fan <peng.fan@nxp.com>,
Fugang Duan <fugang.duan@nxp.com>, Jacky Bai <ping.bai@nxp.com>,
Anson Huang <anson.huang@nxp.com>,
devicetree@vger.kernel.org, Stephen Boyd <sboyd@kernel.org>,
Mike Turquette <mturquette@baylibre.com>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
NXP Linux Team <linux-imx@nxp.com>,
Sascha Hauer <kernel@pengutronix.de>,
Fabio Estevam <fabio.estevam@nxp.com>,
Shawn Guo <shawnguo@kernel.org>,
linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v2 11/17] clk: imx: Add blk_ctrl combo driver
Date: Tue, 25 Aug 2020 17:11:16 +0300 [thread overview]
Message-ID: <20200825141116.wgvybk7mtozvjxmb@fsr-ub1664-175> (raw)
In-Reply-To: <8e8e33386eea12036bb17529b4d578704bf735d1.camel@pengutronix.de>
On 20-08-25 14:07:29, Philipp Zabel wrote:
> On Tue, 2020-08-25 at 14:24 +0300, Abel Vesa wrote:
> [...]
> > > > +static int imx_blk_ctrl_reset_set(struct reset_controller_dev *rcdev,
> > > > + unsigned long id, bool assert)
> > > > +{
> > > > + struct imx_blk_ctrl_drvdata *drvdata = container_of(rcdev,
> > > > + struct imx_blk_ctrl_drvdata, rcdev);
> > > > + unsigned int offset = drvdata->rst_hws[id].offset;
> > > > + unsigned int shift = drvdata->rst_hws[id].shift;
> > > > + unsigned int mask = drvdata->rst_hws[id].mask;
> > > > + void __iomem *reg_addr = drvdata->base + offset;
> > > > + unsigned long flags;
> > > > + unsigned int asserted_before = 0, asserted_after = 0;
> > > > + u32 reg;
> > > > + int i;
> > > > +
> > > > + spin_lock_irqsave(&drvdata->lock, flags);
> > > > +
> > > > + for (i = 0; i < drvdata->rcdev.nr_resets; i++)
> > > > + if (drvdata->rst_hws[i].asserted)
> > > > + asserted_before++;
> > > > +
> > > > + if (asserted_before == 0 && assert)
> > > > + pm_runtime_get(rcdev->dev);
> > >
> > > Shouldn't that be pm_runtime_get_sync() ?
> > >
> > > I would do that unconditionally before locking drvdata->lock and then
> > > drop unnecessary refcounts afterwards.
> > >
> >
> > I thought we already discussed this on the last's version thread.
>
> This is about something different. pm_runtime_get() just queues the
> device to be enabled at a later point, but I presume you want to have it
> enabled before writing to its registers. (The question here is can you
> write to the registers, and have the device update its internal state,
> while the power domain is disabled?)
> Either way, if you want the reset to be asserted after the function
> returns (as is required by the reset API), as I understand it, you have
> to make sure that the power domain is activated before the function
> returns.
> Therefore pm_runtime_get_sync() is required instead of pm_runtime_get(),
> and that must be called outside of the spin locked section. My
> suggestion would be:
>
> if (assert)
> pm_runtime_get_sync();
> spin_lock_irqsave();
> /* ... */
> spin_unlock_irqrestore();
> if (assert && asserted_before)
> pm_runtime_put();
>
You're right this makes more sense.
> unless the following might be an issue:
>
> > > > +
> > > > + if (assert) {
> > > > + reg = readl(reg_addr);
> > > > + writel(reg & ~(mask << shift), reg_addr);
> > > > + drvdata->rst_hws[id].asserted = true;
> > > > + } else {
> > > > + reg = readl(reg_addr);
> > > > + writel(reg | (mask << shift), reg_addr);
>
> Could this cause problems if the power domain is already disabled? If
> so, it would be best to either temporarily enable power, or to skip the
> register writes if asserted_before == 0 && !assert.
I'll go with the latter one since it leaves the PD off.
>
> > > > + drvdata->rst_hws[id].asserted = false;
> > > > + }
> > > > +
> > > > + for (i = 0; i < drvdata->rcdev.nr_resets; i++)
> > > > + if (drvdata->rst_hws[i].asserted)
> > > > + asserted_after++;
> > > > +
> > > > + if (asserted_before == 1 && asserted_after == 0)
> > > > + pm_runtime_put(rcdev->dev);
> > > > +
> > > > + spin_unlock_irqrestore(&drvdata->lock, flags);
> > > > +
> > > > + return 0;
> > > > +}
>
> regards
> Philipp
next prev parent reply other threads:[~2020-08-25 14:11 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-14 12:09 [PATCH v2 00/17] Add BLK_CTRL support for i.MX8MP Abel Vesa
2020-08-14 12:09 ` [PATCH v2 01/17] dt-bindings: clocks: imx8mp: Rename audiomix ids clocks to audio_blk_ctrl Abel Vesa
2020-08-17 7:44 ` Dong Aisheng
2020-08-25 2:12 ` Rob Herring
2020-08-14 12:09 ` [PATCH v2 02/17] dt-bindings: reset: imx8mp: Add audio blk_ctrl reset IDs Abel Vesa
2020-08-17 7:45 ` Dong Aisheng
2020-08-25 2:13 ` Rob Herring
2020-08-14 12:09 ` [PATCH v2 03/17] dt-bindings: clock: imx8mp: Add ids for the audio shared gate Abel Vesa
2020-08-17 7:45 ` Dong Aisheng
2020-08-14 12:09 ` [PATCH v2 04/17] dt-bindings: clock: imx8mp: Add media blk_ctrl clock IDs Abel Vesa
2020-08-17 7:46 ` Dong Aisheng
2020-08-14 12:09 ` [PATCH v2 05/17] dt-bindings: reset: imx8mp: Add media blk_ctrl reset IDs Abel Vesa
2020-08-17 7:47 ` Dong Aisheng
2020-08-14 12:09 ` [PATCH v2 06/17] dt-bindings: clock: imx8mp: Add hdmi blk_ctrl clock IDs Abel Vesa
2020-08-14 12:09 ` [PATCH v2 07/17] dt-bindings: reset: imx8mp: Add hdmi blk_ctrl reset IDs Abel Vesa
2020-08-17 7:47 ` Dong Aisheng
2020-08-14 12:09 ` [PATCH v2 08/17] clk: imx8mp: Add audio shared gate Abel Vesa
2020-08-17 7:48 ` Dong Aisheng
2020-08-14 12:09 ` [PATCH v2 09/17] arm64: dts: Remove imx-hdmimix-reset header file Abel Vesa
2020-08-17 7:51 ` Dong Aisheng
2020-08-19 20:09 ` Abel Vesa
2020-08-14 12:09 ` [PATCH v2 10/17] Documentation: bindings: clk: Add bindings for i.MX BLK_CTRL Abel Vesa
2020-08-17 8:07 ` Dong Aisheng
2020-08-25 2:14 ` Rob Herring
2020-08-14 12:09 ` [PATCH v2 11/17] clk: imx: Add blk_ctrl combo driver Abel Vesa
2020-08-18 11:27 ` Dong Aisheng
2020-08-19 20:31 ` Abel Vesa
2020-08-20 1:40 ` Dong Aisheng
2020-08-25 10:48 ` Philipp Zabel
2020-08-25 11:24 ` Abel Vesa
2020-08-25 12:07 ` Philipp Zabel
2020-08-25 14:11 ` Abel Vesa [this message]
2020-08-25 18:30 ` Abel Vesa
2020-08-26 7:46 ` Philipp Zabel
2020-08-14 12:09 ` [PATCH v2 12/17] clk: imx8mp: Add audio blk_ctrl clocks and resets Abel Vesa
2020-08-18 11:29 ` Dong Aisheng
2020-08-19 20:33 ` Abel Vesa
2020-08-14 12:09 ` [PATCH v2 13/17] clk: imx8mp: Add hdmi " Abel Vesa
2020-08-14 12:09 ` [PATCH v2 14/17] clk: imx8mp: Add media " Abel Vesa
2020-08-14 12:09 ` [PATCH v2 15/17] arm64: dts: imx8mp: Add audio_blk_ctrl node Abel Vesa
2020-08-18 11:32 ` Dong Aisheng
2020-08-19 20:33 ` Abel Vesa
2020-08-14 12:09 ` [PATCH v2 16/17] arm64: dts: imx8mp: Add media_blk_ctrl node Abel Vesa
2020-08-18 11:34 ` Dong Aisheng
2020-08-19 20:37 ` Abel Vesa
2020-08-20 1:31 ` Dong Aisheng
2020-09-07 9:11 ` Abel Vesa
2020-08-14 12:09 ` [PATCH v2 17/17] arm64: dts: imx8mp: Add hdmi_blk_ctrl node Abel Vesa
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=20200825141116.wgvybk7mtozvjxmb@fsr-ub1664-175 \
--to=abel.vesa@nxp.com \
--cc=aisheng.dong@nxp.com \
--cc=anson.huang@nxp.com \
--cc=devicetree@vger.kernel.org \
--cc=fabio.estevam@nxp.com \
--cc=fugang.duan@nxp.com \
--cc=kernel@pengutronix.de \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-clk@vger.kernel.org \
--cc=linux-imx@nxp.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mturquette@baylibre.com \
--cc=p.zabel@pengutronix.de \
--cc=peng.fan@nxp.com \
--cc=ping.bai@nxp.com \
--cc=robh@kernel.org \
--cc=sboyd@kernel.org \
--cc=shawnguo@kernel.org \
/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).