[PATCH v2] soc: qcom: ice: Stop probe deferring once ICE isn't detected

From: Sumit Garg

Date: Mon Feb 02 2026 - 03:27:29 EST


From: Sumit Garg <sumit.garg@xxxxxxxxxxxxxxxx>

ICE related SCM calls may not be supported in every TZ environment like
OP-TEE or a no-TZ environment too. So let's try to stop probe deferring
when it's known that ICE feature isn't supported.

This problem only came to notice after the inline encryption drivers were
enabled in the arm64 defconfig by: commit 5f37788adedd ("arm64: defconfig:
Enable SCSI UFS Crypto and Block Inline encryption drivers").

Fixes: 2afbf43a4aec ("soc: qcom: Make the Qualcomm UFS/SDCC ICE a dedicated driver")
Signed-off-by: Sumit Garg <sumit.garg@xxxxxxxxxxxxxxxx>
---

Changes in v2:
- Keep the probe deferring intact but stop it once it's know ICE SCM
calls aren't supported by the TZ firmware.

drivers/soc/qcom/ice.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/soc/qcom/ice.c b/drivers/soc/qcom/ice.c
index b203bc685cad..5a630c9010ee 100644
--- a/drivers/soc/qcom/ice.c
+++ b/drivers/soc/qcom/ice.c
@@ -559,7 +559,7 @@ static struct qcom_ice *qcom_ice_create(struct device *dev,

if (!qcom_scm_ice_available()) {
dev_warn(dev, "ICE SCM interface not found\n");
- return NULL;
+ return ERR_PTR(-EOPNOTSUPP);
}

engine = devm_kzalloc(dev, sizeof(*engine), GFP_KERNEL);
@@ -648,11 +648,14 @@ static struct qcom_ice *of_qcom_ice_get(struct device *dev)
}

ice = platform_get_drvdata(pdev);
- if (!ice) {
+ if (IS_ERR_OR_NULL(ice)) {
dev_err(dev, "Cannot get ice instance from %s\n",
dev_name(&pdev->dev));
platform_device_put(pdev);
- return ERR_PTR(-EPROBE_DEFER);
+ if (PTR_ERR(ice) == -EOPNOTSUPP)
+ return NULL;
+ else
+ return ERR_PTR(-EPROBE_DEFER);
}

link = device_link_add(dev, &pdev->dev, DL_FLAG_AUTOREMOVE_SUPPLIER);
@@ -726,7 +729,7 @@ static int qcom_ice_probe(struct platform_device *pdev)
}

engine = qcom_ice_create(&pdev->dev, base);
- if (IS_ERR(engine))
+ if (IS_ERR(engine) && PTR_ERR(engine) != -EOPNOTSUPP)
return PTR_ERR(engine);

platform_set_drvdata(pdev, engine);
--
2.51.0