From: sashiko-bot@kernel.org
To: phucduc.bui@gmail.com
Cc: robh@kernel.org, devicetree@vger.kernel.org, krzk+dt@kernel.org,
conor+dt@kernel.org, wsa+renesas@sang-engineering.com
Subject: Re: [PATCH v3 09/10] ASoC: renesas: fsi: Use clock prepare handling in startup/shutdown
Date: Tue, 12 May 2026 00:09:39 +0000 [thread overview]
Message-ID: <20260512000939.F3316C2BCB0@smtp.kernel.org> (raw)
In-Reply-To: <20260510084303.122426-10-phucduc.bui@gmail.com>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] State mismatch between stream open/close (startup/shutdown) and stream start/stop (trigger) causes unbalanced clk_prepare() and clk_unprepare() calls.
- [High] Unbalanced `clk_unprepare()` in the error cleanup path of `fsi_clk_prepare()`.
--
commit d8393e5f5d5c8b0313ed0200fa4a0d38663711d4
Author: bui duc phuc <phucduc.bui@gmail.com>
ASoC: renesas: fsi: Use clock prepare handling in startup/shutdown
This commit updates the FSI driver to use fsi_clk_prepare() and
fsi_clk_unprepare() during the DAI startup and shutdown phases to
reduce power usage and ensure clock operations run in non-atomic contexts.
> diff --git a/sound/soc/renesas/fsi.c b/sound/soc/renesas/fsi.c
> index b93809b5da15e..c3ac8b30f342b 100644
> --- a/sound/soc/renesas/fsi.c
> +++ b/sound/soc/renesas/fsi.c
> @@ -1644,9 +1644,16 @@ static int fsi_dai_startup(struct snd_pcm_substream *substream,
> struct snd_soc_dai *dai)
> {
> struct fsi_priv *fsi = fsi_get_priv(substream);
> + int ret;
>
> fsi_clk_invalid(fsi);
>
> + if (fsi->clock.count == 0) {
> + ret = fsi_clk_prepare(fsi);
Is it safe to use clock.count to guard the prepare and unprepare operations
in startup and shutdown?
Since clock.count is incremented and decremented during trigger (stream
start/stop) rather than startup/shutdown (stream open/close), this can lead
to state mismatches in multi-stream or full-duplex operations.
For instance, if Playback is opened and started (count=1), and then Capture
is opened, Capture will see count=1 and skip preparing the clock. If Playback
is then stopped and closed, it will unprepare the clock.
If Capture later starts, it will attempt to enable an unprepared clock,
violating the Common Clock Framework and potentially causing hardware failures.
Similarly, this can cause resource leaks if multiple streams are opened before
starting, or if trigger fails and underflows clock.count to UINT_MAX.
Also, looking at the error path for fsi_clk_prepare() which is called here:
sound/soc/renesas/fsi.c:fsi_clk_prepare() {
...
if (!IS_ERR_OR_NULL(spu) && fsi->master->spu_count == 0) {
ret = clk_prepare(spu);
if (ret)
return ret;
}
...
err_spu:
clk_unprepare(spu);
return ret;
}
If fsi->master->spu_count is non-zero when entering the function,
clk_prepare(spu) is correctly skipped.
However, if a subsequent clock preparation fails, the error path unconditionally
calls clk_unprepare(spu). Does this prematurely decrement the shared SPU
clock's reference count, potentially disabling it while other instances are
still actively using it?
> + if (ret)
> + return ret;
> + }
> +
> return 0;
> }
[ ... ]
> @@ -1655,6 +1662,8 @@ static void fsi_dai_shutdown(struct snd_pcm_substream *substream,
> {
> struct fsi_priv *fsi = fsi_get_priv(substream);
>
> + if (fsi->clock.count == 0)
> + fsi_clk_unprepare(fsi);
> fsi_clk_invalid(fsi);
> }
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260510084303.122426-1-phucduc.bui@gmail.com?part=9
next prev parent reply other threads:[~2026-05-12 0:09 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-10 8:42 [PATCH v3 00/10] ASoC: renesas: fsi: Fix system hang by adding SPU clock phucduc.bui
2026-05-10 8:42 ` [PATCH v3 01/10] ASoC: dt-bindings: renesas,fsi: add support multiple clocks phucduc.bui
2026-05-11 7:30 ` Geert Uytterhoeven
2026-05-11 10:25 ` Bui Duc Phuc
2026-05-11 20:45 ` sashiko-bot
2026-05-12 6:42 ` Bui Duc Phuc
2026-05-10 8:42 ` [PATCH v3 02/10] arm: dts: renesas: r8a7740: Add clocks for FSI phucduc.bui
2026-05-11 22:03 ` sashiko-bot
2026-05-10 8:42 ` [PATCH v3 03/10] ASoC: renesas: fsi: Fix trigger stop ordering phucduc.bui
2026-05-11 22:44 ` sashiko-bot
2026-05-10 8:42 ` [PATCH v3 04/10] ASoC: renesas: fsi: Fix register access from in-flight IRQ after shutdown phucduc.bui
2026-05-11 1:52 ` Kuninori Morimoto
2026-05-11 23:22 ` sashiko-bot
2026-05-10 8:42 ` [PATCH v3 05/10] ASoC: renesas: fsi: Move fsi_clk_init() phucduc.bui
2026-05-10 8:42 ` [PATCH v3 06/10] ASoC: renesas: fsi: Add shared SPU clock support phucduc.bui
2026-05-11 1:56 ` Kuninori Morimoto
2026-05-12 3:09 ` Bui Duc Phuc
2026-05-10 8:43 ` [PATCH v3 07/10] ASoC: renesas: fsi: refactor clock initialization phucduc.bui
2026-05-10 12:30 ` Mark Brown
2026-05-11 1:59 ` Kuninori Morimoto
2026-05-11 10:21 ` Bui Duc Phuc
2026-05-11 23:47 ` sashiko-bot
2026-05-10 8:43 ` [PATCH v3 08/10] ASoC: renesas: fsi: add fsi_clk_prepare/unprepare() phucduc.bui
2026-05-11 2:03 ` Kuninori Morimoto
2026-05-11 23:44 ` sashiko-bot
2026-05-10 8:43 ` [PATCH v3 09/10] ASoC: renesas: fsi: Use clock prepare handling in startup/shutdown phucduc.bui
2026-05-11 2:04 ` Kuninori Morimoto
2026-05-11 10:22 ` Bui Duc Phuc
2026-05-12 0:09 ` sashiko-bot [this message]
2026-05-10 8:43 ` [PATCH v3 10/10] ASoC: renesas: fsi: Add SPU clock control in hw_startup/shutdown phucduc.bui
2026-05-11 23:58 ` sashiko-bot
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=20260512000939.F3316C2BCB0@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=krzk+dt@kernel.org \
--cc=phucduc.bui@gmail.com \
--cc=robh@kernel.org \
--cc=sashiko@lists.linux.dev \
--cc=wsa+renesas@sang-engineering.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