Re: [PATCH v4 3/5] soc: qcom: ice: Return proper error codes from devm_of_qcom_ice_get() instead of NULL
From: Sumit Garg
Date: Fri Mar 06 2026 - 03:48:48 EST
Hey Mani,
On Mon, Mar 2, 2026 at 6:30 PM Manivannan Sadhasivam via B4 Relay
<devnull+manivannan.sadhasivam.oss.qualcomm.com@xxxxxxxxxx> wrote:
>
> From: Manivannan Sadhasivam <manivannan.sadhasivam@xxxxxxxxxxxxxxxx>
>
> devm_of_qcom_ice_get() currently returns NULL if ICE SCM is not available
> or "qcom,ice" property is not found in DT. But this confuses the clients
> since NULL doesn't convey the reason for failure. So return proper error
> codes instead of NULL.
>
> Reported-by: Sumit Garg <sumit.garg@xxxxxxxxxxxxxxxx>
> Reviewed-by: Konrad Dybcio <konrad.dybcio@xxxxxxxxxxxxxxxx>
> Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@xxxxxxxxxxxxxxxx>
> ---
> drivers/soc/qcom/ice.c | 9 ++++-----
> 1 file changed, 4 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/soc/qcom/ice.c b/drivers/soc/qcom/ice.c
> index 833d23dc7b06..d1efc676b63c 100644
> --- a/drivers/soc/qcom/ice.c
> +++ b/drivers/soc/qcom/ice.c
> @@ -561,7 +561,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);
> }
With this patch-set on top of v7.0-rc2, I still see UFS probe failing
when ICE isn't supported with OP-TEE as follows:
[ 5.401558] qcom-ice 1d88000.crypto: ICE SCM interface not found
[ 5.419482] qcom-ice 1d88000.crypto: probe with driver qcom-ice
failed with error -95
<snip>
[ 18.662977] ufshcd-qcom 1d84000.ufshc: freq-table-hz property not specified
[ 18.670193] ufshcd-qcom 1d84000.ufshc: ufshcd_populate_vreg: Unable
to find vdd-hba-supply regulator, assuming enabled
[ 18.737665] platform 1d84000.ufshc: deferred probe pending:
ufshcd-qcom: ufshcd_pltfrm_init() failed
[ 18.747141] platform 3370000.codec: deferred probe pending:
platform: wait for supplier /soc@0/pinctrl@33c0000/dmic23-data-state
Maybe it's the "qcom-ice" driver failure leading to this deferred
probe problem again.
-Sumit
>
> engine = devm_kzalloc(dev, sizeof(*engine), GFP_KERNEL);
> @@ -643,7 +643,7 @@ static struct qcom_ice *of_qcom_ice_get(struct device *dev)
> struct device_node *node __free(device_node) = of_parse_phandle(dev->of_node,
> "qcom,ice", 0);
> if (!node)
> - return NULL;
> + return ERR_PTR(-ENODEV);
>
> pdev = of_find_device_by_node(node);
> if (!pdev) {
> @@ -696,8 +696,7 @@ static void devm_of_qcom_ice_put(struct device *dev, void *res)
> * phandle via 'qcom,ice' property to an ICE DT, the ICE instance will already
> * be created and so this function will return that instead.
> *
> - * Return: ICE pointer on success, NULL if there is no ICE data provided by the
> - * consumer or ERR_PTR() on error.
> + * Return: ICE pointer on success, ERR_PTR() on error.
> */
> struct qcom_ice *devm_of_qcom_ice_get(struct device *dev)
> {
> @@ -708,7 +707,7 @@ struct qcom_ice *devm_of_qcom_ice_get(struct device *dev)
> return ERR_PTR(-ENOMEM);
>
> ice = of_qcom_ice_get(dev);
> - if (!IS_ERR_OR_NULL(ice)) {
> + if (!IS_ERR(ice)) {
> *dr = ice;
> devres_add(dev, dr);
> } else {
>
> --
> 2.51.0
>
>