From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 81F0538F62D for ; Mon, 2 Mar 2026 10:12:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772446325; cv=none; b=MO6o3TZlPetS2XvdoBNXVMitJXfXcdF0om+HcSX2zVuQrNGXlTBl1CcYDlhnTom/gTy1uh10Fj2zK0N7+ZFjoKwZzvqluE9Aua6bayEErfiSfnS4NjE7I/MQVQ3h3VewDMmPa/n06sjOi/awT792LuHgajxqpPDf90VLqlfcjbE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772446325; c=relaxed/simple; bh=txdY5rJ/ZRLNRF9fgeSs9EjL4oxzE2aFUDw8jLdrJpo=; h=Subject:To:Cc:References:From:Message-ID:Date:MIME-Version: In-Reply-To:Content-Type; b=DPUiwRWRBrNMJE7nRF5uFqFBCf7/8MswiWGKaOs8+gIvxxqZF2S82NiE96q3h9nnQM6HsHM/QSZyZ/RdoirMwJWoE2ls0yRdDLkgB3ejzczNZzRl27KTZZdfoxKX9tqYj/2ZJzL1yEkrxZ0NZHVDtupcar7Mxw/Zx2hFhnMWgsg= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=pHv8Y92O; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=JRxp4kpk; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="pHv8Y92O"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="JRxp4kpk" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62283lNx249402 for ; Mon, 2 Mar 2026 10:12:03 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= qYtlAUqEB4PsAxcph4isW3Atz2Cxuy6C5HTehGmJZIc=; b=pHv8Y92ORgWuZQvE Dv1vZHnzRiq4Rxg9Qf8YbmYZZwspNFX1eMLxm4EVDF59j8BZYcZchO6Zuix0W10T hsi3o8pvD8cB4mzvqNyMntd2em0PjXOGroc/ONvosYqN7Amq56YZxVD8eMU0zS1L wYZ91dZ3mwpo+L/UN9Y3AC28sMEM2VL0QFbFKa7pkpz2q5KuWus+hoZLOOUNtdgI qhaF3SOBzjBGGVxd3uO+vKxW7vMOFZYrumSrPz6FhMgw7+Ktp+96WJNVxyzkUHMj XiS48K1tCDxX3PiafQj/eMUEun25FNNTu8LFIx8qnuTPpRer5JUq5CwUVT7YkNLX +wxnSQ== Received: from mail-pf1-f197.google.com (mail-pf1-f197.google.com [209.85.210.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cmw649w86-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 02 Mar 2026 10:12:03 +0000 (GMT) Received: by mail-pf1-f197.google.com with SMTP id d2e1a72fcca58-8274dbdbadcso10458680b3a.0 for ; Mon, 02 Mar 2026 02:12:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772446323; x=1773051123; darn=vger.kernel.org; h=content-transfer-encoding:content-language:in-reply-to:mime-version :user-agent:date:message-id:from:references:cc:to:subject:from:to:cc :subject:date:message-id:reply-to; bh=qYtlAUqEB4PsAxcph4isW3Atz2Cxuy6C5HTehGmJZIc=; b=JRxp4kpkh2l6hpacXUtnN6TmC/jQZYWGE9A97eUqEfHWfYsehvEuYADsfDKa/A8GaJ kQHlXgMq5VVvQenExudrYdXn0MDUuQ1RRaRaPh1tUIlHWb9sge2mbR+wViPWV2eUm8c6 GcxdDactjeFl9MQbDc7GdRoAb6N0QCeYQuS151wu6PG12Sg7w0+zyZoGoMST+0iAvJe7 nutRWaxOWU0kdvtaw1cksezqe9rvdUKwwoMG+QcK1JFC77JX+DbeSJmKxyGREfT9Gz2j oiGwrq7z+HvmlyHbIZTw4hktE4lLCLtrbOnLYuE65fC+/rcKicff0dg9mW11ktkFShaa WNBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772446323; x=1773051123; h=content-transfer-encoding:content-language:in-reply-to:mime-version :user-agent:date:message-id:from:references:cc:to:subject:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=qYtlAUqEB4PsAxcph4isW3Atz2Cxuy6C5HTehGmJZIc=; b=dJ12X9UA4TWj6VdgjzM1STKndUXpKAeUmkW9CXqsgAT9z2OhuITEADxhPB0nMiMNIl Ou5FuMuGjeiCiWN72vQkAusozdvnchlQylGcvQvjqZfb7cUsZZEsP7AK3BlvBvmZXjm/ sn2Ufki/1zefC3no6sRRqAzxqeSfcafqzlOOK9eyxYeOZbZsuRD3huV3VuJD/uOSYB5L TUVXN4m3u7/RuP/q355+zcTnrdsmrwE6j3Hkw+y8IGLZljYmlKB4agzxJBUhqqjaS2PY 0xawgXxHBAR0Mb7QskEBelmnZ5u7a6p+2PWZmVOiMJkXrJ0MtB/jVBaz6EPvZqXvSjqx fbpg== X-Forwarded-Encrypted: i=1; AJvYcCVq23eWjrkIiJqDsZiAOkRDSinwVUROjxvWrLeM581Af4pC0MCWgBVXupvgY6TeDAkqpTiUkTdXXbR1Mds=@vger.kernel.org X-Gm-Message-State: AOJu0YyL1BPV3p3PUDyKoBmwEPmKxvqMC64xXVlceAj36gZwXlKQmzpJ Tp7v08vtx+nfEspQksDJdiFpms2dj0exxnQdKi+0QbAsG2U3li1fUdJdilXBIhCgXdLlkgGJa+l uT5hDjJ/xQ5WN3iazIwmNlTTjKmUBtsNmwIaw2Iad/m1cknQh/mgRsRDz87k9/pJ6bR8= X-Gm-Gg: ATEYQzzY7cbovw0QocxUbnEkaZOkw29Y7+VQuMbq6/W4znzkiYip7AbWWuUYT8zhrHq /jl1bvobOZB4xpYuYxEV0pRdH/dYWtfQSGAmsJg2B3OItZAQg/Qd3dy9XE1/cMO40ZV7DJbaSGh RhXC/VxLvhzh0Wn5xWEkPwOmK2OhRjtP/jpNmv8YKhMqZH4hyekUAn4XC2o1VE/ZRZb6G7iJBAO PgmTHpDVPLfUUENMAR85UTbTQteF+994OnnxpnLfNIdW25r0CK8kho0Hiri1e43xCXDYnHX2hsF Fur4U9I/Xr8Ehc15W0deP9bBLtgIokCVFASCAynSBQL5iQI3kvzUH378fwrlFtYf4He8TfAhXeA ypips2nhIbbRgakqXD4ykz/1fE5hlye4RPAP5kG+zIr1xFQPjtw== X-Received: by 2002:a05:6a00:4ac9:b0:81e:408e:47d2 with SMTP id d2e1a72fcca58-8274da12e28mr9293445b3a.53.1772446321165; Mon, 02 Mar 2026 02:12:01 -0800 (PST) X-Received: by 2002:a05:6a00:4ac9:b0:81e:408e:47d2 with SMTP id d2e1a72fcca58-8274da12e28mr9293421b3a.53.1772446320642; Mon, 02 Mar 2026 02:12:00 -0800 (PST) Received: from [10.217.222.63] ([202.46.22.19]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82739d4c910sm12494189b3a.8.2026.03.02.02.11.55 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 02 Mar 2026 02:12:00 -0800 (PST) Subject: Re: [PATCH v3 1/4] soc: qcom: ice: Fix race between qcom_ice_probe() and of_qcom_ice_get() To: manivannan.sadhasivam@oss.qualcomm.com, Bjorn Andersson , Konrad Dybcio , Adrian Hunter , Ulf Hansson , Manivannan Sadhasivam , "James E.J. Bottomley" , "Martin K. Petersen" , Abel Vesa Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mmc@vger.kernel.org, linux-scsi@vger.kernel.org, Sumit Garg , stable@vger.kernel.org References: <20260223-qcom-ice-fix-v3-0-6ca5846329f7@oss.qualcomm.com> <20260223-qcom-ice-fix-v3-1-6ca5846329f7@oss.qualcomm.com> From: Neeraj Soni Message-ID: <5e9a399a-074b-4b41-2e10-f2ed654eafcf@oss.qualcomm.com> Date: Mon, 2 Mar 2026 15:41:54 +0530 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.12.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 In-Reply-To: <20260223-qcom-ice-fix-v3-1-6ca5846329f7@oss.qualcomm.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-GB Content-Transfer-Encoding: 7bit X-Proofpoint-GUID: C5XgvOQ0VywavcxNP3jt4K0ob2kA2PQf X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzAyMDA4NSBTYWx0ZWRfX/ytumM4MBwvW cRvjPvriHexR3jWeDRs1KB5tSosFoGg/+dh1dnDHifLzSmgWq0vJ6Vd70BqSk94tKl8CWlvuP7P uF8+Yv4v8mkEN97Y0ep9dt56m2vY3m0ZngCkvpbx1Da/Jxbpf00LJL0YgI1CjbdOF3zxzAl3g14 nqxnFnj9jQHXFVoUkNthMZsM4qES4zoW0YN5yby2H2xVhI7V0fDaxSsS9Tq+cnXATWAdEeBErHA tFLwm8WPVZTumk0mN4ORfJqDouFmzND4kvicpQclYpMmV2Zam1gXrP6T1qJ7HbxPyOTWDv3DIZ5 Gf0mzc0FrOGGlQ9JDTMu7vkbXQKXMnQaIex4C83ncWJIMmHboN3Iv8iCzvO2xc1c4FdeAmUTo5q NgNYBtmRe3Ops64w0IJLSO+JUGGJ14Xpls0Z0WdTS93ZrA8sDa3szRmaW6a1bjbIWPy1LL2kVvY tq6rxYq2NF0fQpihDgA== X-Proofpoint-ORIG-GUID: C5XgvOQ0VywavcxNP3jt4K0ob2kA2PQf X-Authority-Analysis: v=2.4 cv=I5Vohdgg c=1 sm=1 tr=0 ts=69a56273 cx=c_pps a=rEQLjTOiSrHUhVqRoksmgQ==:117 a=fChuTYTh2wq5r3m49p7fHw==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=MqxRADgNEBqUf3RlVf8A:9 a=QEXdDO2ut3YA:10 a=2VI0MkxyNR6bbpdq8BZq:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-02_02,2026-02-27_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 adultscore=0 priorityscore=1501 lowpriorityscore=0 clxscore=1015 phishscore=0 impostorscore=0 bulkscore=0 spamscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603020085 On 2/23/2026 1:32 PM, Manivannan Sadhasivam via B4 Relay wrote: > From: Manivannan Sadhasivam > > The current platform driver design causes probe ordering races with > consumers (UFS, eMMC) due to ICE's dependency on SCM firmware calls. If ICE > probe fails (missing ICE SCM or DT registers), devm_of_qcom_ice_get() loops > with -EPROBE_DEFER, leaving consumers non-functional even when ICE should > be gracefully disabled. devm_of_qcom_ice_get() doesn't know if the ICE > driver probe has failed due to above reasons or it is waiting for the SCM > driver. > > Moreover, there is no devlink dependency between ICE and consumer drivers > as 'qcom,ice' is not considered as a DT 'supplier'. So the consumer drivers > have no idea of when the ICE driver is going to probe. > > To address these issues, introduce a global ice_handle to store the valid > ICE handle pointer, and set during successful ICE driver probe. On probe > failure, set it to an error pointer and propagate the error from > of_qcom_ice_get(). > > Additionally, add a global ice_mutex to synchronize qcom_ice_probe() and > of_qcom_ice_get(). > > Note that this change only fixes the standalone ICE DT node bindings and > not the ones with 'ice' range embedded in the consumer nodes, where there > is no issue. > > Cc: # 6.4 > Fixes: 2afbf43a4aec ("soc: qcom: Make the Qualcomm UFS/SDCC ICE a dedicated driver") > Reported-by: Sumit Garg > Signed-off-by: Manivannan Sadhasivam > --- > drivers/soc/qcom/ice.c | 44 +++++++++++++++++++++++++++----------------- > 1 file changed, 27 insertions(+), 17 deletions(-) > > diff --git a/drivers/soc/qcom/ice.c b/drivers/soc/qcom/ice.c > index b203bc685cad..3c3c189e24f9 100644 > --- a/drivers/soc/qcom/ice.c > +++ b/drivers/soc/qcom/ice.c > @@ -113,6 +113,9 @@ struct qcom_ice { > u8 hwkm_version; > }; > > +static DEFINE_MUTEX(ice_mutex); > +static struct qcom_ice *ice_handle; > + > static bool qcom_ice_check_supported(struct qcom_ice *ice) > { > u32 regval = qcom_ice_readl(ice, QCOM_ICE_REG_VERSION); > @@ -608,7 +611,6 @@ static struct qcom_ice *qcom_ice_create(struct device *dev, > static struct qcom_ice *of_qcom_ice_get(struct device *dev) > { > struct platform_device *pdev = to_platform_device(dev); > - struct qcom_ice *ice; > struct resource *res; > void __iomem *base; > struct device_link *link; > @@ -631,6 +633,22 @@ static struct qcom_ice *of_qcom_ice_get(struct device *dev) > return qcom_ice_create(&pdev->dev, base); > } > > + guard(mutex)(&ice_mutex); > + > + /* > + * If ice_handle is NULL, then it means the ICE driver is not probed > + * yet. So return -EPROBE_DEFER to let the client try later. > + */ > + if (!ice_handle) > + return ERR_PTR(-EPROBE_DEFER); > + > + /* > + * If ice_handle has error code, then it means the ICE driver has probe > + * failed. So return the handle for the client to digest it. > + */ > + if (IS_ERR(ice_handle)) > + return ice_handle; > + > /* > * If the consumer node does not provider an 'ice' reg range > * (legacy DT binding), then it must at least provide a phandle > @@ -647,24 +665,16 @@ static struct qcom_ice *of_qcom_ice_get(struct device *dev) > return ERR_PTR(-EPROBE_DEFER); > } > > - ice = platform_get_drvdata(pdev); > - if (!ice) { > - dev_err(dev, "Cannot get ice instance from %s\n", > - dev_name(&pdev->dev)); > - platform_device_put(pdev); > - return ERR_PTR(-EPROBE_DEFER); > - } > - > link = device_link_add(dev, &pdev->dev, DL_FLAG_AUTOREMOVE_SUPPLIER); > if (!link) { > dev_err(&pdev->dev, > "Failed to create device link to consumer %s\n", > dev_name(dev)); > platform_device_put(pdev); > - ice = ERR_PTR(-EINVAL); > + return ERR_PTR(-EINVAL); > } > > - return ice; > + return ice_handle; > } > > static void qcom_ice_put(const struct qcom_ice *ice) > @@ -716,20 +726,20 @@ EXPORT_SYMBOL_GPL(devm_of_qcom_ice_get); > > static int qcom_ice_probe(struct platform_device *pdev) > { > - struct qcom_ice *engine; > void __iomem *base; > > + guard(mutex)(&ice_mutex); > + > base = devm_platform_ioremap_resource(pdev, 0); > if (IS_ERR(base)) { > dev_warn(&pdev->dev, "ICE registers not found\n"); > + ice_handle = base; > return PTR_ERR(base); > } > > - engine = qcom_ice_create(&pdev->dev, base); > - if (IS_ERR(engine)) > - return PTR_ERR(engine); > - > - platform_set_drvdata(pdev, engine); This allows the driver to set the data per ICE device instance which allows the addition of multiple ICE platform devices. For example this patch: https://lore.kernel.org/all/20260217052526.2335759-1-neeraj.soni@oss.qualcomm.com/ utilizes this capability. I think it doesen't harm to keep this support. Moreover, the issue which your patch intends to address do not need this to be removed. > + ice_handle = qcom_ice_create(&pdev->dev, base); > + if (IS_ERR(ice_handle)) > + return PTR_ERR(ice_handle); > > return 0; > } > Regards, Neeraj