From: Claudiu Beznea <claudiu.beznea@kernel.org>
To: Frank Li <Frank.li@nxp.com>
Cc: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>,
vkoul@kernel.org, Frank.Li@kernel.org, lgirdwood@gmail.com,
broonie@kernel.org, perex@perex.cz, tiwai@suse.com,
biju.das.jz@bp.renesas.com,
prabhakar.mahadev-lad.rj@bp.renesas.com, p.zabel@pengutronix.de,
geert+renesas@glider.be, fabrizio.castro.jz@renesas.com,
kuninori.morimoto.gx@renesas.com, long.luu.ur@renesas.com,
dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-sound@vger.kernel.org, linux-renesas-soc@vger.kernel.org
Subject: Re: [PATCH v5 13/17] dmaengine: sh: rz-dmac: Add runtime PM support
Date: Thu, 14 May 2026 12:20:21 +0300 [thread overview]
Message-ID: <2a253460-bd6f-44d9-86ab-9f52b8545413@kernel.org> (raw)
In-Reply-To: <agTXV0NCP7PNk570@lizhi-Precision-Tower-5810>
Hi, Frank,
On 5/13/26 22:56, Frank Li wrote:
> On Wed, May 13, 2026 at 04:39:12PM +0300, Claudiu Beznea wrote:
>> Hi, Frank,
>>
>> On 5/13/26 01:03, Frank Li wrote:
>>> On Tue, May 12, 2026 at 03:12:14PM +0300, Claudiu Beznea wrote:
>>>> Protect the driver exposed APIs with runtime PM suspend/resume calls
>>>> before accessing HW registers. As the current driver leaves runtime PM
>>>> enabled in probe, the purpose of the changes in this patch is to avoid
>>>> accessing HW registers after a failed system suspend leaves the runtime
>>>> PM state of the device improperly reinitialized.
>>>>
>>>> In that case, the driver remains bound to the device, the APIs are still
>>>> exposed, and any access to HW registers without runtime resuming the
>>>> device may lead to synchronous aborts.
>>>>
>>>> This patch prepares the driver for suspend-to-RAM support.
>>>>
>>>> Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
>>>> ---
>>>>
>>>> Changes in v5:
>>>> - none, this patch is new
>>>>
>>>> drivers/dma/sh/rz-dmac.c | 48 ++++++++++++++++++++++++++++++++++++++++
>>>> 1 file changed, 48 insertions(+)
>>>>
>>>> diff --git a/drivers/dma/sh/rz-dmac.c b/drivers/dma/sh/rz-dmac.c
>>>> index d6ad070be705..df91657fd5e3 100644
>>>> --- a/drivers/dma/sh/rz-dmac.c
>>>> +++ b/drivers/dma/sh/rz-dmac.c
>>>> @@ -488,7 +488,15 @@ static void rz_dmac_prepare_descs_for_cyclic(struct rz_dmac_chan *channel)
>>>>
>>>> static void rz_dmac_xfer_desc(struct rz_dmac_chan *chan)
>>>> {
>>>> + struct dma_chan *ch = &chan->vc.chan;
>>>> + struct rz_dmac *dmac = to_rz_dmac(ch->device);
>>>> struct virt_dma_desc *vd;
>>>> + int ret;
>>>> +
>>>> + PM_RUNTIME_ACQUIRE_IF_ENABLED(dmac->dev, pm);
>>>> + ret = PM_RUNTIME_ACQUIRE_ERR(&pm);
>>>> + if (ret)
>>>> + return;
>>>
>>> According vnod comment *_prep() call may be called in atomic context
>>> (complete callback). but runtime_pm may sleep.
>>
>> That's why the pm_runtime_irq_safe() was called in probe, to allow it being
>> called in atomic context.
>>
>> The series was tested with CONFIG_LOCKDEP=y and CONFIG_DEBUG_ATOMIC_SLEEP=y
>> no issue was identified.
>
> I am not sure how magic it makes pm_runtime_get_sync() work under atomic
> context, suppose runtime callback involve clk_(un)prep() and power domain,
> if you call pm_runtime_irq_safe() in probe, it may makes all parent resource
> on when probe. At least it should defer to alloc chan.
The rz-dmac driver is used on platforms using drivers/clk/renesas/rzg2l-cpg.c
and drivers/clk/renesas/rzv2h-cpg.c clock drivers.
All the platforms that supports the rz-dmac driver register always-on clock
power domains through the above mentioned clock drivers, see [1], [2].
The genpd registered by those drivers are passing GENPD_FLAG_PM_CLK flag to the
pm_genpd_init(). In that case the start/stop APIs of the genpd are
pm_clk_suspend/pm_clk_resume [3].
The clocks to the rz-dmac driver are module clocks, so they are handled by [4]
or [5] which both have the enable and disable APIs implemented, thus the
prepare/unprepare is not going to be called through the
pm_clk_suspend()/pm_clk_resume() functions.
Also, there is no sleep in the enable/disable APIs of those clocks.
Since the registered clock power domain is always on and the rz-dmac is marked
as IRQ safe the genpd_lock()/genpd_unlock() (and
genpd_power_off()/genpd_power_on()) will not be called for rz-dmac driver.
Anyhow, the rzg2l-cpg.c and rzv2h-cpg.c are not implementing any power on/off
APIs (they are always on power domains).
The irq_safe_dev_in_sleep_domain() calls in
genpd_runtime_suspend()/genpd_runtime_resume() is anyway blocking any access to
the genpd_lock()/genpd_unlock() (which may call mutex operations thought he
genpd_mtx_ops APIs) for the rz-dmac (due to the pm_domain_irq_safe() call in
probe) .
Also, on pm_runtime_* APIs, documentation it is mentioned (e.g. [6]):
* This routine may be called in atomic context if the RPM_ASYNC flag is set,
* or if pm_runtime_irq_safe() has been called.
Due to all these, I consider we are safe with this approach.
Thank you,
Claudiu
[1]
https://elixir.bootlin.com/linux/v7.1-rc3/source/drivers/clk/renesas/rzg2l-cpg.c#L2013
[2]
https://elixir.bootlin.com/linux/v7.1-rc3/source/drivers/clk/renesas/rzv2h-cpg.c#L1549
[3] https://elixir.bootlin.com/linux/v7.1-rc3/source/drivers/pmdomain/core.c#L2439
[4]
https://elixir.bootlin.com/linux/v7.1-rc3/source/drivers/clk/renesas/rzg2l-cpg.c#L1560
[5]
https://elixir.bootlin.com/linux/v7.1-rc3/source/drivers/clk/renesas/rzv2h-cpg.c#L1243
[6]
https://elixir.bootlin.com/linux/v7.1-rc3/source/drivers/base/power/runtime.c#L1147
next prev parent reply other threads:[~2026-05-14 9:20 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-12 12:12 [PATCH v5 00/17] Renesas: dmaengine and ASoC fixes Claudiu Beznea
2026-05-12 12:12 ` [PATCH v5 01/17] dmaengine: sh: rz-dmac: Move interrupt request after everything is set up Claudiu Beznea
2026-05-12 20:28 ` Frank Li
2026-05-13 21:44 ` sashiko-bot
2026-05-12 12:12 ` [PATCH v5 02/17] dmaengine: sh: rz-dmac: Fix incorrect NULL check on list_first_entry() Claudiu Beznea
2026-05-12 20:35 ` Frank Li
2026-05-13 13:31 ` Claudiu Beznea
2026-05-13 22:00 ` sashiko-bot
2026-05-12 12:12 ` [PATCH v5 03/17] dmaengine: sh: rz-dmac: Use list_first_entry_or_null() Claudiu Beznea
2026-05-12 20:38 ` Frank Li
2026-05-13 22:18 ` sashiko-bot
2026-05-12 12:12 ` [PATCH v5 04/17] dmaengine: sh: rz-dmac: Use rz_dmac_disable_hw() Claudiu Beznea
2026-05-12 20:42 ` Frank Li
2026-05-12 12:12 ` [PATCH v5 05/17] dmaengine: sh: rz-dmac: Add helper to compute the lmdesc address Claudiu Beznea
2026-05-12 20:44 ` Frank Li
2026-05-12 12:12 ` [PATCH v5 06/17] dmaengine: sh: rz-dmac: Save the start LM descriptor Claudiu Beznea
2026-05-12 20:48 ` Frank Li
2026-05-13 13:33 ` Claudiu Beznea
2026-05-13 23:52 ` sashiko-bot
2026-05-12 12:12 ` [PATCH v5 07/17] dmaengine: sh: rz-dmac: Add helper to check if the channel is enabled Claudiu Beznea
2026-05-12 20:49 ` Frank Li
2026-05-13 23:59 ` sashiko-bot
2026-05-12 12:12 ` [PATCH v5 08/17] dmaengine: sh: rz-dmac: Add helper to check if the channel is paused Claudiu Beznea
2026-05-12 20:57 ` Frank Li
2026-05-12 12:12 ` [PATCH v5 09/17] dmaengine: sh: rz-dmac: Use virt-dma APIs for channel descriptor processing Claudiu Beznea
2026-05-12 21:38 ` Frank Li
2026-05-13 13:34 ` Claudiu Beznea
2026-05-14 0:42 ` sashiko-bot
2026-05-12 12:12 ` [PATCH v5 10/17] dmaengine: sh: rz-dmac: Refactor pause/resume code Claudiu Beznea
2026-05-12 21:43 ` Frank Li
2026-05-13 13:35 ` Claudiu Beznea
2026-05-14 0:57 ` sashiko-bot
2026-05-12 12:12 ` [PATCH v5 11/17] dmaengine: sh: rz-dmac: Drop the update of channel->chctrl with CHCTRL_SETEN Claudiu Beznea
2026-05-12 21:55 ` Frank Li
2026-05-12 12:12 ` [PATCH v5 12/17] dmaengine: sh: rz-dmac: Add cyclic DMA support Claudiu Beznea
2026-05-12 22:00 ` Frank Li
2026-05-13 13:38 ` Claudiu Beznea
2026-05-14 1:43 ` sashiko-bot
2026-05-12 12:12 ` [PATCH v5 13/17] dmaengine: sh: rz-dmac: Add runtime PM support Claudiu Beznea
2026-05-12 22:03 ` Frank Li
2026-05-13 13:39 ` Claudiu Beznea
2026-05-13 19:56 ` Frank Li
2026-05-14 9:20 ` Claudiu Beznea [this message]
2026-05-14 2:08 ` sashiko-bot
2026-05-12 12:12 ` [PATCH v5 14/17] dmaengine: sh: rz-dmac: Add suspend to RAM support Claudiu Beznea
2026-05-14 3:04 ` sashiko-bot
2026-05-12 12:12 ` [PATCH v5 15/17] ASoC: renesas: rz-ssi: Add pause support Claudiu Beznea
2026-05-14 3:54 ` sashiko-bot
2026-05-12 12:12 ` [PATCH v5 16/17] ASoC: renesas: rz-ssi: Use generic PCM dmaengine APIs Claudiu Beznea
2026-05-14 4:52 ` sashiko-bot
2026-05-12 12:12 ` [PATCH v5 17/17] dmaengine: sh: rz-dmac: Set the Link End (LE) bit on the last descriptor Claudiu Beznea
2026-05-14 5:22 ` sashiko-bot
2026-05-15 8:44 ` [PATCH v5 00/17] Renesas: dmaengine and ASoC fixes John Madieu
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=2a253460-bd6f-44d9-86ab-9f52b8545413@kernel.org \
--to=claudiu.beznea@kernel.org \
--cc=Frank.Li@kernel.org \
--cc=Frank.li@nxp.com \
--cc=biju.das.jz@bp.renesas.com \
--cc=broonie@kernel.org \
--cc=claudiu.beznea.uj@bp.renesas.com \
--cc=dmaengine@vger.kernel.org \
--cc=fabrizio.castro.jz@renesas.com \
--cc=geert+renesas@glider.be \
--cc=kuninori.morimoto.gx@renesas.com \
--cc=lgirdwood@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=linux-sound@vger.kernel.org \
--cc=long.luu.ur@renesas.com \
--cc=p.zabel@pengutronix.de \
--cc=perex@perex.cz \
--cc=prabhakar.mahadev-lad.rj@bp.renesas.com \
--cc=tiwai@suse.com \
--cc=vkoul@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.