From: sashiko-bot@kernel.org
To: "Neil Armstrong" <neil.armstrong@linaro.org>
Cc: linux-sound@vger.kernel.org, devicetree@vger.kernel.org,
linux-clk@vger.kernel.org, linux-gpio@vger.kernel.org,
robh@kernel.org, conor+dt@kernel.org
Subject: Re: [PATCH RFC 16/23] ASoC: qcom: lpass: enable the right codec_mem clock when usin LPM memory
Date: Fri, 13 Nov 2026 19:06:13 +0000 [thread overview]
Message-ID: <sashiko-outbox-213502@kernel.org> (raw)
In-Reply-To: <20261113-topic-sm8650-el2-v1-16-5183f6aab9fc@linaro.org>
Thank you for your contribution! Sashiko AI review found 2 potential
issues to consider:
- [Medium] ASoC: qcom: lpass: LPM clocks not parsed when only
mi2s_lpm_enable is set
- [Medium] ASoC: qcom: lpass: unchecked mem_clk enable and leak in
startup()
--
commit 6968d3f5a8288f5418d4e48725abed1263de22d5
Author: Neil Armstrong <neil.armstrong@linaro.org>
ASoC: qcom: lpass: enable the right codec_mem clock when usin LPM memory
This commit adds a helper to select the codec_mem clock matching a given LPM
buffer offset and enables the corresponding LPM memory clock during DAI
startup and shutdown for Codec DMA and LPM-backed MI2S ports.
> diff --git a/sound/soc/qcom/lpass-cpu.c b/sound/soc/qcom/lpass-cpu.c
> index 4bbcd59ebd602..302c31b23090f 100644
> --- a/sound/soc/qcom/lpass-cpu.c
> +++ b/sound/soc/qcom/lpass-cpu.c
> @@ -89,6 +89,17 @@ static int lpass_cpu_daiops_startup(struct snd_pcm_substream *substream,
> unsigned int port_id = mi2s_port_id(dai->driver->id);
> int ret;
>
> + if (is_lpm_mi2s_port(drvdata, dai->driver->id)) {
> + struct clk *mem_clk = drvdata->va_mem0;
> +
> + if (drvdata->mi2s_lpm[port_id] == LPASS_RXTX_CDC_LPM)
> + mem_clk = lpass_cdc_dma_mem_clk(drvdata,
> + drvdata->mi2s_lpm_offset[port_id]);
[Severity: Medium]
Can mem_clk be NULL here when a board enables LPM-backed MI2S ports without
any Codec DMA DAIs?
In asoc_qcom_lpass_cpu_platform_probe(), of_lpass_cdc_dma_clks_parse() is only
called when drvdata->codec_dma_enable is set, whereas the LPM memory resources
are fetched when either codec_dma_enable or mi2s_lpm_enable is set:
sound/soc/qcom/lpass-cpu.c:asoc_qcom_lpass_cpu_platform_probe() {
...
ret = of_lpass_cdc_dma_clks_parse(dev, drvdata);
if (ret) {
dev_err(dev, "failed to get cdc dma clocks %d\n", ret);
return ret;
}
}
...
if (drvdata->codec_dma_enable || drvdata->mi2s_lpm_enable) {
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "lpass-rxtx-cdc-dma-lpm");
...
}
When only drvdata->mi2s_lpm_enable is set, drvdata->va_mem0 and
drvdata->codec_mem0..3 are never populated and remain NULL. Passing NULL to
clk_set_rate() and clk_prepare_enable() is a no-op, leaving the LPM SRAM
unclocked when the stream accesses the LPM buffer. Calling
of_lpass_cdc_dma_clks_parse() under the codec_dma_enable || mi2s_lpm_enable
check would ensure the clocks are acquired.
> +
> + clk_set_rate(mem_clk, LPASS_CODEC_MEM_HZ_NORMAL);
> + clk_prepare_enable(mem_clk);
> + }
> +
> ret = clk_prepare_enable(drvdata->mi2s_osr_clk[port_id]);
> if (ret) {
> dev_err(dai->dev, "error in enabling mi2s osr clk: %d\n", ret);
[Severity: Medium]
Does this leak the prepare and enable references on mem_clk if enabling
mi2s_osr_clk or preparing mi2s_bit_clk fails?
Whendai->driver->ops->startup() returns an error, snd_soc_dai_startup() does
not mark the DAI as active, so snd_soc_dai_shutdown() will not call
lpass_cpu_daiops_shutdown() to release mem_clk. In addition, neither
lpass_cpu_daiops_startup() nor lpass_cdc_dma_daiops_startup() checks the
return values of clk_set_rate() and clk_prepare_enable() on mem_clk, which can
leave LPM memory unclocked and cause an unbalanced clk_disable_unprepare() on
shutdown.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261113-topic-sm8650-el2-v1-0-5183f6aab9fc@linaro.org?part=16
next prev parent reply other threads:[~2026-11-13 19:06 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-13 18:38 [PATCH RFC 00/23] arm64: qcom: enable SM8650 audio without ADSP firmware Neil Armstrong
2026-11-13 18:38 ` [PATCH RFC 01/23] dt-bindings: clock: qcom: add SM8650 LPASS core & audio clock controllers Neil Armstrong
2026-11-13 18:57 ` sashiko-bot
2026-11-13 18:38 ` [PATCH RFC 02/23] clk: " Neil Armstrong
2026-11-13 19:14 ` sashiko-bot
2026-11-13 18:38 ` [PATCH RFC 03/23] dt-bindings: pinctrl: qcom,sm8650-lpass-lpi-pinctrl: document clocks and power domaines when ADSP is not used Neil Armstrong
2026-11-13 19:02 ` sashiko-bot
2026-11-13 18:38 ` [PATCH RFC 04/23] ASoC: dt-bindings: qcom,lpass: add Senary & Septenary MI2S ids Neil Armstrong
2026-11-13 18:38 ` [PATCH RFC 05/23] ASoC: dt-bindings: qcom,lpass: add WSA RX and TX channels ids Neil Armstrong
2026-11-13 18:38 ` [PATCH RFC 06/23] ASoC: dt-bindings: qcom,lpass-*-macro: document less clock when ADSP is not used Neil Armstrong
2026-11-13 18:38 ` [PATCH RFC 07/23] ASoC: dt-bindings: qcom,lpass-cpu: document the SM8650 LPASS Neil Armstrong
2026-11-13 18:57 ` sashiko-bot
2026-11-13 18:38 ` [PATCH RFC 08/23] ASoC: qcom: lpass-cpu: get the optional codec_mem3 clock Neil Armstrong
2026-11-13 18:38 ` [PATCH RFC 09/23] ASoC: qcom: lpass: add support for optional WSA interface Neil Armstrong
2026-11-13 19:11 ` sashiko-bot
2026-11-13 18:38 ` [PATCH RFC 10/23] ASoC: qcom: lpass-cdc-dma: add support for WSA codec DMA Neil Armstrong
2026-11-13 19:07 ` sashiko-bot
2026-11-13 18:38 ` [PATCH RFC 11/23] ASoC: qcom: lpass: prepare to handle multiple lpaifs for i2s Neil Armstrong
2026-11-13 18:38 ` [PATCH RFC 12/23] ASoC: qcom: lpass: add support for MI2S_SENARY & MI2S_SEPTENARY Neil Armstrong
2026-11-13 18:38 ` [PATCH RFC 13/23] ASoC: qcom: lpass: support mapping I2S ports to multiple LPAIFs Neil Armstrong
2026-11-13 19:04 ` sashiko-bot
2026-11-13 18:38 ` [PATCH RFC 14/23] ASoC: qcom: lpass: support LPM memory type for I2S LPAIFs Neil Armstrong
2026-11-13 18:38 ` [PATCH RFC 15/23] ASoC: qcom: lpass: allocate LPM buffer memory to DAIs Neil Armstrong
2026-11-13 19:12 ` sashiko-bot
2026-11-13 18:38 ` [PATCH RFC 16/23] ASoC: qcom: lpass: enable the right codec_mem clock when usin LPM memory Neil Armstrong
2026-11-13 19:06 ` sashiko-bot [this message]
2026-11-13 18:38 ` [PATCH RFC 17/23] ASoC: qcom: add SM8650 LPASS CPU driver Neil Armstrong
2026-11-13 19:22 ` sashiko-bot
2026-11-13 18:38 ` [PATCH RFC 18/23] ASoC: qcom: swd: allow LPASS_CDC_DMA_WSA_RX0 as soundwire dai Neil Armstrong
2026-11-13 18:38 ` [PATCH RFC 19/23] ASoC: qcom: sc8280xp: allow using the sc8280xp card with lpass-cpu Neil Armstrong
2026-11-13 19:12 ` sashiko-bot
2026-11-13 18:38 ` [PATCH RFC 20/23] arm64: dts: qcom: sm8650: move EL1 Gunyah nodes to sm8650-el1.dtsi Neil Armstrong
2026-11-13 19:08 ` Val Packett
2026-11-13 19:11 ` sashiko-bot
2026-11-13 18:38 ` [PATCH RFC 21/23] arm64: dts: qcom: add SM8650 LPASS CPU dtsi Neil Armstrong
2026-11-13 19:18 ` sashiko-bot
2026-11-13 18:38 ` [PATCH RFC 22/23] arm64: dts: qcom: sm8650-valve-deckard: enable audio Neil Armstrong
2026-11-13 19:23 ` sashiko-bot
2026-11-13 18:38 ` [PATCH RFC 23/23] arm64: defconfig: enable the SM8650 LPASS CPU driver Neil Armstrong
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=sashiko-outbox-213502@kernel.org \
--to=sashiko-bot@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=linux-clk@vger.kernel.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-sound@vger.kernel.org \
--cc=neil.armstrong@linaro.org \
--cc=robh@kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
/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.