Re: [PATCH v4 02/11] soc: qcom: ice: Allow explicit votes on 'iface' clock for ICE
From: Manivannan Sadhasivam
Date: Tue Mar 24 2026 - 12:40:03 EST
On Mon, Mar 23, 2026 at 02:47:55PM +0530, Harshal Dev wrote:
> Since Qualcomm inline-crypto engine (ICE) is now a dedicated driver
> de-coupled from the QCOM UFS driver, it explicitly votes for its required
> clocks during probe. For scenarios where the 'clk_ignore_unused' flag is
> not passed on the kernel command line, to avoid potential unclocked ICE
> hardware register access during probe the ICE driver should additionally
> vote on the 'iface' clock.
> Also update the suspend and resume callbacks to handle un-voting and voting
> on the 'iface' clock.
>
> Fixes: 2afbf43a4aec6 ("soc: qcom: Make the Qualcomm UFS/SDCC ICE a dedicated driver")
> Signed-off-by: Harshal Dev <harshal.dev@xxxxxxxxxxxxxxxx>
Reviewed-by: Manivannan Sadhasivam <mani@xxxxxxxxxx>
- Mani
> ---
> drivers/soc/qcom/ice.c | 17 +++++++++++++++--
> 1 file changed, 15 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/soc/qcom/ice.c b/drivers/soc/qcom/ice.c
> index b203bc685cad..bf4ab2d9e5c0 100644
> --- a/drivers/soc/qcom/ice.c
> +++ b/drivers/soc/qcom/ice.c
> @@ -108,6 +108,7 @@ struct qcom_ice {
> void __iomem *base;
>
> struct clk *core_clk;
> + struct clk *iface_clk;
> bool use_hwkm;
> bool hwkm_init_complete;
> u8 hwkm_version;
> @@ -312,8 +313,13 @@ int qcom_ice_resume(struct qcom_ice *ice)
>
> err = clk_prepare_enable(ice->core_clk);
> if (err) {
> - dev_err(dev, "failed to enable core clock (%d)\n",
> - err);
> + dev_err(dev, "Failed to enable core clock: %d\n", err);
> + return err;
> + }
> +
> + err = clk_prepare_enable(ice->iface_clk);
> + if (err) {
> + dev_err(dev, "Failed to enable iface clock: %d\n", err);
> return err;
> }
> qcom_ice_hwkm_init(ice);
> @@ -323,6 +329,7 @@ EXPORT_SYMBOL_GPL(qcom_ice_resume);
>
> int qcom_ice_suspend(struct qcom_ice *ice)
> {
> + clk_disable_unprepare(ice->iface_clk);
> clk_disable_unprepare(ice->core_clk);
> ice->hwkm_init_complete = false;
>
> @@ -579,11 +586,17 @@ static struct qcom_ice *qcom_ice_create(struct device *dev,
> engine->core_clk = devm_clk_get_optional_enabled(dev, "ice_core_clk");
> if (!engine->core_clk)
> engine->core_clk = devm_clk_get_optional_enabled(dev, "ice");
> + if (!engine->core_clk)
> + engine->core_clk = devm_clk_get_optional_enabled(dev, "core");
> if (!engine->core_clk)
> engine->core_clk = devm_clk_get_enabled(dev, NULL);
> if (IS_ERR(engine->core_clk))
> return ERR_CAST(engine->core_clk);
>
> + engine->iface_clk = devm_clk_get_optional_enabled(dev, "iface");
> + if (IS_ERR(engine->iface_clk))
> + return ERR_CAST(engine->iface_clk);
> +
> if (!qcom_ice_check_supported(engine))
> return ERR_PTR(-EOPNOTSUPP);
>
>
> --
> 2.34.1
>
--
மணிவண்ணன் சதாசிவம்