[PATCH v2 00/11] Add explicit clock vote and enable power-domain for QCOM-ICE

Harshal Dev
2026-03-10T08:06:48Z

When the kernel is booted without the 'clk_ignore_unused' and
'pd_ignore_unused' command‑line flags, votes for unused clocks and power
domains are dropped by the kernel post late_init and deferred probe
timeout. Depending on the relative timing between the ICE probe and the
kernel disabling the unused clocks and power domains occasional unclocked
register accesses or 'stuck' clocks are observed during QCOM‑ICE probe.
When the 'iface' clock is not voted on, unclocked register access would
be observed. On the other hand, if the associated power-domain for ICE
is not enabled, a 'stuck' clock is observed.

This patch series resolves both of these problems by adding explicit
power‑domain enablement and 'iface' clock‑vote handling to the QCOM‑ICE
driver.

The clock 'stuck' issue was first reported on Qualcomm RideSX4 (sa8775p)
platform: https://lore.kernel.org/all/ZZYTYsaNUuWQg3tR@x1/

Issue with unclocked ICE register access is easily reproducible on
on Qualcomm RB3Gen2 (kodiak) platform when 'clk_ignore_unused' is
not passed on the kernel command-line.

This patch series has been validated on: SM8650-MTP, RB3Gen2 and
Lemans-EVK.

Signed-off-by: Harshal Dev <harshal.dev@oss.qualcomm.com>
---
Changes in v2:
- Updated the DT bindings and ICE driver source to ensure no ABI breaks are
made in this patch series. A follow-up patch series will mark the clocks
and power-domain as required to preserve bisectability.
- Added list of allowed clock-names to the DT-binding.
- Added Fixes tag to mark the original regressions and ensure back-porting
for stable trees.
- Updated the commit messages to explicitly mention the problem of
potential unclocked register access and stuck clocks during probe.
- Dropped explicit calls to pm_runtime_* APIs from ICE probe, suspend and
resume.
- Link to v1: https://lore.kernel.org/r/20260123-qcom_ice_power_and_clk_vote-v1-0-e9059776f85c@qti.qualcomm.com

---
Harshal Dev (11):
dt-bindings: crypto: qcom,ice: Allow power-domain and iface clk
arm64: dts: qcom: kaanapali: Add power-domain and iface clk for ice node
arm64: dts: qcom: lemans: Add power-domain and iface clk for ice node
arm64: dts: qcom: monaco: Add power-domain and iface clk for ice node
arm64: dts: qcom: sc7180: Add power-domain and iface clk for ice node
arm64: dts: qcom: kodiak: Add power-domain and iface clk for ice node
arm64: dts: qcom: sm8450: Add power-domain and iface clk for ice node
arm64: dts: qcom: sm8550: Add power-domain and iface clk for ice node
arm64: dts: qcom: sm8650: Add power-domain and iface clk for ice node
arm64: dts: qcom: sm8750: Add power-domain and iface clk for ice node
soc: qcom: ice: Allow explicit votes on 'iface' clock for ICE

.../bindings/crypto/qcom,inline-crypto-engine.yaml | 16 +++++++++++++++-
arch/arm64/boot/dts/qcom/kaanapali.dtsi | 6 +++++-
arch/arm64/boot/dts/qcom/kodiak.dtsi | 6 +++++-
arch/arm64/boot/dts/qcom/lemans.dtsi | 6 +++++-
arch/arm64/boot/dts/qcom/monaco.dtsi | 6 +++++-
arch/arm64/boot/dts/qcom/sc7180.dtsi | 6 +++++-
arch/arm64/boot/dts/qcom/sm8450.dtsi | 6 +++++-
arch/arm64/boot/dts/qcom/sm8550.dtsi | 6 +++++-
arch/arm64/boot/dts/qcom/sm8650.dtsi | 6 +++++-
arch/arm64/boot/dts/qcom/sm8750.dtsi | 6 +++++-
drivers/soc/qcom/ice.c | 11 +++++++++++
11 files changed, 71 insertions(+), 10 deletions(-)
---
base-commit: 0f853ca2a798ead9d24d39cad99b0966815c582a
change-id: 20260120-qcom_ice_power_and_clk_vote-769704f5036a

Best regards,
--
Harshal Dev <harshal.dev@oss.qualcomm.com>