[PATCH v7 3/3] soc: qcom: ice: Set ICE clk to TURBO on probe

Abhinaba Rakshit
2026-03-02T10:49:52Z

MMC controller lacks a clock scaling mechanism, unlike the UFS
controller. By default, the MMC controller is set to TURBO mode
during probe, but the ICE clock remains at XO frequency,
leading to read/write performance degradation on eMMC.

To address this, set the ICE clock to TURBO during probe to
align it with the controller clock. This ensures consistent
performance and avoids mismatches between the controller
and ICE clock frequencies.

For platforms where ICE is represented as a separate device,
use the OPP framework to vote for TURBO mode, maintaining
proper voltage and power domain constraints.

Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Abhinaba Rakshit <abhinaba.rakshit@oss.qualcomm.com>
---
drivers/soc/qcom/ice.c | 7 +++++++
1 file changed, 7 insertions(+)

diff --git a/drivers/soc/qcom/ice.c b/drivers/soc/qcom/ice.c
index 7976a18d9a4cda1ad6b62b66ce011e244d0f6856..e8ee02a709574afa4ebb8e4395a8d899bf1d4976 100644
--- a/drivers/soc/qcom/ice.c
+++ b/drivers/soc/qcom/ice.c
@@ -659,6 +659,13 @@ static struct qcom_ice *qcom_ice_create(struct device *dev,
dev_info(dev, "ICE OPP table is not registered, please update your DT\n");
}

+ if (engine->has_opp) {
+ /* Vote for maximum clock rate for maximum performance */
+ err = dev_pm_opp_set_rate(dev, INT_MAX);
+ if (err)
+ dev_warn(dev, "Failed boosting the ICE clk to TURBO\n");
+ }
+
engine->core_clk_freq = clk_get_rate(engine->core_clk);
if (!qcom_ice_check_supported(engine))
return ERR_PTR(-EOPNOTSUPP);

--
2.34.1