From nobody Thu Apr 9 16:33:38 2026 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 96EA3344DA4 for ; Fri, 6 Mar 2026 17:23:15 +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=1772817796; cv=none; b=oG8d8uPdCMKlqpNZyEO2mWgSh59DHOJdHiXE/nGjtFn9Oo6VYIM3tSExN9C7Gci2W5QaRhB0hwHEMRU/tjwJnzzxeH7znI+VIO4FGM09fWy4TxiCh9dEzEWYMblPU4HBju7JUXZ9YUUmxCO+NxpVlCyHvE+tRXgWPVsY9zEeUWs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772817796; c=relaxed/simple; bh=+mk4ppL9XWF9OnQIKVkGYEAnsfhU9QaSc9cxpk6TKTM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OYYnxV+1KrEV56KuCY0tpaV37IIJi4wodDmk5myCeVTHCTUnshAbu2xW7RdeF5dZi5QqGASGTBQR83vKlwPEFXXSjxstwas31hII9SVo4R+ItM5UhV/WAyECGony3ZbJPZ8epCNaYz8OafbRRZ9zLMZcG4Oyzi7l2XdvNeO1oI0= 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=OpTHM7dz; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=TXCgZxVq; 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="OpTHM7dz"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="TXCgZxVq" Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 626H1cIe1343467 for ; Fri, 6 Mar 2026 17:23:15 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= Q3cNLjTDzr/nLnZnG7PjL1WTHdf61SjrQzPwxu8BAtc=; b=OpTHM7dzpodWzTs/ yxAFrzmlkm4P9xoroXuQUvIrzvmk1AJcLRAoPAo+WCJxXWuRsWGqlc3bJ8Gtl15a bYNQkIvlxSdQefk8kKKWrVF//YCD3y9yuILPjKMSPvsEJ2AAFnW68mhiH9GWdiy2 5wA4by7nvNdU7O0JJ5oJEnxiq+TSggIgVPhRTaUPCrLuCqK5VbotSP72g6/461hK 9wz/3BahAJbW2HVdx1EUYjQQDDSndR8Q7n1K2lYyIkRidsCLVaj4KbHWo+Uke6qk viIiGGsz/sJSykg+vWDNotEzeQmi4EoX+H4/sKaaFZCg+Lfo9fQ5L9AaKGsINg28 DFNOLQ== Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cr2uqr4f5-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 06 Mar 2026 17:23:14 +0000 (GMT) Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-8c70d16d5a9so4975355585a.3 for ; Fri, 06 Mar 2026 09:23:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772817794; x=1773422594; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=Q3cNLjTDzr/nLnZnG7PjL1WTHdf61SjrQzPwxu8BAtc=; b=TXCgZxVqEjhPpp3hqL114kl4xhfnqouzuOty8wX2cPHmX0IMyJAx/oDVqAKMhBbDHW 1X4l7ja5RU88MLzRx2kMqFmuwdME4gAQwCs4ndsHG83kY0zY1K7tUlxn4+D9ZHF0MpiG q6TOUz7ysqaPZjG5R+eZBZUN6b8nuhF4C6JJVrYigtpspV2+JSOdMAKVIwt72bF8AObY i/Sqm7Fon8nXnl6lp7ILHyeAgOWb/hh/2JhUuAjaqnlkfeLxfyjgka3cj9YipLa0bZRu qefMMXFNe2odcgGbudjasfV5QNE+oSUFzDu7HOxtnCiubY10nw+dDg5sC1ZsWbiGU1DE wtOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772817794; x=1773422594; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=Q3cNLjTDzr/nLnZnG7PjL1WTHdf61SjrQzPwxu8BAtc=; b=ZUC9gRnyyI+h+Gfy8i0jLl4lGHVfmWgcvaDgd7N6SIXURM6x5lCwoJ91Ui2dR9V6zA pOqSO8cRYj5IigwobDbIgsS6yJognJ2O2h+kIBVUjs0S6oWjMFbY3UoeXS6Z3UyyedgL KXbPhUK8SrcG0/dSeB4oER5UTJr/Ms9VWVRrLEXckw1jpPTsH5FpwFro1Nb+v0P/t3rO P8fIuDPIGwAt/XhwxyiYxKTbql7DHaj/l5kEzpMz1k1OHcEZdg7983LC3z0xDknTlR69 juDtViXzJywHh351s65HSFydLdNOfeoKBah3ryEUG19rWKcHamL4LAC0FEbiXUddeop2 BZeA== X-Gm-Message-State: AOJu0YxESxwKrxX2mmtKlJmm3vqKLLWcgotIdJ66mX2kOdJO6F7eEVB1 g7aa1CQWurYFKXBmaZLnAcB4IkFfTJ0mMIzrnWGJeuntcnZ07pPi7CfHmXO0GoEHKG1y1pjzmY1 g7QRdMjpmB08IKGZq3y6wtylx5DKBS8+riOmOFcgvlTact9LdoSiMDyAZUgv0vFS2C6U= X-Gm-Gg: ATEYQzwPAiVD1B4teq3H0iz10PjiFrTtkRnGfpWVrAMWgpsHqzxU7XWc8EDRUdHgTbF BjoS30ybUSyogxMiJP4g0x9YZNV7nfg6Tk0lyrc6SNqDBDh3A47xrVLSP5/hIaEchcNKtNevWQX 5XiZ4GxVlxjpT39EnBREEUjQFTTVRVqutaIPatztkO/1xGvGCaguSeKgUD6gxEGCKX1xtRor/0N loL4GhOVId1sjWuXVj7Y8OR4cN/9isl/w4Cn0O9sxLrhVmrejNWDokOnoUWZ99rxQ7Fw/QaKBp1 8neQTyVUFnCsZvj7FccBhaPPqdifK8nSIdjhhqaHwAIdOXTh9rzJa8PmX2hW+XdJXn63XOwGj0u o16TihyYDOYHEe/NJp3a69L9jssaFlKQgnrVgZ+zoMg7ur2YBx8qE X-Received: by 2002:a05:620a:1925:b0:8c9:f4ed:c383 with SMTP id af79cd13be357-8cd6d47f328mr338634585a.33.1772817793842; Fri, 06 Mar 2026 09:23:13 -0800 (PST) X-Received: by 2002:a05:620a:1925:b0:8c9:f4ed:c383 with SMTP id af79cd13be357-8cd6d47f328mr338630085a.33.1772817793417; Fri, 06 Mar 2026 09:23:13 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:28b1:4950:7702:bb20]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48527686fa9sm61488475e9.8.2026.03.06.09.23.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Mar 2026 09:23:12 -0800 (PST) From: Bartosz Golaszewski Date: Fri, 06 Mar 2026 18:22:45 +0100 Subject: [PATCH v3 01/14] reset: gpio: remove unneeded OF-node put Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260306-reset-core-refactor-v3-1-599349522876@oss.qualcomm.com> References: <20260306-reset-core-refactor-v3-0-599349522876@oss.qualcomm.com> In-Reply-To: <20260306-reset-core-refactor-v3-0-599349522876@oss.qualcomm.com> To: Krzysztof Kozlowski , Philipp Zabel , Jonathan Corbet , Shuah Khan Cc: linux-kernel@vger.kernel.org, brgl@kernel.org, linux-doc@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1749; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=+mk4ppL9XWF9OnQIKVkGYEAnsfhU9QaSc9cxpk6TKTM=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpqw1xOkQhd+rB6pDIeELX9xfWtZzzDx0q39wy6 j5KEYFbCTSJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaasNcQAKCRAFnS7L/zaE wwx5EACstGVJDVO7uTcvBIPfJlwLjEfER2IA2XhDmvu0hwG8oLhF+1KWbY6Io2rAmfOx/ypJmDe nl+VNpEryICAbvye3FZXLDoc2mrbySNHcdRY/uIC6D4VxZXNtlatAQnUGfdCFdpm2WRliBdpZrk Np2pUL7rwogp2gc9Mp+YiNN9ELeDmehGg9+QzMP2QCNWNTzr11zXE9bZyrDbLvv4T2Nou02AaUD Rg8gIoSibOEJ22Xls24z6DdRIw2c1C4P13rtv7FQbo1RZDRpwUjUQnrA4xxcQ5xLjVGbyg6MSjx hhm3rOjtTzPVRrWc6xY9unW+FWEMeaVbn7Oyopcacz/nzUQ39KEmwY+7YlG+2zzK7aZh7SMHjNP Nz+vo4UP1NJ+qxZCeuofxMxoLstXdLFCtasgKFp6X317VL9ypo52m87H8JOrzWHBOuoApkchYog 3HLPbf6DIKOvl6vFj232hFwQX/nkESA5ctYpWXQEal6ymt4Ircy65vgrGWcEEX9sCRcIwR88Lfs M8iO9y5QCtiGHr+SpsppTT8GL/IVgO+86ewSbJY+1qNV8vzx6upQcTg8APSWEgZlAAwhHlOov2w 7rCSV5EsMp2HU4G7FfYJbJZ2/ywphbSSrS/4Z5gskuuFNEdE41O5wk4Wi+TcTZ5UcHx5cQCqW4j UPFSVYm6YJi20aA== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDE2NCBTYWx0ZWRfX/MV+BkUasqHM w2kTklR7gvBs3q8HmGimV0XWErcBm2Jwj1PTcHxK1fZSbhA0TEyG0+VtaXC3bzy5Ys9vhD3Owmr 02m7TPctj/yGHMGpNuETrQF5bAlY1DstlYgFOeZlusor+JNejB5FPNiL5LHB+U8DC9o/noBzvdz /wuwqWCan0RgtNxjOl+Fs4f5NVucXHLYPbF1I23nyJDS5+3WQ4q2m/bfdiKjvDoM+DAZvgHdkpG WVoQ3CYuuzQ5+hLmo3N3znJMMkssq2yDrewTjdgLuGZyv1mhF8/ARxwchazfvPA0IE7WaR81Nl6 TIyEyAIN1J7uqH85fc7S3pVJBrqmpt0AAbrD4PYk/ozXnkeQEq4hlRjuvxRdKcVFxoUbFH/XKzM I0YyI011vMGAMQmDQLTdbyqM6yeDYSJxC8V9Y9SgO1to2XfLNNYKbaKRM4GXBaPuzj4gwghrMvF NOo9aO9BZzW+FwzQTlg== X-Proofpoint-GUID: P1YMGRFOfeY4IhAW13UE78SykTBXQ6bD X-Proofpoint-ORIG-GUID: P1YMGRFOfeY4IhAW13UE78SykTBXQ6bD X-Authority-Analysis: v=2.4 cv=Q+HfIo2a c=1 sm=1 tr=0 ts=69ab0d82 cx=c_pps a=HLyN3IcIa5EE8TELMZ618Q==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=ygpbbqW4ee5_35vKHe4A:9 a=QEXdDO2ut3YA:10 a=bTQJ7kPSJx9SKPbeHEYW:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_05,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 adultscore=0 bulkscore=0 suspectscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 priorityscore=1501 spamscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603060164 priv->rc.of_node is never set in reset core. Even if it were: tasking the reset-gpio driver with controlling the reference count of an OF node set up in reset core is a weird inversion of responsability. But it's also wrong in that the underlying device never actually gets removed so the node should not be put at all and especially not at driver detach. Remove the devres action. Reviewed-by: Philipp Zabel Signed-off-by: Bartosz Golaszewski --- drivers/reset/reset-gpio.c | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/drivers/reset/reset-gpio.c b/drivers/reset/reset-gpio.c index 0a1610d9e78a3f1db8f523654a548fbba6087106..ad5bfe27aaef7de57f956633025= 3333aa2b1253f 100644 --- a/drivers/reset/reset-gpio.c +++ b/drivers/reset/reset-gpio.c @@ -52,18 +52,12 @@ static int reset_gpio_of_xlate(struct reset_controller_= dev *rcdev, return reset_spec->args[0]; } =20 -static void reset_gpio_of_node_put(void *data) -{ - of_node_put(data); -} - static int reset_gpio_probe(struct auxiliary_device *adev, const struct auxiliary_device_id *id) { struct device *dev =3D &adev->dev; struct of_phandle_args *platdata =3D dev_get_platdata(dev); struct reset_gpio_priv *priv; - int ret; =20 if (!platdata) return -EINVAL; @@ -83,10 +77,6 @@ static int reset_gpio_probe(struct auxiliary_device *ade= v, priv->rc.owner =3D THIS_MODULE; priv->rc.dev =3D dev; priv->rc.of_args =3D platdata; - ret =3D devm_add_action_or_reset(dev, reset_gpio_of_node_put, - priv->rc.of_node); - if (ret) - return ret; =20 /* Cells to match GPIO specifier, but it's not really used */ priv->rc.of_reset_n_cells =3D 2; --=20 2.47.3 From nobody Thu Apr 9 16:33:38 2026 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 647BE36AB5F for ; Fri, 6 Mar 2026 17:23:17 +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=1772817798; cv=none; b=gCiLJGpdhBqrv1s3F0Q7EyfJIVyfQ83RMG8FypsRDr/w9WUq1S3KClDhnoPep95mPyNjHz+70geEV+HWKxEaY4JrL93zCOoijTrDD8Et7J5l8R/xYb5hbqFvSikaXgzDTesb8LRuADhKzVaxy/hNKgXYcqTpLBj5VkUyAsDXr+0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772817798; c=relaxed/simple; bh=JZWuny8/TcvSZjzaVdqaESeV6oNV6YTL1+iT2y0pExo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IZC/JVExly6MWjdDgepdlwr0yEQrf3bdlUUpukuf+8tptyRGoeIrV3WoaGE5D26hgwFMp+/bOl+9DNav621LTJw5RwlHTRtqJkI4T/rkUxQAropFFjhRZXFTdBnbCgufgzRtNKRtoS8CAWJja//PVZIqEzV2Yp+faaHe8ZwKnG8= 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=Zps6wFoa; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Vfm1AI6g; 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="Zps6wFoa"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Vfm1AI6g" Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 626H2R5m742790 for ; Fri, 6 Mar 2026 17:23:16 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= R3rlwUodHa1xBLQFp92Dedtm+Zhls9xlJ8VVyipx7aA=; b=Zps6wFoawyBN9+Y8 eJbXqIFiwJkGTe2NPepBopSoIK8oVN9m9cQJyzzb8X+f0a7x2QYBrbVtVIx/hp+7 Y5RChy8/ClJIt3q42jgsFUCkkTtZsm3AOEmAx9OoLWHwDJtAfN2Cw39JRK+WbR0t R37+R19Z4DYiY/GdFgJGkXNYnMNVIIOUl+zM3pscDdn2AV8gj//3YP7R+FZT5Tgq i+yvsiUVupWDcFlO5W6I1dHYQ+sPtCrHkq92KPKsYctxxfjQxCsHZK0wcCi89Cga Z7qOLMKSIFd59Wo8A0dKFvYTgHsCbxvkNQ6z/E8Z56BwLHmPulyID2e4rZK8r5LF zPf61w== Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cqpxdtqak-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 06 Mar 2026 17:23:16 +0000 (GMT) Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-8cb3a129cd2so5941921285a.0 for ; Fri, 06 Mar 2026 09:23:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772817796; x=1773422596; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=R3rlwUodHa1xBLQFp92Dedtm+Zhls9xlJ8VVyipx7aA=; b=Vfm1AI6gyfe+ZSVskaxgb93ojl8hyL0J/Pgqfe3Uec18jWbZs8LuZQHxpcGHAlV0vv sGlVBDvQNvR9+RpuBA2Kq5VFHZnebqs+bVzflGW7/SE1uSPtvZIPF5nXsZmVq4fCH1To mrt9dgF+h0l7TRNeteI718W6OetgjqwnuMheU4ldpyNHRIKSvHYM0enW0wJfyckxhHTY 7B7UCs4swYilYgmL1SI7mAtw37nqASOCYTRxCNCq/VFSgbJDTzDO5NgozVvMqMZF43uE S/8Q0rv6GHjmJthF0S3GUM7yL4zb87rS7Ez3c8+ng4fVy8umFzlHdqlrc0nhtjgVUQYf Uqxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772817796; x=1773422596; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=R3rlwUodHa1xBLQFp92Dedtm+Zhls9xlJ8VVyipx7aA=; b=nXkNU/86IIXztvXxRYi2zakmX0gJkBzXYSETB9+NpHGZinkCz/5XzQ+EeHAZQVXarD 8I3v4Ms8sxtdaWpteqelMKCnwH+a1uWoyThQrP/A7MyDVEWz4BpKIxVJHvdEDupib4vs mzbHdLMvEKhScC8bBAqJh2bYINF3VJxTqdnEasVOn4breLaWISFxNXYfNt5lg6XNBumP GK7rMteoZJEy6zRKni0puqZM+xPFPWhv8zzSPlvf5X3PDWRural9/kQS7n3cIFL+VyVt qLUuGb8rUj5F8/7n13klFocP4mH+MJusfzVIG0Tfrx36NGtjs51dOGWnpQlIYmVAI84j RkpA== X-Gm-Message-State: AOJu0YxCqjVWAdTbxtLdc4lGI1IQh170/6Nuea+Zdh/XQjMWqfyZ8BXZ VziRp1HKv40tD+we1Pwrwe0eQfXc40vtzEdBoqVYlSpj0fQcjF0416hRcx1X/w3bBHdeSKTYMBq 0knPwf9jZ1OSBkOJHMKa9I5TzWInPES6R8R20f4ZUt2qLT1R6wZAAQHgMQbgMynrw8dQ= X-Gm-Gg: ATEYQzxDX8rrYAi6CCg/womeLb42qJT//cSD7VgOL+vOrrYXir/kN9mENkWATkp65mP 9tB02l3Sv9ZZaRgcUM/ahWVjFM6zDZi2r4YouRYx6Nbjy+w6C2HEbr5dtc//t5QJssU+KLKrLtd lleUKpO9OjTvhZ9U0iXsyX/G1vFD6RNVgKga+A/595xcQFnekC0CwRaXVey0K3SW/ecP3G8s8DK X0hdArneVPd/CCO9+UzL841MFJWC+L8o8H21DxbETY19PLIntxs6t7re/XqSemtQuY22yUrYQDF Nn8mRMhORY+ZVO4xD427zNJ7gPXt7bLq/dzNpTKFxPe6PzalLGcuG3Qe2E3m+XrjPmTMt45CB5R wxtC2VFHMy9t78UX7bI+S8gG5CiOxNP3ueijKP/GAdtuBpWYAqs47 X-Received: by 2002:a05:620a:4108:b0:8c7:1271:f336 with SMTP id af79cd13be357-8cd6340948fmr779455185a.2.1772817795561; Fri, 06 Mar 2026 09:23:15 -0800 (PST) X-Received: by 2002:a05:620a:4108:b0:8c7:1271:f336 with SMTP id af79cd13be357-8cd6340948fmr779451685a.2.1772817795106; Fri, 06 Mar 2026 09:23:15 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:28b1:4950:7702:bb20]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48527686fa9sm61488475e9.8.2026.03.06.09.23.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Mar 2026 09:23:14 -0800 (PST) From: Bartosz Golaszewski Date: Fri, 06 Mar 2026 18:22:46 +0100 Subject: [PATCH v3 02/14] reset: gpio: add a devlink between reset-gpio and its consumer Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260306-reset-core-refactor-v3-2-599349522876@oss.qualcomm.com> References: <20260306-reset-core-refactor-v3-0-599349522876@oss.qualcomm.com> In-Reply-To: <20260306-reset-core-refactor-v3-0-599349522876@oss.qualcomm.com> To: Krzysztof Kozlowski , Philipp Zabel , Jonathan Corbet , Shuah Khan Cc: linux-kernel@vger.kernel.org, brgl@kernel.org, linux-doc@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5824; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=JZWuny8/TcvSZjzaVdqaESeV6oNV6YTL1+iT2y0pExo=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpqw1ylgyDtzyxnSBJ24a/2UESI44Vwgd9VFqsN tz+8PXs1DKJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaasNcgAKCRAFnS7L/zaE wxyrD/99l7U7KDDr9wuTxIwPv9ff1I3RQKIiY6Vp8F0GiURx96KPkJWYoTeLAespzrgy6+fB0pV mkHfKW/O4MrU4c4dU+qQV84X9Het4FF94PRM0t5800yEqNOY5n0O7JX/qtmhwrZ1CS8L3bYPjeP fe/yCoZ6oG0SB1zYP7NU4+kVDHK3XRg8xEFgBer+Z9ql2T3iu5oFtYyxVCaoHTQ8cr/G3y/aXPF 6OJ3xhGMzMDMf76T98vdnxexmLbx6RNjg7KFSQLHtg6bIzIjxMOpCzpGYQbAkBgqsrfIS9flZfW abzRi6BuwMokF4suOtAZ0y6NgHyQ2hnj5KQXgwKmdeWvpQDCO2xydvforQPGaF+GX/iIwWydlah 9E0U8Gl3bkUl1aHUWmxOlM+2nCuRo8GxNZ76d5AjUMHj4QTiCv7qyubtTuQ05k/qcIM9BBZEAAu M+td4muLTfGW5nBwML+AKlLllDQr3EKP2LYKceuOn1o4xXWMMBhJ1ojj8oAcgH0lPfm+xnhi/qO 0wqbx824cFtg2pLfZh1xQohZQQoRbMNGfKFgL6iyKn/KqH2gdvIuXhNk3VrbZi21/1v1ekayei7 oBvZVq0nCzSRKSN76K/RHxRsoGFSuCjhxsVwSVGJcs+bA7t0NukXwMibrDABqWKn6kGmi96RubQ IG6vzetDZ0LEyeA== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-ORIG-GUID: yI8Y0bCujKrUY5ICPYW5nKPdLxcvQuGp X-Authority-Analysis: v=2.4 cv=E83AZKdl c=1 sm=1 tr=0 ts=69ab0d84 cx=c_pps a=HLyN3IcIa5EE8TELMZ618Q==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=EUspDBNiAAAA:8 a=gl4R_IGdbvU1KyCt79YA:9 a=QEXdDO2ut3YA:10 a=bTQJ7kPSJx9SKPbeHEYW:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDE2NCBTYWx0ZWRfX9di8gpIdmWBR zTVjofHrKqJl4I+FRsx5qvVF20zP6Q5Zx8bUSqNODs77K1jmZ34fcnpyoTNCngw4zG8um/oOY/C jpTunyWhTY+bxcgfwQA8pbtH5Q/xmdQa4emVuP/NwzPCvN7kdN1DYItDZvjrDAkN6qH3eCjXukF fASGbgXraX1rNiD5RHYaN8FzS74tY0qiHl/VtcUXOs0hQO2yL7EBsROKmm8/N8K/2+F92mvNVeW OAHsfBpr6F3DOcgpH5/P9pC4IDcM7tOsiNkZsLk7bNnWk3znBInY7koZvbHe3YNiFWBMOEAPXIU GfZjdPNt9VQaYDDheL6ko4txWltRn3pP/8ipRJaRYNBfG7UrMlDxpnWwwHdaE9P+ZNilN8MHRvL SMGcBRSR/zkXUxcglLcr9mTy59osH681/XtTxfw4Iz0CvfZqd/2gzR+GWZ85ipMMq0W3BUKCr8j EfHRnChmvMxbMtVDALA== X-Proofpoint-GUID: yI8Y0bCujKrUY5ICPYW5nKPdLxcvQuGp X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_05,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 suspectscore=0 bulkscore=0 phishscore=0 impostorscore=0 adultscore=0 lowpriorityscore=0 priorityscore=1501 malwarescore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603060164 The device that requests the reset control managed by the reset-gpio device is effectively its consumer but the devlink is only established between it and the GPIO controller exposing the reset pin. Add a devlink between the consumer of the reset control and its supplier. This will allow us to simplify the GPIOLIB code managing shared GPIOs when handling the corner case of reset-gpio and gpiolib-shared interacting. While at it and since we need to store the address of the auxiliary device: don't allocate memory for the device separately but fold it into struct reset_gpio_lookup instead. Reviewed-by: Philipp Zabel Signed-off-by: Bartosz Golaszewski --- drivers/reset/core.c | 79 ++++++++++++++++++++++++++++++++++++------------= ---- 1 file changed, 55 insertions(+), 24 deletions(-) diff --git a/drivers/reset/core.c b/drivers/reset/core.c index fceec45c8afc1e74fe46311bdc023ff257e8d770..3845e77a8d32bf615c9d430847b= 497af0ba374ad 100644 --- a/drivers/reset/core.c +++ b/drivers/reset/core.c @@ -77,11 +77,13 @@ struct reset_control_array { * @of_args: phandle to the reset controller with all the args like GPIO n= umber * @swnode: Software node containing the reference to the GPIO provider * @list: list entry for the reset_gpio_lookup_list + * @adev: Auxiliary device representing the reset controller */ struct reset_gpio_lookup { struct of_phandle_args of_args; struct fwnode_handle *swnode; struct list_head list; + struct auxiliary_device adev; }; =20 static const char *rcdev_name(struct reset_controller_dev *rcdev) @@ -824,49 +826,72 @@ static void __reset_control_put_internal(struct reset= _control *rstc) =20 static void reset_gpio_aux_device_release(struct device *dev) { - struct auxiliary_device *adev =3D to_auxiliary_dev(dev); =20 - kfree(adev); } =20 -static int reset_add_gpio_aux_device(struct device *parent, - struct fwnode_handle *swnode, - int id, void *pdata) +static int reset_create_gpio_aux_device(struct reset_gpio_lookup *rgpio_de= v, + struct device *parent, int id) { - struct auxiliary_device *adev; + struct auxiliary_device *adev =3D &rgpio_dev->adev; int ret; =20 - adev =3D kzalloc_obj(*adev); - if (!adev) - return -ENOMEM; - adev->id =3D id; adev->name =3D "gpio"; adev->dev.parent =3D parent; - adev->dev.platform_data =3D pdata; + adev->dev.platform_data =3D &rgpio_dev->of_args; adev->dev.release =3D reset_gpio_aux_device_release; - device_set_node(&adev->dev, swnode); + device_set_node(&adev->dev, rgpio_dev->swnode); =20 ret =3D auxiliary_device_init(adev); - if (ret) { - kfree(adev); + if (ret) return ret; - } =20 ret =3D __auxiliary_device_add(adev, "reset"); if (ret) { auxiliary_device_uninit(adev); - kfree(adev); return ret; } =20 - return ret; + return 0; +} + +static void reset_gpio_add_devlink(struct device_node *np, + struct reset_gpio_lookup *rgpio_dev) +{ + struct device *consumer; + + /* + * We must use get_dev_from_fwnode() and not of_find_device_by_node() + * because the latter only considers the platform bus while we want to + * get consumers of any kind that can be associated with firmware + * nodes: auxiliary, soundwire, etc. + */ + consumer =3D get_dev_from_fwnode(of_fwnode_handle(np)); + if (consumer) { + if (!device_link_add(consumer, &rgpio_dev->adev.dev, + DL_FLAG_AUTOREMOVE_CONSUMER)) + pr_warn("Failed to create a device link between reset-gpio and its cons= umer"); + + put_device(consumer); + } + /* + * else { } + * + * TODO: If ever there's a case where we need to support shared + * reset-gpios retrieved from a device node for which there's no + * device present yet, this is where we'd set up a notifier waiting + * for the device to appear in the system. This would be a lot of code + * that would go unused for now so let's cross that bridge when and if + * we get there. + */ } =20 /* - * @args: phandle to the GPIO provider with all the args like GPIO number + * @np: OF-node associated with the consumer + * @args: phandle to the GPIO provider with all the args like GPIO number */ -static int __reset_add_reset_gpio_device(const struct of_phandle_args *arg= s) +static int __reset_add_reset_gpio_device(struct device_node *np, + const struct of_phandle_args *args) { struct property_entry properties[3] =3D { }; unsigned int offset, of_flags, lflags; @@ -916,8 +941,14 @@ static int __reset_add_reset_gpio_device(const struct = of_phandle_args *args) =20 list_for_each_entry(rgpio_dev, &reset_gpio_lookup_list, list) { if (args->np =3D=3D rgpio_dev->of_args.np) { - if (of_phandle_args_equal(args, &rgpio_dev->of_args)) - return 0; /* Already on the list, done */ + if (of_phandle_args_equal(args, &rgpio_dev->of_args)) { + /* + * Already on the list, create the device link + * and stop here. + */ + reset_gpio_add_devlink(np, rgpio_dev); + return 0; + } } } =20 @@ -951,11 +982,11 @@ static int __reset_add_reset_gpio_device(const struct= of_phandle_args *args) goto err_put_of_node; } =20 - ret =3D reset_add_gpio_aux_device(parent, rgpio_dev->swnode, id, - &rgpio_dev->of_args); + ret =3D reset_create_gpio_aux_device(rgpio_dev, parent, id); if (ret) goto err_del_swnode; =20 + reset_gpio_add_devlink(np, rgpio_dev); list_add(&rgpio_dev->list, &reset_gpio_lookup_list); =20 return 0; @@ -1035,7 +1066,7 @@ __of_reset_control_get(struct device_node *node, cons= t char *id, int index, =20 gpio_fallback =3D true; =20 - ret =3D __reset_add_reset_gpio_device(&args); + ret =3D __reset_add_reset_gpio_device(node, &args); if (ret) { rstc =3D ERR_PTR(ret); goto out_put; --=20 2.47.3 From nobody Thu Apr 9 16:33:38 2026 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 7662340F8DA for ; Fri, 6 Mar 2026 17:23:19 +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=1772817800; cv=none; b=VnaZbJRlClKFUS9NjwqtMoFnxr2Lr3MUqHJ27yQZyTpQCFGXsDGLVX4XD3EyX4hp4rO3kkYuJvvmXlo/EhSpofY2r1fCZcxu5Ehe+agTqaT3NlEHJnFE5kW7ImUdtgmDNI2NJ105a8Bw/+4NceNU8dvxPowz5AvOZjGfpNghiMU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772817800; c=relaxed/simple; bh=GjWmZ7UsKa/vuwzXv3KQhNd5hOTDSEtPzIm/qhoa4Tw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=BSsUUr2Ju5jA5RGb+qUFVAvxMDedh1JvjQ7NWI2r8lWj8IKmPno4v763qL88RNwMuZwtrRDbyBygaCkxvn/8IOx+UE9SKWDq1lr0xMFfmY4oKw6rN68sAjVApfDTQQzv+/VBidulVTs1aRmT7DLuFmpT9u6gnlS6+rKXrktCjsI= 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=PHtiq9Qw; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=QRqOgX+X; 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="PHtiq9Qw"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="QRqOgX+X" 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 626H2Hn22734412 for ; Fri, 6 Mar 2026 17:23:19 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= sutqqXPyVGTmhwh/v3UBnqNenmMWrkTG9ZhyeCtSTOg=; b=PHtiq9Qw2hkGNCaY wVwASITB1/cEhFUqfrdkcZVJzmeTyonxZgbPBee/7khW9l/MZmonJHBZWFDDxTJl jxsuFwhpHzMm0aChoqQ2+8/7TKrTPduPFs0q/wBhb1eDK/vX758gSIcS2a9l3QjW NsH9FNweJ4cjJyueYIJQ5HjFxOe3CCw3uH0ipZF2YkLUaEj+JpD0T3tdJLP7xWeu WC/vYSXPMPxU0n3HiLtYQOJiyvZ1q8maBmbJlpASxWXz5S+EIx00U+nAfVZZgT3d mJtz5on5OkSX70AFfHFAvcCcGCZEvCKea+0an+6/anE/y1NEJ8DxtW+ik2PS3/59 mCFxvQ== Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cr2utr45v-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 06 Mar 2026 17:23:18 +0000 (GMT) Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-8cb6291d95aso1725091385a.1 for ; Fri, 06 Mar 2026 09:23:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772817798; x=1773422598; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=sutqqXPyVGTmhwh/v3UBnqNenmMWrkTG9ZhyeCtSTOg=; b=QRqOgX+XPGAHiuv5zLoKrq+S0ib5bNz+925l+7XRz0odXz7qsOSZ4FI3ZMtudgu/z3 1VdeyxtPpcpBG7Rn23lsQsNa0l38Kd+GTFrZH5l9QBrnCuSSw7DiMwSEOIEAfifyWPMo 2z89d/l2GCbNSl1db2z1zQS4H7g2f4wVeJEpNnO3lsDcEPwKMCsNursxPwcw/oMbq1SX 2gyxuPZYzUf6tBtLF0PuYUkti/Dg5kAIxiWD+m4NS9VXgxrGEOaxHLyJOSabQGpiVdWi w+GL4wsaUqQcPy+ZJWuEhrMO7fZtmlbSyhrHWRK6DZOehkUtdaFmKRJEv8G7dCw1d6GN TKmg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772817798; x=1773422598; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=sutqqXPyVGTmhwh/v3UBnqNenmMWrkTG9ZhyeCtSTOg=; b=wyCEbdOMlVYVCEgBB+ktqsShqhQwgWo+frHrgRftcbsu/uBYyLK7hDVV8CEhzXZh2j r6L322E3TBaC5UVZ3/VqqDmAipAEc36gmFFPrENveb7LpLsMXFB9kmaXxv9L7aD0LqJ3 OV5sf9QKaWDpSAXKn8esTpDCoYLWiCGB0UacKtvibAVahJGt09sQZ9kyF6QKVS8rDXyH sYfCAVvnZYsqk8sKlBCw1q29+tATmVMAJv4AIxa49sYv1wkiFTMYZxY/vofYu1FU6fjX cy66dP0pOT48OIbkvhsu9vg9FfzC7IKHS8prxojOT1zUs3NBQR4wsnbtClTlyS6y7Cp3 lvng== X-Gm-Message-State: AOJu0YywtWAdEDoZ3vprkB+di5V9zB36ti2dtPN4NFEmBqK9IxNiQHcr jUXiXaD4RAPXil7DPXqAtjU+EZQz/rNUYJrpssxvBr+DurB2N3s0IANXomt7AObpGNIqdOKD5Ij VepsSFzgJUf+DQhrLxT1Keu3/Uuu9UiY2jFeD3Owyyq+/GDJVHBdPDISOjNKSR26Lo08= X-Gm-Gg: ATEYQzwNf9SSW0PfhpsJhOpa+nI9zPHWDbthNoh5ux3MzS8D7XVe0IWSh1cWIFxFyTU gSDTwXZS7V5N8y3b6yc2YG0BEl1mUwYCW+6pzN3NG2DYGkODfru7b3zttPunq47EUfdN4yV9Hz8 8OADuWawRnKM+HMjPAUIshKv3TiXrgAMXq59plLEj9yiLAnXpd/018NITm7Ksv4HTAJUeThxlr8 EKX65sk+2T3IWD9f9Wx3pK6Mxd6kTW67xeB0D31Tn1yAy5JGkZ0KXCnRVWrVc1NuFQLFvA1DYWc myluAjwi9jpLDs/WUSOSIQtwTK4+BIAlcNPhNQsPFObA77dBTqY+mOLtiMxJ6rMHBSFtXtppSY9 ad1PV87onXI/oHeMIjwr0MufxO1mDRBXqjvsjmHwlHDpHF2d8TYhz X-Received: by 2002:a05:620a:1a84:b0:8c5:c9a0:ac28 with SMTP id af79cd13be357-8cd6d42cebfmr378736485a.21.1772817797793; Fri, 06 Mar 2026 09:23:17 -0800 (PST) X-Received: by 2002:a05:620a:1a84:b0:8c5:c9a0:ac28 with SMTP id af79cd13be357-8cd6d42cebfmr378732885a.21.1772817797338; Fri, 06 Mar 2026 09:23:17 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:28b1:4950:7702:bb20]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48527686fa9sm61488475e9.8.2026.03.06.09.23.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Mar 2026 09:23:16 -0800 (PST) From: Bartosz Golaszewski Date: Fri, 06 Mar 2026 18:22:47 +0100 Subject: [PATCH v3 03/14] reset: gpio: simplify fallback device matching Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260306-reset-core-refactor-v3-3-599349522876@oss.qualcomm.com> References: <20260306-reset-core-refactor-v3-0-599349522876@oss.qualcomm.com> In-Reply-To: <20260306-reset-core-refactor-v3-0-599349522876@oss.qualcomm.com> To: Krzysztof Kozlowski , Philipp Zabel , Jonathan Corbet , Shuah Khan Cc: linux-kernel@vger.kernel.org, brgl@kernel.org, linux-doc@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4521; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=GjWmZ7UsKa/vuwzXv3KQhNd5hOTDSEtPzIm/qhoa4Tw=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpqw1zYJu/cWjl8704sRUJ+m17bcpVLAtRiuUHV ykEsAhLE6eJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaasNcwAKCRAFnS7L/zaE ww2BD/9tOKrDXkfbNHwBWkiFRny7BmsERwZ/foSWQaS5YX8Wc8ZPlyRmmOEja3IkqN6/4afYzW1 T2YpLtFRrRC0uZ1kFZx0hVGvEsEjpQJ9TWCdlguP9s9EX6WdiHsmd6oeTzJDZHTmWmDkvJ/hh5q 7cpXDFFWnBTAmnHR06fTVIQYOsCrpA71OhdySTUXPBxtkOmcKsGaQCtSS6C769d4UdVtycd+cSF z1lkGbes+uVF8IZ7OvfjT+tQEMH6B+mgAyPnRaeF8FGXWbH7AYdX0aDz7dIrQW8/rqlpClnu/S+ vgHSzugk47MZ4dmI7WS1CTec7v9ewjA/xjT+UUUv1/gtkHleuheWxaZc0zv5kWwyWkC/vxTheoO DEckeKADDGajPP91TZMWWmDJnk8nYV906YerfT433wC+Vgrmig18zDA27gWT3Ze3XhhtUT9Flkm NtJjN9LvOy6fPVHEFILjSKHbXd73s/Eyg1dSkoMWIFThtzzs+VZJKHXczK1mkk1qJ1z23v9rEDM lhuBzZxZVRklT9kmS03E7bfEQdU5rY6kFjekHOBzVw4HL/KYbffLDae9GZ90C7OYQTFLkioYC88 uYnV8hmEJZbNMd46jPSjEtbQQt4e78X7bGi583rWaGEKrRdIZYkRMAideGswkaN5LOoWC81PNhh 5kkoBBYVC80ObHg== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Authority-Analysis: v=2.4 cv=N8ok1m9B c=1 sm=1 tr=0 ts=69ab0d86 cx=c_pps a=hnmNkyzTK/kJ09Xio7VxxA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=C-6xm7Ge3zJZVfUZFQkA:9 a=QEXdDO2ut3YA:10 a=PEH46H7Ffwr30OY-TuGO:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDE2NCBTYWx0ZWRfX7VAyAq+TbB4W j6AlFSKinsu/IqQvkOLWLnKH58IG1P5O1Z2dVMXBBPoWL2nFDCtIKc1O09VHKVM3QLntm9yTjhR YCpcLVrAbtXt1oPPL9fu90mQxD+Z+cetqwR/yU/UciUhKpNjyOOqrhqcduWw6Bqla51rqYFam1f ogISqe7ZpaFl12iIyJiY9/Aw7c1NrHsrjthh9sUWWr0jKymWO53tGDBDifSdPoa4hNCH0Nrl27V q+3PxkwC3OHeLin7JK0ODy7wEvAbTs4w15Y+DfgrngpHtdjgcQDPLpg2Z0k1ZYkoBM9kto2l9KJ JRys0gbcbbVfaXlEpifmA+ZjOcSbZGK3y684SP1meF2uCpWVIm284nYW3wDuTrMalk89KzQp4F6 wVq8yYE8kSdx9O1k4SeGuWXKSv8vv5fmOp5iIXoCVTE73PyhyONNtK7etiEBcGe7bOd05ujqpgf oMK7xPgK+hBs1AcNjyA== X-Proofpoint-GUID: ppAuFLXSfF08A4oB0t-oHNBeV4WmyTbq X-Proofpoint-ORIG-GUID: ppAuFLXSfF08A4oB0t-oHNBeV4WmyTbq X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_05,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 lowpriorityscore=0 malwarescore=0 bulkscore=0 phishscore=0 impostorscore=0 adultscore=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-2603060164 The of_args field of struct reset_controller_dev was introduced to allow the reset-gpio driver to pass the phandle arguments back to reset core. The thing is: it doesn't even have to do it. The core sets the platform data of the auxiliary device *AND* has access to it later on during the lookup. This means the field is unneeded and all can happen entirely in reset core. Remove the field from the public header and don't set it in reset-gpio.c. Retrieve the platform data in reset core when needed instead. Reviewed-by: Philipp Zabel Signed-off-by: Bartosz Golaszewski --- drivers/reset/core.c | 15 ++++++--------- drivers/reset/reset-gpio.c | 5 ----- include/linux/reset-controller.h | 4 ---- 3 files changed, 6 insertions(+), 18 deletions(-) diff --git a/drivers/reset/core.c b/drivers/reset/core.c index 3845e77a8d32bf615c9d430847b497af0ba374ad..954df36a242e804b63902738470= 0b8d988be0e90 100644 --- a/drivers/reset/core.c +++ b/drivers/reset/core.c @@ -94,9 +94,6 @@ static const char *rcdev_name(struct reset_controller_dev= *rcdev) if (rcdev->of_node) return rcdev->of_node->full_name; =20 - if (rcdev->of_args) - return rcdev->of_args->np->full_name; - return NULL; } =20 @@ -125,9 +122,6 @@ static int of_reset_simple_xlate(struct reset_controlle= r_dev *rcdev, */ int reset_controller_register(struct reset_controller_dev *rcdev) { - if (rcdev->of_node && rcdev->of_args) - return -EINVAL; - if (!rcdev->of_xlate) { rcdev->of_reset_n_cells =3D 1; rcdev->of_xlate =3D of_reset_simple_xlate; @@ -1006,13 +1000,16 @@ static struct reset_controller_dev *__reset_find_rc= dev(const struct of_phandle_a bool gpio_fallback) { struct reset_controller_dev *rcdev; + struct of_phandle_args *rc_args; =20 lockdep_assert_held(&reset_list_mutex); =20 list_for_each_entry(rcdev, &reset_controller_list, list) { - if (gpio_fallback) { - if (rcdev->of_args && of_phandle_args_equal(args, - rcdev->of_args)) + if (gpio_fallback && rcdev->dev && + device_is_compatible(rcdev->dev, "reset-gpio")) { + rc_args =3D dev_get_platdata(rcdev->dev); + + if (of_phandle_args_equal(args, rc_args)) return rcdev; } else { if (args->np =3D=3D rcdev->of_node) diff --git a/drivers/reset/reset-gpio.c b/drivers/reset/reset-gpio.c index ad5bfe27aaef7de57f9566330253333aa2b1253f..6e1c4f990bc0e54f4a47186340c= ef03b1a2ee29b 100644 --- a/drivers/reset/reset-gpio.c +++ b/drivers/reset/reset-gpio.c @@ -56,12 +56,8 @@ static int reset_gpio_probe(struct auxiliary_device *ade= v, const struct auxiliary_device_id *id) { struct device *dev =3D &adev->dev; - struct of_phandle_args *platdata =3D dev_get_platdata(dev); struct reset_gpio_priv *priv; =20 - if (!platdata) - return -EINVAL; - priv =3D devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); if (!priv) return -ENOMEM; @@ -76,7 +72,6 @@ static int reset_gpio_probe(struct auxiliary_device *adev, priv->rc.ops =3D &reset_gpio_ops; priv->rc.owner =3D THIS_MODULE; priv->rc.dev =3D dev; - priv->rc.of_args =3D platdata; =20 /* Cells to match GPIO specifier, but it's not really used */ priv->rc.of_reset_n_cells =3D 2; diff --git a/include/linux/reset-controller.h b/include/linux/reset-control= ler.h index 46514cb1b9e0626872fe71357b24d54ff0e81a8b..aa95b460fdf86f10002a465e285= cd0119da6eeaf 100644 --- a/include/linux/reset-controller.h +++ b/include/linux/reset-controller.h @@ -35,9 +35,6 @@ struct of_phandle_args; * @reset_control_head: head of internal list of requested reset controls * @dev: corresponding driver model device struct * @of_node: corresponding device tree node as phandle target - * @of_args: for reset-gpios controllers: corresponding phandle args with - * of_node and GPIO number complementing of_node; either this or - * of_node should be present * @of_reset_n_cells: number of cells in reset line specifiers * @of_xlate: translation function to translate from specifier as found in= the * device tree to id as given to the reset control ops, defaults @@ -51,7 +48,6 @@ struct reset_controller_dev { struct list_head reset_control_head; struct device *dev; struct device_node *of_node; - const struct of_phandle_args *of_args; int of_reset_n_cells; int (*of_xlate)(struct reset_controller_dev *rcdev, const struct of_phandle_args *reset_spec); --=20 2.47.3 From nobody Thu Apr 9 16:33:38 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.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 3C7E036C9E8 for ; Fri, 6 Mar 2026 17:23:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772817802; cv=none; b=t62uMV0kbH8BYOfFhRgiRjVEfd6nDtpRG0vX024vjNP0csBJjkP3aw8W6jhtBfwxOD0BNVR9HCoVzN4q45525WcxVUx6xSi/OMeKL1Q6tFtxg11uktLkJUKObLxcogp9KmRpVks3FQ0SEQvFTk3kbVKBhG2ZPaOkjv7fO9FUUlE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772817802; c=relaxed/simple; bh=8F2/35WvpX/TqMubbBTsFRZjI4ctiUcgIyYIkq9cGII=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PnwpXWarzFSIm5SqtTwgz9PlvxmIennnJsoMqAxTGicpl8ds73ni6YVHZ5MEaDqDUIHTV/7Pl+5OuLyicDetANpQ1XTGBzoMKyzAX9/owAk9a3m4WunGRV64s7OlPf8Zida0ssBcIqw8n1XYYXavH/Tok3HWxaN+rmcW6dn7Vxw= 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=Qg6g3Q5T; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=G14D90xt; arc=none smtp.client-ip=205.220.180.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="Qg6g3Q5T"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="G14D90xt" Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 626H1bAr2162881 for ; Fri, 6 Mar 2026 17:23:20 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= ajd8fwlcy0ukV9JCrBK3xVJx+7J/zUO5UQPSfgWVqOA=; b=Qg6g3Q5T9Ua/tC/o 4eaxN8sTSu9vZT4LS5WTwUwkKD+T5rJRjn9QuBKbGHSwXzO8SZMIfvV6iHpA8xpk kBBUM3dtmDjcIWP0uWS3Hnfc18OnQfUbbORTdSYBgNQZSU7+gIJbYlyCFJBN4NPR FdL6rncX83TW2FAk9kb7NRDzfyVHtM89A9ar0IOOygPh0nYdjuaqQYmXvYIRLAkS i1krxDfDw1iUh/cBAZMqhbq6yV/9cXZNyeo83YMYlKZPH9hespE9BNM9gup7cTA3 m+4z9OSujw29ipWHK71hcTNGOYOt90TxbwSXF23N+UWVzPLF+U9HDf36a7jFEAAg 75ZWiA== Received: from mail-qv1-f69.google.com (mail-qv1-f69.google.com [209.85.219.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cqv9ahj5t-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 06 Mar 2026 17:23:20 +0000 (GMT) Received: by mail-qv1-f69.google.com with SMTP id 6a1803df08f44-89a174bd442so219591026d6.2 for ; Fri, 06 Mar 2026 09:23:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772817799; x=1773422599; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=ajd8fwlcy0ukV9JCrBK3xVJx+7J/zUO5UQPSfgWVqOA=; b=G14D90xtx8vPEQlHfPPESOefVcYhgUur0NwT6FldhKoECbqccSA1uLDPJjtCytN+aa FSQ1LgHeGBROm7EvmPN33hQ7X7+PJTZicRU01YeDq2y3e2PIe+yrel/tNwxoBVLC4xqK aK/0bKf5cYpFu5olMyjGi61u7uUgAyn0kGUp7YQatAE4pYOKWXhxp+Z+4v0JRJ075Y0+ +w4f3ZPx/xLG5GAWLOhZa/SlwY8qlPqLbXah4/jgdlq1+9s/NSHF2h502Hyhq8fGc+5h h3HoNnAegf6KFcQvVjtPxN3N0hgKqAy915m311KcFuMmdbfYQYvhdbQZxvNFNz32Sb7N Jpvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772817799; x=1773422599; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=ajd8fwlcy0ukV9JCrBK3xVJx+7J/zUO5UQPSfgWVqOA=; b=CVikwHcJjDoE+X2afUmin9AcGR7Sqy0nTE0zJEIY+HNl+x9B6SkMhkvPjk8322teim yDKupd5kKJmnJNOwOIAGqCn+bvWys2ih9kTajwJpTayPMMvi55cDdJg978yEisegdQqp 5kshmM71N7GQxkp6pJJ937tlYj854j51d6Q8CtBw5xjaY4QhEbOqhEUdyDDCzN6r0zcM I0zL8fK+NthOzw9v3IV9AdeLAeLlR7dVth4fw9f1nK5XEQpfwNWcPsXpx7zoVKq0Ho3D aB7JfxQmpUlOc3To7KUvmpGGD/zfq0tRpZpdWgPKSQuZJJ3kwixQM7NojjkF9pEqE+dH 26yQ== X-Gm-Message-State: AOJu0Yz5SQBXkICZbNJ2xJP+Ehva352yTkhthwMbDxT6Id98ptY5m7KW zJFz5hqPlYyutsAs9AZ3uNkI6iVOIludjPNpIEfX1pV0di1umUX6rujDzqnpqsc6ljAROwo8LaM 1nNqiwEmy+XJx985jPUQOskEKHYXO3uk8D671Vdqq7/taCe0ht6/TGQNXyQLsH2GNaWY= X-Gm-Gg: ATEYQzw/6c45+tNPuR9Sb5YZz52sosNr4nb0HRBHa0n++WDlKhpOFmPkrJAKr0kpCeb Pt+A1Og+JGhsmVDGm37pKCGmIQIYdl9r5WCX4f/s+M5phPv2bIid7Y8PT/mmXcxJnf2x6hCnRoQ 9yjE7+ipnd8cMV3WdegSayz3a2RN8Cs4hDyjqeMkr94PmrHcCNxEPYHYffntbAI4U0/yHP9ocRN gVUTU61ttzIvsC6m77p9svlJ8yA2QtfYQ25xm0v3EIk6oXwOlXO00CgHnGFQ+mF7TAoUe6+FIjF lEKsZZ5xqkOGe6rsiPCrB4k6TCQM8DvU+G1OwxyR2ezBw2n6uACXmpGeTx48sowmep7U6zfi4au P6XxTpZaVwUMQ5HYnC6xvFI5HS6/krZeu90HOoTGnUE8LqvQWzLeJ X-Received: by 2002:a05:620a:3911:b0:8c7:8b8:e0ac with SMTP id af79cd13be357-8cd6d336019mr361482785a.12.1772817799543; Fri, 06 Mar 2026 09:23:19 -0800 (PST) X-Received: by 2002:a05:620a:3911:b0:8c7:8b8:e0ac with SMTP id af79cd13be357-8cd6d336019mr361479385a.12.1772817799131; Fri, 06 Mar 2026 09:23:19 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:28b1:4950:7702:bb20]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48527686fa9sm61488475e9.8.2026.03.06.09.23.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Mar 2026 09:23:18 -0800 (PST) From: Bartosz Golaszewski Date: Fri, 06 Mar 2026 18:22:48 +0100 Subject: [PATCH v3 04/14] reset: gpio: remove unneeded auxiliary_set_drvdata() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260306-reset-core-refactor-v3-4-599349522876@oss.qualcomm.com> References: <20260306-reset-core-refactor-v3-0-599349522876@oss.qualcomm.com> In-Reply-To: <20260306-reset-core-refactor-v3-0-599349522876@oss.qualcomm.com> To: Krzysztof Kozlowski , Philipp Zabel , Jonathan Corbet , Shuah Khan Cc: linux-kernel@vger.kernel.org, brgl@kernel.org, linux-doc@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=827; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=8F2/35WvpX/TqMubbBTsFRZjI4ctiUcgIyYIkq9cGII=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpqw11H+sATMLButuxUXWY6jr25BbQ8nOcydV9f Os85570EumJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaasNdQAKCRAFnS7L/zaE wyRfD/9ZWER9foHaSurD4kLnaPfy+0yEqwFOMcg00PmWWPjCL5Db1gsu2L3E/KndTCKa2tseIlI nZH9P3HQt1LU1x4rKgZyVakZLSAKIR/vP2GgnvacXe2yvMtQYRYWpbFbYbI1xy4kdjmUrfY/gth pofEcySILOdCE8+o5MUshAulEVaBx36qRqniRMIjKzX4+etRhqX8Nkn5Lga/vhJjwRMaKxdvj4g uZNsONe15uE4rSWPMAzE+O8C7+5SNjnF+K5ptFabGQGZ6UKa69JnjOLxWbdVz/LcR7vPBugMO5r opgqvxE+t6VzXUqwTtwwDxwPYLwc493e1iz4mxeaQyIorSzYx6I/pRL4FivVjMGPziaTpjUCb4O Zdubbxv5ImG4mnGNE+t3z3qvt8snCjOAsUtWmNviCNI69/YqP2EJuLar1s7YTP01IjlWkEw4NL/ FbKZKK+zDq4WA8/sbP4I/krfXrz3j7MSpoKsXM+zHxN8i/0grr+sGi94aIqZd7gaHzouY0n03/g Bjx+oy8eW/WXMyXxrr6Wh/pl+IwH2SQTGBwL0B4qy0ZV/1ZYjEY5NH0SrzuMDu7SJ8+TttcMA4/ Ha0Bl6h+lSIbse+tvUvgaqt3vxXp7BBjLKJqXrVzrgsc6kUgd8Ul7NKFfJmz8gYU46d+NNlQBgm eev5+ODzGoBQt6A== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-GUID: 6pgbYYxIEYZreH2iwwl_La4XuixE_vPx X-Proofpoint-ORIG-GUID: 6pgbYYxIEYZreH2iwwl_La4XuixE_vPx X-Authority-Analysis: v=2.4 cv=G4wR0tk5 c=1 sm=1 tr=0 ts=69ab0d88 cx=c_pps a=wEM5vcRIz55oU/E2lInRtA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=EUspDBNiAAAA:8 a=X4VvQV0HAJngfktaq0kA:9 a=QEXdDO2ut3YA:10 a=OIgjcC2v60KrkQgK7BGD:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDE2NCBTYWx0ZWRfX5rkHGU/9339L 4D1gCxd7/ZsxAtBuCW6smfGb/6mZIDkIM7ZO2gz+dioOhjeig05yme4WXz0EnHvhMad83ytawIX QvqXzu83EN0hAF/dpG6yv3Yje1YxaYi7OzIjgsEmDiji2WEqUuzrqcaoGfR4nIsqNWV3K7uzenL 69plf5Csn1+5BNGcwq6n5V3OhoBpiFMwq9cioLWoPvLVVZM9DACDrzZEDnqG2BsH0g7fbqM6K4v dGtPTyzBjONPIseJxyll6krc5hqgZZ8kKS00TlriQjRGyUAXKiXBI48//MpFVLe10zQalkK8U1W jc4RF9ENje2OrYtb/Uw/DTi8dzF5ZOGHEmBpsxA+eB8Q7WtlOcHMCoovVpF5QJ8GWmAzzLSPgbG bLPNoY0EVijP+48e/L6mndfG/mUe0FVS91Yx6zGx+30VFml7k5qWiaQrYivmc7UyenrotPdj0ac XoKbhpLbIIsVAgC54uA== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_05,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 clxscore=1015 phishscore=0 bulkscore=0 impostorscore=0 adultscore=0 malwarescore=0 lowpriorityscore=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-2603060164 There's no user of the driver data so don't needlessly assign it. Reviewed-by: Philipp Zabel Signed-off-by: Bartosz Golaszewski --- drivers/reset/reset-gpio.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/reset/reset-gpio.c b/drivers/reset/reset-gpio.c index 6e1c4f990bc0e54f4a47186340cef03b1a2ee29b..5044f809d0e59a08861597f4aeb= 685e95328c2af 100644 --- a/drivers/reset/reset-gpio.c +++ b/drivers/reset/reset-gpio.c @@ -62,8 +62,6 @@ static int reset_gpio_probe(struct auxiliary_device *adev, if (!priv) return -ENOMEM; =20 - auxiliary_set_drvdata(adev, &priv->rc); - priv->reset =3D devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH); if (IS_ERR(priv->reset)) return dev_err_probe(dev, PTR_ERR(priv->reset), --=20 2.47.3 From nobody Thu Apr 9 16:33:38 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.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 3165941C0C6 for ; Fri, 6 Mar 2026 17:23:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772817804; cv=none; b=TEn+bKUePylga8tDikzXDH1XMT9WN5Ho0+DVjLdqYtKEOTJ+03TJ0kkrrVVCJz9ajKm1q4PyPIziclAW6Jewx9HtLv6cVBLBlN5DSZe4U82gGzUb/1KB290E7Swb5FvLezgCEEZd+sfU36KW/MbI4yW7hZFOeWBRfPA1seYu56s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772817804; c=relaxed/simple; bh=C48vFSRrg2JEknHH444d34BLohfOaAI8aBE9ypO2ysg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Hy1MN/MEdpUK5M0pEylAUhoYs/dJbbnq/26XFVq2jyvvoVXrZHTimaRhSKSrAqAzQqPtmP0ejbQg1CrIxJVA+yHf+evPf0tM4AF51jW4TyBo5uJccFq1jHZWPRn4wyXQDhOrygS5mgxtL2s1MnQl3vuDw1y7f2s8jDDopg5oKdU= 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=mXgVFsak; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=jzogJlgn; arc=none smtp.client-ip=205.220.180.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="mXgVFsak"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="jzogJlgn" Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 626H1YjO4115466 for ; Fri, 6 Mar 2026 17:23:22 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= Tt2DVErFoT4UqoXMqFcWdciyF+4IHYB0aOM/UZND7O8=; b=mXgVFsakfIdySeqw Bx+x0EY6gquAnHaVBBQk4QeCzHk5nGDDxOE+qT1dplDKIZ+7ZpS0W047PrPUImQA p0zpPeJc8GtfdXSNZQeSd+54C6s79Jnhb/0NRDtPw2UR0JWlzCBTbMNl0clQpTkQ 1M6kXCDz6CD9glFJg71tK1QhogcFTtCrq/OTQpxDIAGPm6QcA7vuO6qUYLkMlguu PQI+vuMF644Jx/6FrORPGYRYBdyWYhW/NJfEDeXXIpk58HoQwLTW4nGmIHZJ7HYz dyCUSDs2wSXI8wcTZzid05MC2vrSko+fs2jdxeT6XafpGT9M/l6Z6VPuhywBZgG7 jUnxcA== Received: from mail-qv1-f69.google.com (mail-qv1-f69.google.com [209.85.219.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cqv9u9hpf-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 06 Mar 2026 17:23:22 +0000 (GMT) Received: by mail-qv1-f69.google.com with SMTP id 6a1803df08f44-89a108d17d2so230518096d6.2 for ; Fri, 06 Mar 2026 09:23:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772817801; x=1773422601; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=Tt2DVErFoT4UqoXMqFcWdciyF+4IHYB0aOM/UZND7O8=; b=jzogJlgnIZVMG7COtkr628Ymt/NB3lCSXZlhmiYijQPofrQgqQFoB0QY+yIe+3jg9h +0OuChyz4Y55VX/aN9lRtJpMcvhtZroll/qYTJvhpF35cQYnvcMtDrVbMnkLd/5jYkPM /BUUCEzno/krstqpS7aTvHVCWuX1N5qfQw01u913elv1p6woA2G16XJ5E9KBWDic9K2F ZUngE7UWNh9l0WWrhL+7OD5t8x01F+vCEExdRqWjAXdElGLqo9V/C+HZAPY+/3sLG+nE /2z3CsTs8f/oC38LMYES6yBpW8NXFNoPM1z602xZlqIqgzfigL7K2ZOxi63Kc7StpU51 6l3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772817801; x=1773422601; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=Tt2DVErFoT4UqoXMqFcWdciyF+4IHYB0aOM/UZND7O8=; b=ra5YSxdKDv9M29NpAum83I8PqkulhK93VwVf496SwxSxO0eWVOhvQs0Dx0oRkIukvO JSKsD9cQogkNGdvSL7CwYoES3COGBsM0GA3vaEK1UYfokKtgDuUl1TW+5wZkR45CgWsd itGsuKyn8UHfLigKE0/oE1NvfP5ZQTSbfo6IeF6Ouhk03IiHH9wkI+q5oOvPnO29rmzk qFTIxKHVexepIAe3IbjcAKpcZk+kREt6oOw1V1Wa1ilXVN8EQJ4tpd1GpMOkIXoj3Ynd icRSp0+M3S80lq17URp0PUoFI3koC39kd+jBtM0rHzPFWGeo8A+O4dn6yca3rHK/Rhxk kQ/g== X-Gm-Message-State: AOJu0YxGJHOuelabe6U+ik7K9CSLHTv2SIzgqeWv3+w2nZvMFzNVYOhc AwrW+LPhRhbwRLEKUkMEKu1WEp/NfWEPUdMkT/uhOKWSAiUiJaMeLtMPI2J5HBm55rcHzarjpSe ZjAI9fv/C1OhLqy8g6eoYm9yZdLRLDGeXJWFUZfUb2npiIQ8EjfxMBRdARwJTEbbCcao= X-Gm-Gg: ATEYQzzb5ra+qOGm5qoI/kegTEcHNPUxZ7tISJ7roy/r94iNvb1d2Zsfpz7XaVJVmaR 6X6qknZznSZVovgY2imp8YxrOQs3ivof0OQR6YPW9CIfUHtC/Ms2fc+AvRHOJsMEWL8Sfo/kYXU ExEo/X4loU0AwpYVI7ijoigGEwONLhzD1kOEO1ubMNwDTcqpFBSZhLoYDgjhsvs27eaCecK7Ubq spteKXOqI8dIGfsc0H6kEe2SZ2FYzo5Hk0DW8LOy0XgMR9hSaOhWg6wxTvIyhKg/0Bc5+KIWhC3 JbZqoCkYiAivtYdU2tghL8hK1S3mWboCGE2rTbl+RjAOzyRO1P3FnwYuRnvIIsBMBK60jgLXgtx ChnHurvhdhiGt2fpXJrmZZhe3MtMhtbKPntDBgB5bXe5jthM2mnSw X-Received: by 2002:a05:620a:372a:b0:8ca:110b:38cc with SMTP id af79cd13be357-8cd6d448a12mr350719485a.27.1772817801462; Fri, 06 Mar 2026 09:23:21 -0800 (PST) X-Received: by 2002:a05:620a:372a:b0:8ca:110b:38cc with SMTP id af79cd13be357-8cd6d448a12mr350715785a.27.1772817800987; Fri, 06 Mar 2026 09:23:20 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:28b1:4950:7702:bb20]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48527686fa9sm61488475e9.8.2026.03.06.09.23.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Mar 2026 09:23:20 -0800 (PST) From: Bartosz Golaszewski Date: Fri, 06 Mar 2026 18:22:49 +0100 Subject: [PATCH v3 05/14] reset: warn on reset-gpio release Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260306-reset-core-refactor-v3-5-599349522876@oss.qualcomm.com> References: <20260306-reset-core-refactor-v3-0-599349522876@oss.qualcomm.com> In-Reply-To: <20260306-reset-core-refactor-v3-0-599349522876@oss.qualcomm.com> To: Krzysztof Kozlowski , Philipp Zabel , Jonathan Corbet , Shuah Khan Cc: linux-kernel@vger.kernel.org, brgl@kernel.org, linux-doc@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1163; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=C48vFSRrg2JEknHH444d34BLohfOaAI8aBE9ypO2ysg=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpqw12HkyjK5bgPZQxYnSqEQfVK3Ze2+rWpiKQU JxnI6lHWg6JAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaasNdgAKCRAFnS7L/zaE w/6IEACdr/8UDzbi6fv6V8F0zt9ZvL7NDhCktZ/nOVsWUG/0o6zNpCOYtNBWdw3+SpBsFPYhpgr UgfMSiJaFg3c7kGiFfL86XGctwbJqaEeKehg9q6FDlThI2TX+QEZR1iT+d1xNXvfGA0Ugs3te2+ 6PuzMeGmiadbXlXqB4hjIJ4wGt46eh0+6rO8glZ5mY58eXxvC0UNHWQgKPLqqXEZV8ly3dOJY39 2p7cODS1yE8nXyr/1FsoQ9Web2UHmvv0VZE2maW30Hbvu7xAM9taIidtP5HxdfCylnZmwttvfi3 Zgm3VOC+k1u8kBF9toOwCyb7l0epdLQM5sgmrjKK5gGkI1aNLpyXeDhqtJsbauXjI5YFgVkCg3f U26BF2snVdGNBu/+mNxEGhJBAuynaZMf51v9PMFpReU42Gdfafg0Ff3JlqQzaydNbCnsopu+ogx JE0XqlT1gn81FYQ5zekGgJqPjBHD7o0gRpxLOshT0xt3DO1bfUlFpzk2MSthvvSHDV+7GvuSRv/ VMB/XZJGvK4iJ/H7NEGk+KXU2hW4QAS4W1siGu5prKOHfcV9Qmy7En3j7/L2r6BmO2X/r0DRmmM cVdVxl4fjaYAZN5F/uLpUSR1N/sF/qmP+3rEGcLjYqhozY0+5veA1AVan5fLPT3D7mOCpO5qaxT 9W9eqWHCDEqJs/g== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDE2NCBTYWx0ZWRfX/UDxheKHP5qo 0phPQCfMvCH/KIPCh1/Pxm24uZsOT7l+lSgy5ArFH/3XrnixN4NW+dlRB6a2flUY1qGaWh8VqYn Iu9G2Gi+j2riUAbsnwzqOiA7q4rpuVK0oumJRSMxRLNCW4xgk7MczqmnGbA2vkTakh1l+B6ghwZ ZMdQM3+rGGjEgHx5OJ3yw1WC/SghxTFRrXVxi0m52dLTizfaJcSMpDgDk/8hCnaylBKm3buyRVe 83H2wV7m5XKSlA32+TjHTTYLwc50vxCLaRbjfaH2IbWLCKsB6Wyip4RXL2eH98m6uRQ6PnaOy04 +uIrUZBwkIwGfKwyoSBnui3+wgQHPC97nBq++CavXe94o+3L3pBAuBvkekYElmNfCEOn1vPxWi3 EzCJFi2YjUjfqSErcLxUTeXrDu73Ii4ky49mZfHGmtGqsvYb6U/4sthSo03JsPY1iDnUMmwSFTu NLAVejc6zcI3fBh/USA== X-Proofpoint-ORIG-GUID: 9Yviof9HD4PobeNM0NoY5k6On0LsD6AE X-Proofpoint-GUID: 9Yviof9HD4PobeNM0NoY5k6On0LsD6AE X-Authority-Analysis: v=2.4 cv=eJoeTXp1 c=1 sm=1 tr=0 ts=69ab0d8a cx=c_pps a=wEM5vcRIz55oU/E2lInRtA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=EUspDBNiAAAA:8 a=ZUnkwru6gbkhQxgbgcoA:9 a=QEXdDO2ut3YA:10 a=OIgjcC2v60KrkQgK7BGD:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_05,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 spamscore=0 adultscore=0 lowpriorityscore=0 suspectscore=0 priorityscore=1501 malwarescore=0 impostorscore=0 bulkscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603060164 While we implement an empty .release() callback for reset-gpio (driver core requires it), this function will never actually be called as nobody ever removes the device and the last reference is not dropped anywhere. This is by design - once created, the reset-gpio device stays in memory. Make the .release() callback emit a warning, should it ever be called due to a programming bug. Reviewed-by: Philipp Zabel Signed-off-by: Bartosz Golaszewski --- drivers/reset/core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/reset/core.c b/drivers/reset/core.c index 954df36a242e804b639027384700b8d988be0e90..3e55f794d539e4edc99104cb539= 6cac72ba30618 100644 --- a/drivers/reset/core.c +++ b/drivers/reset/core.c @@ -820,7 +820,7 @@ static void __reset_control_put_internal(struct reset_c= ontrol *rstc) =20 static void reset_gpio_aux_device_release(struct device *dev) { - + WARN("reset-gpio device %s should never have been removed", dev_name(dev)= ); } =20 static int reset_create_gpio_aux_device(struct reset_gpio_lookup *rgpio_de= v, --=20 2.47.3 From nobody Thu Apr 9 16:33:38 2026 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 E45C14219EA for ; Fri, 6 Mar 2026 17:23:24 +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=1772817806; cv=none; b=BBS6zmr6KLBsvq1YlpIXBm5/K3uKbhky4vuypT7ALFKirDXpYPMa0f1d6CPLKU4R0fsShust2RxLbAD1LwxMt2oulNAbjQsv/1vJRgJRc9h39/BQ3LO3kvuYkJMzL+uwpmAYDPLK6bDObiP02L1ffHaBj4LZrRODKFqQL0AnSn8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772817806; c=relaxed/simple; bh=/jjMTVDR3mYie9Ncx8hCNOw7mqA4MQBimid9vXcyuh8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=siC9NF2DSZ/CCT2gnoe9hMIUvGLjd2L7Q//Nu5M3TiqCrQVf18eG5Lqqnhg5VddNsWf5SeUrAcB43u2BVWp56bG+fW3al02cvb6Ivq/V/j0u5kYatwzU0Og05p6NZdHg64lbufrqICNG7etEhX9rcOdM7fFi3EHhsk4NeTe27Gg= 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=jhp5QHr4; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=eYSd8S+Z; 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="jhp5QHr4"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="eYSd8S+Z" Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 626H1k5H667845 for ; Fri, 6 Mar 2026 17:23:24 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= pF0yH52MXQzce/UyYuQvs5aAI01bJoZ8xpfaV+SRcyQ=; b=jhp5QHr4a6DYAb2R kT2WNnMLysSVGTitOQ5JUgEcaGjPnZgG5TwxhG6K3kP60AT5j3+uXMe0NVZ7V0x8 ONMl0czZKoO0+Jr8kL6WY+4bCsTv29IEyZ1PxGc0j5zxHVZXRQvY3wx5ZV6aCU26 JVnGFRoUYpc+zw+ZNBlq3xAQLPOHFVY3uryGwrYm2kXGX7Byaf+go/yD4C7xzrgn coNtf/DXuIuOKlTShgJXuHEE+/eRSFs6bci1z+Nk24xcz9L64UOkgrZ2s5QEalH4 IVrHMBC6aQBp+SXXI8JDWshxUhHG0VEK8uoL/2ZsGP9zn6WgH9XAIz/TLfnY2I0w hYcz4g== Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cr2ye03c2-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 06 Mar 2026 17:23:24 +0000 (GMT) Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-8cb390a0c4eso5842421285a.1 for ; Fri, 06 Mar 2026 09:23:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772817803; x=1773422603; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=pF0yH52MXQzce/UyYuQvs5aAI01bJoZ8xpfaV+SRcyQ=; b=eYSd8S+ZvyRgESFxROVqscqQbNbW/wRHtV2HjKwNItXOOsgRa0Kpg82tNjNGZxE+db fwNZwMXidTw8sVb+0JfRdwgob/pQ3MvwxqtWnQQi2UnjZVPp7PhbWrmDdUFuGvfFVELs 2DIW5W4OV74bMrOuhw3y5YxImS7AhlTMqLp7qJeH4d694CjzPC51FfTz4KTzgLVEEoOA +RR7sSpiQRBLF2Q3vGy6gS8MreeT89PSiw4BzaABT1xGtm6nf+qol7PAHfLK4T5t6ON7 piObiyZFfe2Gszgca0AGkKAK1kE8seqnX65g8Djg+FXirBsbqt5JPE3Fq5TDpSLV3jVp XHbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772817803; x=1773422603; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=pF0yH52MXQzce/UyYuQvs5aAI01bJoZ8xpfaV+SRcyQ=; b=LJMmsYzhZNr2EV8XzY+VHqB/RzbnM6ICFtMA4vdgrsMraQRj0DKDxhhQR6XbjKRNFE VqYoogjitObYKMYGYTnxq8cuWIhbmJNV5k9VQwOqv7hORjS1N1Yp2feXOskmVJKU94sL wQFLeTNZG0tYilLLgXv7UEnwIoKs66Y+wyN9IhksCTgsSluLMOctj6QvQwtVbBvxKuJw urA2oHQIyNU6/mD3MU22ySmsot0glGFWKqHT3JN7aGIbgtf/Rr3uGzyBkUgwBdLAXR1p CeV7kgKQ5xPhSvcg+NuqIqTjfehbVUj5szcPUkGJFNXFVeQG8VfzE7/kXzERVnoIs2CU zdhA== X-Gm-Message-State: AOJu0Yyrl/IOsSsxCYWSmY0fyQ3mCwVVmKfM4M3O29d0XoOLywvzAhTh 9Taxqg8VRBPoTU8YzusoT1AO9UuBpbwQDSL3oNcVxR4KCSLl+3jAVpAfiZsGM7V1Cb3C64akM94 OF3UMYoy2iZziCHtVWHQk3hhcQ/2yNTHnr2P6Bj35tm961YfebCL6de4YM5VlSSiMn1I= X-Gm-Gg: ATEYQzzQnWG1dqnfPyZ5MSkkY8YSN9YEj7iFsq5OU2KUAOMtIYYDXdf5Gx2r84izcin ibIVuuliFWVLrxJPoP9UI52whcQLfCHuTZB0X3Eqd8WeRho3CYxQ23XgkTruKDCR3uMi3RWRoFo cBszKwxD1c8PbBIXOdBClRm/9aRAtrzW7XbY10HbghQqhe6DRB60Nt/nhlSt4bgSR+sP6XTZPtx TH0vQpch3BNnsKU1YdjZZIMtHPYSIlqImEnZ1NGa3FraaNk/Y2xBg175yTDPokgr35pYF9KmFQ8 XHL1p+ZRlSElQk+EZAv+q7suQ+e5mEe6Pikq9vhzarhkfWiLaSVhL7BTKfN9OJtwY+jbww62B8n 54+N8Tn0a8gOT4f6nF5ypL/c6hYz5fkDK3VNJGyxhnCkX9Ogvf/01 X-Received: by 2002:a05:620a:44c2:b0:8ca:fdc1:cc9c with SMTP id af79cd13be357-8cd6d514b43mr369049785a.76.1772817803369; Fri, 06 Mar 2026 09:23:23 -0800 (PST) X-Received: by 2002:a05:620a:44c2:b0:8ca:fdc1:cc9c with SMTP id af79cd13be357-8cd6d514b43mr369046185a.76.1772817802939; Fri, 06 Mar 2026 09:23:22 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:28b1:4950:7702:bb20]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48527686fa9sm61488475e9.8.2026.03.06.09.23.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Mar 2026 09:23:22 -0800 (PST) From: Bartosz Golaszewski Date: Fri, 06 Mar 2026 18:22:50 +0100 Subject: [PATCH v3 06/14] reset: fold ida_alloc() into reset_create_gpio_aux_device() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260306-reset-core-refactor-v3-6-599349522876@oss.qualcomm.com> References: <20260306-reset-core-refactor-v3-0-599349522876@oss.qualcomm.com> In-Reply-To: <20260306-reset-core-refactor-v3-0-599349522876@oss.qualcomm.com> To: Krzysztof Kozlowski , Philipp Zabel , Jonathan Corbet , Shuah Khan Cc: linux-kernel@vger.kernel.org, brgl@kernel.org, linux-doc@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2926; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=/jjMTVDR3mYie9Ncx8hCNOw7mqA4MQBimid9vXcyuh8=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpqw13fhD22RfgUyNV9WI3x5Cfl0CiYxYyUScQN J5790rkL1eJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaasNdwAKCRAFnS7L/zaE w84+D/9HUwKbZAn77bYJq3B44FnlbNRZ/xP25QgLDMLyxGczye9ORJAs246zvRZCm8HENUax8Za f1Zo9kXrw7jlRqPEd2vrdE/GaOP97r75Tff8knIClDTcFesttx5ncs50evX/alFOcrY2JBeHOJt zFX7whynGpjGLuv13KuyXrBjcyhJFYcz+9KZvcHfogKr0wWs7fIu2NLyA9e24zX14uLbcRhxoAN kQqISjMf6eqKyG2aSdRg9Jqnq1ZVqjRLErx71nXX4a859RHV0ks0sRNYYaNOZ1ho38FRHM5zgNo TASa7Ghg3QaubleJAHnIwmhQIjMF9mXm6C9mN2vCBB9nbnO1QXZXHzscye6vLipIFaiPwO0FP3B SKBp2M0rbnZhVowpXCn00Rf+/K1TASyywqHFtjlS4uWwxzi+6yaFAlNzK6CnYITrdJMpJopaOaW UUZCPfAjxok5trf3Q8IhFDYlIPBspWamBBWQpkkbS1ce3HBfdDYLgoXSFMj/OCNL/ARYuYrKand Kxb/S82zYvQDqd0BO/GX+mKrcZuom5JgzKv3Q+DlR/4gMwhnVtzWkyePbP3qENoaYHTzsVSyJmM 8JJiYKmr/52ASbLbC6q6OaTckxDBZcTCE/AONSMVEQsxtktm2r4tOTUcKEbw118KUXk7M3Vc+z4 9fwnbd6TPQmEZ3g== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDE2NCBTYWx0ZWRfX7Eq/Xp83XhIV 1XX3miKiBtjgvsduwCv/Dlzhz0uj1W0UZVxeDMlmc9Bd4WKNByiLgP/xPv2lUhcUy5KhNQNxdDy hE4ENYJ3vGrF8/1nIeVdqHWKDCHcSfNCwjJseEu1K0OG+aF/4+HaMFb9g/scWtGZSpr0E2mTCw4 BFT4Sd5cNPjkU8isoAuxaZyBPMXgit7dVBbHdsFpybj8N5dsdVrk4LZWisFiXPqbbRWdr/9ucPu Hk/BOvfIeqIKyTfQgWitRFTgveQcXhs6Qu7sDdQnad+lXCUWSX9X1pxy7VDhbc190OSoT5Ulmjc fuIxVfpVClLdhteeLSpXioSgSnujvBPdnSH2gdHt2ll/mDO2Jk0SOtKgOvGgWCMRbmT90gKLpIL rnoHrJbAb78jWoPBZXr/OQAxK4X9t7FNVgZp0SLQXzUeCH3BGlFZdKz7j3ngyFowGQlpj3jQKLK 4y8+F+tH8xvFO+LpudQ== X-Authority-Analysis: v=2.4 cv=Bt+QAIX5 c=1 sm=1 tr=0 ts=69ab0d8c cx=c_pps a=hnmNkyzTK/kJ09Xio7VxxA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=EUspDBNiAAAA:8 a=HM6bUx3eE857ULQHB2EA:9 a=QEXdDO2ut3YA:10 a=PEH46H7Ffwr30OY-TuGO:22 X-Proofpoint-GUID: U8c1EPV57bUl9HCDcUiL-uXzJ8KsKiIl X-Proofpoint-ORIG-GUID: U8c1EPV57bUl9HCDcUiL-uXzJ8KsKiIl X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_05,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 priorityscore=1501 bulkscore=0 adultscore=0 clxscore=1015 phishscore=0 impostorscore=0 suspectscore=0 malwarescore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603060164 We don't need to know the IDA value outside of the function that creates the auxiliary reset-gpio device. Simplify error handling by folding it into reset_create_gpio_aux_device(). Signed-off-by: Bartosz Golaszewski Reviewed-by: Philipp Zabel --- drivers/reset/core.c | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/drivers/reset/core.c b/drivers/reset/core.c index 3e55f794d539e4edc99104cb5396cac72ba30618..025004989595ac60381804a7705= a1eb584b63326 100644 --- a/drivers/reset/core.c +++ b/drivers/reset/core.c @@ -824,10 +824,14 @@ static void reset_gpio_aux_device_release(struct devi= ce *dev) } =20 static int reset_create_gpio_aux_device(struct reset_gpio_lookup *rgpio_de= v, - struct device *parent, int id) + struct device *parent) { struct auxiliary_device *adev =3D &rgpio_dev->adev; - int ret; + int ret, id; + + id =3D ida_alloc(&reset_gpio_ida, GFP_KERNEL); + if (id < 0) + return -ENOMEM; =20 adev->id =3D id; adev->name =3D "gpio"; @@ -837,12 +841,15 @@ static int reset_create_gpio_aux_device(struct reset_= gpio_lookup *rgpio_dev, device_set_node(&adev->dev, rgpio_dev->swnode); =20 ret =3D auxiliary_device_init(adev); - if (ret) + if (ret) { + ida_free(&reset_gpio_ida, id); return ret; + } =20 ret =3D __auxiliary_device_add(adev, "reset"); if (ret) { auxiliary_device_uninit(adev); + ida_free(&reset_gpio_ida, id); return ret; } =20 @@ -891,7 +898,7 @@ static int __reset_add_reset_gpio_device(struct device_= node *np, unsigned int offset, of_flags, lflags; struct reset_gpio_lookup *rgpio_dev; struct device *parent; - int id, ret, prop =3D 0; + int ret, prop =3D 0; =20 /* * Currently only #gpio-cells=3D2 is supported with the meaning of: @@ -951,16 +958,10 @@ static int __reset_add_reset_gpio_device(struct devic= e_node *np, properties[prop++] =3D PROPERTY_ENTRY_STRING("compatible", "reset-gpio"); properties[prop++] =3D PROPERTY_ENTRY_GPIO("reset-gpios", parent->fwnode,= offset, lflags); =20 - id =3D ida_alloc(&reset_gpio_ida, GFP_KERNEL); - if (id < 0) - return id; - /* Not freed on success, because it is persisent subsystem data. */ rgpio_dev =3D kzalloc_obj(*rgpio_dev); - if (!rgpio_dev) { - ret =3D -ENOMEM; - goto err_ida_free; - } + if (!rgpio_dev) + return -ENOMEM; =20 rgpio_dev->of_args =3D *args; /* @@ -976,7 +977,7 @@ static int __reset_add_reset_gpio_device(struct device_= node *np, goto err_put_of_node; } =20 - ret =3D reset_create_gpio_aux_device(rgpio_dev, parent, id); + ret =3D reset_create_gpio_aux_device(rgpio_dev, parent); if (ret) goto err_del_swnode; =20 @@ -990,8 +991,6 @@ static int __reset_add_reset_gpio_device(struct device_= node *np, err_put_of_node: of_node_put(rgpio_dev->of_args.np); kfree(rgpio_dev); -err_ida_free: - ida_free(&reset_gpio_ida, id); =20 return ret; } --=20 2.47.3 From nobody Thu Apr 9 16:33:38 2026 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 D7111421A14 for ; Fri, 6 Mar 2026 17:23:26 +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=1772817808; cv=none; b=dAss7UM1cIX6FHG2rVpLDyy6UaJ9MMPNBoaDf8hUNU1dO/xrZ+xQtqmNvlvFfdK515mPsAI34+k73NlnjHtSHlEwxvKoPY6FX69Pw3APXEM4G3oiM/g2YRVJVE4jFMG210jbL2Y1GG2+sw3UoRQoF36HT/iV6yYAE1knE2GNJqw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772817808; c=relaxed/simple; bh=9YSv7wtpGa141adYQ/rdBQI2YnEMb3TYt0lWc6jH/QU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YOIdoE++BTo3Mw1DQxTePfBiAh+qzYySoMqpvR5FsRBzQej2azunnG46el3Euva1gAo+Q73mKTac8AAOfMjq2lbKElK57sDNctnPDz+RRdG6Ozf7jbS1p+iCKzAvw7m4fZtueULa2XSIj7/ceTSj2aZW3lRCpv9UO4oPYcjqeKo= 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=JIhEbY5F; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Hk14XUNa; 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="JIhEbY5F"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Hk14XUNa" Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 626H1k5J667845 for ; Fri, 6 Mar 2026 17:23:26 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= dLydKXB0JWJLsnXJze4R0n4wEWXjTx6InhOjX4qLoAM=; b=JIhEbY5FJPaWntyd orT0IalwHnadHGlRyCrlZ5U5lkg5v5xAwmliehiuPtyzO6A9QoNIf7E6AO0pf1I+ g9qcxw87mbqnB7w4MXFJe0c3lSyfXNXZk0e6LyGPvVX5Pqv3j4akGS0r3GPoic5R kY1W3Ye7Bazi3wO8dUcyZToIbwmksemVawlVH9tI0v7KgmAPfYePkbFJe6PRJA7x /JZHfm+Z+9QR/7q5CtPWAvHPrnAZm9qGAIaJk7pWZj3Kx4I1nCm+nyT4VBj2+SQe gWF62+CWSP3dyb9XWlNJoocZ0ulJywL8R6gGMTVMhQjHnnywxYUucGpxhhhjA3/n qdvmHw== Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cr2ye03c5-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 06 Mar 2026 17:23:26 +0000 (GMT) Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-8c70ef98116so6167957285a.1 for ; Fri, 06 Mar 2026 09:23:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772817805; x=1773422605; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=dLydKXB0JWJLsnXJze4R0n4wEWXjTx6InhOjX4qLoAM=; b=Hk14XUNaEA1Ycfv/EquFGAHmYGmHpZSyJDaWQIphFAGszGpO5r4xX1oSYPaVI2E+hc kKxFOQPimY9gZnS3xPRxoccrT78ANiu/NyiHPgViPhJwDKzzwVi3UyFwmorD742E7VOM UHtSRbj8piEnzxKxUdEk1pG1g5ZkmLW1Ch4qtdy2xlfvDPVBhbUTPLBthaDRvlmiojHc wZQOuAlNLZ8LMvoXnr4LDaPNMI173U1yZYGFu3riP9NXQ593Ccls1xdcujkvOUoGQlgF 9LEP+XEe+zZViFZPsjAC+h4WO1jjiiS1UsROIJChb5yZTjcdWUjqwZXJu71g3PaLaqoM lkAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772817805; x=1773422605; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=dLydKXB0JWJLsnXJze4R0n4wEWXjTx6InhOjX4qLoAM=; b=sIPSBqPpqjzr4ylIFQ9uHlfEuyhy3f4xrTYNuowvvqRbhj2j3dAicKlr2H11lR5WLc u4b8buXba8b4i4Gkb4GVqojgGJxpMzLttM8rwALyaHcJE+TC7yzLy/atpT2b0B/uDhy1 cyKmx9Ijo/XX/+JONcnI8QaBKBLoo/FnDUdbYgL3KEUEgdExmg1Z0HCRCVWSwE9tcBIt eoK2ueTYQReTnwE6nSOxMKFoYrX2K1MIAXUoHPX4xU6ViDrR23dFOWb4wBWvNlts2wDH VFDFIAbx9IchfN2YAOdoFijV3T/vfKX+Gdc1cfUJLZEhSc11mS7ivv7PIr3lUqpf0FxS 8/lA== X-Gm-Message-State: AOJu0YyjOMTK0nXGhoD627TzPbWy7QEynuupv+1UqoBipC5Aa+BdrWfG xcmlwfCp/qZpUcBLHRU9A6N82cn9fTy1KFowfzOMiTesrdhnOv0G1+w7gwc0J/XH1+00eZovoWv wWhE2MubtWdmC2vih5YaUNsTFuHt9rkoTHVXE2xR37lSrTi6Qg0rgzbwnhyOjLUQRlNI= X-Gm-Gg: ATEYQzzfXcQLkB6DlLKkF0OS6cJBY5xGnhpQSK2b6vuopv0DYrSKH/Lw4bnCgogulK4 ILfaB0UHvG1bWB1RBv2WJe1W3xtFEskYjaXxkDh2CSgXKVpD/QGuPwAb1uVqNdIHnuf6V8duHt7 ZzHaTvZGybQojHFR8LAQrG0QVjm27+/z7E6R4hBMeUYJ5WuCYI27CRLSGYoNuwBnM1624YI/MiM FKl3MjlhpFG5/hH6SfjqJVpw/wXpLsHwpQguHCuHsXM9uhrPHmf3Z8dO7SL4gp4YLFhIb6JMc/7 hFVvfXHLM2x4exALyVPSVq/MUq5bivneWISihtPplOeyWff7jA8BzDS8gP2C6zPW15/OjNC+906 +Uyu3MJa/3M0P5heGgc2s28G4MB4N1eKT1xjgjYJdsRIgtlLe4AYS X-Received: by 2002:a05:620a:44c2:b0:828:aff4:3c03 with SMTP id af79cd13be357-8cd6d513470mr359530685a.61.1772817804971; Fri, 06 Mar 2026 09:23:24 -0800 (PST) X-Received: by 2002:a05:620a:44c2:b0:828:aff4:3c03 with SMTP id af79cd13be357-8cd6d513470mr359528285a.61.1772817804522; Fri, 06 Mar 2026 09:23:24 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:28b1:4950:7702:bb20]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48527686fa9sm61488475e9.8.2026.03.06.09.23.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Mar 2026 09:23:23 -0800 (PST) From: Bartosz Golaszewski Date: Fri, 06 Mar 2026 18:22:51 +0100 Subject: [PATCH v3 07/14] reset: use lock guards in reset core Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260306-reset-core-refactor-v3-7-599349522876@oss.qualcomm.com> References: <20260306-reset-core-refactor-v3-0-599349522876@oss.qualcomm.com> In-Reply-To: <20260306-reset-core-refactor-v3-0-599349522876@oss.qualcomm.com> To: Krzysztof Kozlowski , Philipp Zabel , Jonathan Corbet , Shuah Khan Cc: linux-kernel@vger.kernel.org, brgl@kernel.org, linux-doc@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4861; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=9YSv7wtpGa141adYQ/rdBQI2YnEMb3TYt0lWc6jH/QU=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpqw14rqT6eFAOAqyry2cBjGPr71g1aWH0Gh+II iM6UMIsi6CJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaasNeAAKCRAFnS7L/zaE w3rnD/45RHUgmnLY67BY1fHMIKdLWFdF411zg65Gq41Gh1Tw9CP0A9S9lzFK2goDfLlBI9FJnuz kZMMLeDw1vuwnkltDaN5HPaSgA6bH0aqYy104S3OayeqkDJ8mE3WG8nZgCxXt0bExVFY4J9tYau NNsL0z7gtptjlSEtXEHj1/BXwcsRYwnF1zP8BEVm9pjTgX0uGgW9oQqtJ8k22PE+iztKeGvkRPN 04xJDberL+QeWB5hJvR0+69XCKqwjdXY0Y7hhD9WOAvGTcpExHPN4UPJHjA9z/EPDlaSNoXhkgZ Wp9Fa+4e3kuCItQb6wuxtMZQm4r0RMIoDapd5beHTbW1i/F39G88OktSNjTaip7Rtfq+s3127tL nQpBgh3u02zf3NoiKpx/vY2sPj1ApDg1Iq45tTOAUn+mmpvgL+GMvBPc0frtETOUQ1U7wSQVKW1 Oce5Kins9UJlABCM3s1UZV2UrYDgn189du9It0kzhRhnXDf107DYi6s19/eQ8AjA7H5WP7QiPOp xYjbmr0WOhmTmEMRTu7mE5dpDhMdClM13DXfgiUex6CTCGkQmlYJkwqTP1+SJ+aI8dJHaWLxKzM pRrFDEwIfF2hamrqZdp1KIFSaINE9se2ql+0EvaRzEjgIXC7I7iso9Vj2+J4Sq7nlq3py6PlB+c hyGEeR9a7kiHO9w== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDE2NCBTYWx0ZWRfX6Px8AdCFQuV1 fTyifd8WyJtURqPOBpi/ZvLg8PSlcNp/zRo1RmBgx+M4U3v3/tO7BEXwo4Iz/KBUvUs6EER3NJV msJN/+wbroBqH76NU5jy6WwdShI4xQI64P5HKs24l23PVcNtDztYfY9KgperfNN/VF7kkkWTT+U 2Y62/jwf8Eb3YTTNEiCUPCxsDoaDwlDBm0atmzkYbxh6sh02rLuYZDT79zgwK2UVqeJt/0N7GCP 05dfHG8TjX4T8ahbCaJCRPI5u/OfP8bzlRkKFQ4Xtf039hR4aU+fqWUhlgyXmuabfF1q2iOEZHW RptHTQeVjFakvHnQQ5+omz1zkgbo9rboPc4cnbgn/+TZcoyL8y4rVdp92no+5x844BfFq0rL3ZN T+WXA487txHTln5x6am33Eo9CAfcwpXTmbDqQyGWviS0DQkJPM3S3XeKoUpNCLvb+qhVBVy5aFp Ji++r5wMDeHBXIPniyg== X-Authority-Analysis: v=2.4 cv=Bt+QAIX5 c=1 sm=1 tr=0 ts=69ab0d8e cx=c_pps a=hnmNkyzTK/kJ09Xio7VxxA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=EUspDBNiAAAA:8 a=ABYPN_TNRu3JwaOvJ3UA:9 a=QEXdDO2ut3YA:10 a=PEH46H7Ffwr30OY-TuGO:22 X-Proofpoint-GUID: cwl7cjLNeWTaoqcIv5EfDNXIFcf_BFak X-Proofpoint-ORIG-GUID: cwl7cjLNeWTaoqcIv5EfDNXIFcf_BFak X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_05,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 priorityscore=1501 bulkscore=0 adultscore=0 clxscore=1015 phishscore=0 impostorscore=0 suspectscore=0 malwarescore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603060164 Simplify the locking code in reset core by using lock guard from linux/cleanup.h. Reviewed-by: Philipp Zabel Signed-off-by: Bartosz Golaszewski --- drivers/reset/core.c | 55 ++++++++++++++++++++++++------------------------= ---- 1 file changed, 25 insertions(+), 30 deletions(-) diff --git a/drivers/reset/core.c b/drivers/reset/core.c index 025004989595ac60381804a7705a1eb584b63326..9fef9f972e93fb7388f27ac3bbd= f68c884b72ff5 100644 --- a/drivers/reset/core.c +++ b/drivers/reset/core.c @@ -129,9 +129,9 @@ int reset_controller_register(struct reset_controller_d= ev *rcdev) =20 INIT_LIST_HEAD(&rcdev->reset_control_head); =20 - mutex_lock(&reset_list_mutex); + guard(mutex)(&reset_list_mutex); + list_add(&rcdev->list, &reset_controller_list); - mutex_unlock(&reset_list_mutex); =20 return 0; } @@ -143,9 +143,9 @@ EXPORT_SYMBOL_GPL(reset_controller_register); */ void reset_controller_unregister(struct reset_controller_dev *rcdev) { - mutex_lock(&reset_list_mutex); + guard(mutex)(&reset_list_mutex); + list_del(&rcdev->list); - mutex_unlock(&reset_list_mutex); } EXPORT_SYMBOL_GPL(reset_controller_unregister); =20 @@ -646,25 +646,20 @@ int reset_control_acquire(struct reset_control *rstc) if (reset_control_is_array(rstc)) return reset_control_array_acquire(rstc_to_array(rstc)); =20 - mutex_lock(&reset_list_mutex); + guard(mutex)(&reset_list_mutex); =20 - if (rstc->acquired) { - mutex_unlock(&reset_list_mutex); + if (rstc->acquired) return 0; - } =20 list_for_each_entry(rc, &rstc->rcdev->reset_control_head, list) { if (rstc !=3D rc && rstc->id =3D=3D rc->id) { - if (rc->acquired) { - mutex_unlock(&reset_list_mutex); + if (rc->acquired) return -EBUSY; - } } } =20 rstc->acquired =3D true; =20 - mutex_unlock(&reset_list_mutex); return 0; } EXPORT_SYMBOL_GPL(reset_control_acquire); @@ -1064,27 +1059,28 @@ __of_reset_control_get(struct device_node *node, co= nst char *id, int index, =20 ret =3D __reset_add_reset_gpio_device(node, &args); if (ret) { - rstc =3D ERR_PTR(ret); - goto out_put; + of_node_put(args.np); + return ERR_PTR(ret); } } =20 - mutex_lock(&reset_list_mutex); + guard(mutex)(&reset_list_mutex); + rcdev =3D __reset_find_rcdev(&args, gpio_fallback); if (!rcdev) { rstc =3D ERR_PTR(-EPROBE_DEFER); - goto out_unlock; + goto out_put; } =20 if (WARN_ON(args.args_count !=3D rcdev->of_reset_n_cells)) { rstc =3D ERR_PTR(-EINVAL); - goto out_unlock; + goto out_put; } =20 rstc_id =3D rcdev->of_xlate(rcdev, &args); if (rstc_id < 0) { rstc =3D ERR_PTR(rstc_id); - goto out_unlock; + goto out_put; } =20 flags &=3D ~RESET_CONTROL_FLAGS_BIT_OPTIONAL; @@ -1092,8 +1088,6 @@ __of_reset_control_get(struct device_node *node, cons= t char *id, int index, /* reset_list_mutex also protects the rcdev's reset_control list */ rstc =3D __reset_control_get_internal(rcdev, rstc_id, flags); =20 -out_unlock: - mutex_unlock(&reset_list_mutex); out_put: of_node_put(args.np); =20 @@ -1135,10 +1129,11 @@ int __reset_control_bulk_get(struct device *dev, in= t num_rstcs, return 0; =20 err: - mutex_lock(&reset_list_mutex); + guard(mutex)(&reset_list_mutex); + while (i--) __reset_control_put_internal(rstcs[i].rstc); - mutex_unlock(&reset_list_mutex); + return ret; } EXPORT_SYMBOL_GPL(__reset_control_bulk_get); @@ -1147,10 +1142,10 @@ static void reset_control_array_put(struct reset_co= ntrol_array *resets) { int i; =20 - mutex_lock(&reset_list_mutex); + guard(mutex)(&reset_list_mutex); + for (i =3D 0; i < resets->num_rstcs; i++) __reset_control_put_internal(resets->rstc[i]); - mutex_unlock(&reset_list_mutex); kfree(resets); } =20 @@ -1168,9 +1163,9 @@ void reset_control_put(struct reset_control *rstc) return; } =20 - mutex_lock(&reset_list_mutex); + guard(mutex)(&reset_list_mutex); + __reset_control_put_internal(rstc); - mutex_unlock(&reset_list_mutex); } EXPORT_SYMBOL_GPL(reset_control_put); =20 @@ -1181,10 +1176,10 @@ EXPORT_SYMBOL_GPL(reset_control_put); */ void reset_control_bulk_put(int num_rstcs, struct reset_control_bulk_data = *rstcs) { - mutex_lock(&reset_list_mutex); + guard(mutex)(&reset_list_mutex); + while (num_rstcs--) __reset_control_put_internal(rstcs[num_rstcs].rstc); - mutex_unlock(&reset_list_mutex); } EXPORT_SYMBOL_GPL(reset_control_bulk_put); =20 @@ -1403,10 +1398,10 @@ of_reset_control_array_get(struct device_node *np, = enum reset_control_flags flag return &resets->base; =20 err_rst: - mutex_lock(&reset_list_mutex); + guard(mutex)(&reset_list_mutex); + while (--i >=3D 0) __reset_control_put_internal(resets->rstc[i]); - mutex_unlock(&reset_list_mutex); =20 kfree(resets); =20 --=20 2.47.3 From nobody Thu Apr 9 16:33:38 2026 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 ECF68423146 for ; Fri, 6 Mar 2026 17:23:28 +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=1772817810; cv=none; b=u1V4/35ME5RaYtQepRge87cUA19u9xKmKy/6YBKBB4jHeagI41YAnzj12nrOjdA/xp/BJNId7g2bnz65YVP17t20L4bNWihnQs6zLSJUl4G4zm7KCdAVg9hpf6M+1CY84AACVxrzH70NMovGvHRhy60tr5E4XEQGn+BOTOiJ8MQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772817810; c=relaxed/simple; bh=sL1q9wwhxHZZrZlh7F46CRESH8uPDctEF3AFiujRX4A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bSFQRgvOtpNhsxYhAsPZpfacg7hbfENXl2iVfI1ghpkWgxrna8/+P9oT0zP0Qk5RMHM6Bb8b4ZpdyLpsg7q7jsB5TiNjJALMt7L2AiGLH8HtrMEy1M8mRwwg4znQdlxNEg7krSHhZ3SWwx5gS30ZoQJ0wYDGtxKWmb5A6MieCMw= 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=W9MX6hU8; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=JpOpZiz3; 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="W9MX6hU8"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="JpOpZiz3" Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 626H1eFC1343608 for ; Fri, 6 Mar 2026 17:23:28 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= fazAAiBrJ7rgJoOI1TWI0OtZrQogm6Eto7WktTDuRyg=; b=W9MX6hU81VQfwHLq +3fst/M5fdxsNaIRZRb3F0JrEHkIJBmeQxyo6gCF7IXRMTudp1/DER/q3oEQgyiK Up+6NujwvwH8JCEahFnh/41+KZ4lOBAokdL1sTP59EbqJ42/IGasCKRW3uvliLhx Je1iTy8tNroO/v/98dFKRnikwZiPWQnG0ne72fbqpxT5Nof7fYMNMB/EDNeZ1XtV kc5bZFrjgwrKyE50O3g71pDzDvNAZV/P3RkTPuRjY2ouOCNkSJaX/AhkSBUjnqGm vlkku+XUrVuHbamANAhHhLbP93A58rK0kCsauJxYJ5G27OxlpE23U8t/aivwYPTF U8s6rQ== Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cr2uqr4fx-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 06 Mar 2026 17:23:28 +0000 (GMT) Received: by mail-qk1-f198.google.com with SMTP id af79cd13be357-8c70ef98116so6167972385a.1 for ; Fri, 06 Mar 2026 09:23:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772817807; x=1773422607; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=fazAAiBrJ7rgJoOI1TWI0OtZrQogm6Eto7WktTDuRyg=; b=JpOpZiz3QO+J4bhps7a0foh48MkMvkYAwV+f3jY17RXO/MKYvczLasmznKzywVQgPd 9KYN+B5bN/zn05aCJmZyCi/yYiAMKM3Rf1y+qmbMSpv0oFi/OK8tJl+Gbx86ziDlDIxw Pdx3e/+wdjb99BidpwzdlGiwKhT8fgndiHbLqv9e94fHtm6yX3lcJOfavW9a+RT8dwP7 IdNxhJ81dwubhhy9ipdLXVeJvQnv3SrxajfpOsQcSQefVEMkOH0+aO6IExYhkayKY6EI nvwHtZNh2W1+ztE/aeT3pXcnmrhyLSWyTfVn0zEMoAa+yFl61+1g8fiqPVhSZmqymZVH cDOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772817807; x=1773422607; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=fazAAiBrJ7rgJoOI1TWI0OtZrQogm6Eto7WktTDuRyg=; b=j1vGsY/iBRlFt3ipoX1nRARc/wFwcyhiDYDXOwV4qQ/Odziwx5Zc90LukVDw6WIvrS qZR59fT4rntHYV5aQOYAeVFVT+HNCFYoIIwKX6QzPYqDh39T9bwE5+KomkSpe5r9BzC5 QoLFjYZ9U5twA3P6Y3RXOeDhZmKux6BffizFVMFydTSfbWiibSV0jDRxnpR6uiZIByyt AITIFO4bJ/bREAmXq9f4MrRx9b+vO698KcujUg5ifQd3RHaqFUcuVHluW7dB6h/s68lY QlfU0ytJU+ihijsmlZTu3Sm3eg2xZpyDxv5pnkXqJoWJAWG3/yUfZpu3mIuBsRNzAZWL l6SQ== X-Gm-Message-State: AOJu0Yxp6+Z/z7GzmfoSAO/3+0L9IzIG660NxCPsqDX3Nmm0LtKO+DpE qENZSrouLLxzvxyttEAodLzdnnMELPZcUzVFyl0pNASdhlgdWJJ/626gzC+j5CDjO4kHd2Swcmm 009ApcM45Adpnxv9Ic+iRyLFgru/kTUtGHAN5w5bpEHfzwKExh8FIoAXYXBuKjLE4+HY= X-Gm-Gg: ATEYQzy0b55TJOkRcT2OTfDoKAmfP7ULZjZRrJsdpItr0M6c9q+sbN0Au6mSsP2ezU6 RD+NFSjhiE9d9uH4VlVKxfI202n2pOpKBBl8BxNKovZh4WPELg9h9t1MAbQMUKizq5VmRXEf6uY oGhEX7iNfjNC6pugwWKRCBFL8LYrPCONnvt8zaG83LPlzvfD4u4UQkEZ9QyLGgsBcIQeAzNMOvF u37h9qcQkIPSTrq02udOpaYPlDN8zl1AkGCCHkgjzTDI72ptJwYoHtEQPV9Dg4NraLl4Z30qIZ7 0bk5UMoSGqpVhRv8bpLwo4tCy7HwKSHI25aou0KrROr693A1UORrT5sFNPOoSe3NEkKP6uodf3K yRndNBl+bv1fNvn+TroXTOLU4P7X05WO6feIXbCoSkiRyOSMqJbEH X-Received: by 2002:a05:620a:254b:b0:8b2:d56a:f2f1 with SMTP id af79cd13be357-8cd6d40d267mr359556685a.12.1772817806869; Fri, 06 Mar 2026 09:23:26 -0800 (PST) X-Received: by 2002:a05:620a:254b:b0:8b2:d56a:f2f1 with SMTP id af79cd13be357-8cd6d40d267mr359552685a.12.1772817806371; Fri, 06 Mar 2026 09:23:26 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:28b1:4950:7702:bb20]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48527686fa9sm61488475e9.8.2026.03.06.09.23.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Mar 2026 09:23:25 -0800 (PST) From: Bartosz Golaszewski Date: Fri, 06 Mar 2026 18:22:52 +0100 Subject: [PATCH v3 08/14] reset: handle removing supplier before consumers Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260306-reset-core-refactor-v3-8-599349522876@oss.qualcomm.com> References: <20260306-reset-core-refactor-v3-0-599349522876@oss.qualcomm.com> In-Reply-To: <20260306-reset-core-refactor-v3-0-599349522876@oss.qualcomm.com> To: Krzysztof Kozlowski , Philipp Zabel , Jonathan Corbet , Shuah Khan Cc: linux-kernel@vger.kernel.org, brgl@kernel.org, linux-doc@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=10031; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=sL1q9wwhxHZZrZlh7F46CRESH8uPDctEF3AFiujRX4A=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpqw15Ls0YS7j9WVv1iX72gt+CjrpvW/q/jC3p0 cOBuXz1cCSJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaasNeQAKCRAFnS7L/zaE w/3YD/9j0ymPwkWZFU91RLCWsUFScuvva76Tq5IPTY3c9hJSFzZ6zUt/lc0hg0bepX8s+pXd/78 HBEVqWxFObobj/VUe5efx+mkErVTwMBtz0UPdqAuex3QwNkxjqw+21St+e6Hi91TC+cGgat284F XLgn/qDTQ+lETUBcEH39AYfF2QAhrqnjkWOrokT6Le0sZsoyCSIuxlOHbV+FCiIjb2ZcrZZcwwb UZrjkGTsQi+I3IFRmBe7skYV4NFL+q+riRanXOBcCyyQJFp0lPBaKbf5BJqkgjW/1m7O0cwtAQd mo06H7aC/9IvaBi8rJlxrqGeE/4+mVzk01WLs7E1ysgtToZoe1xQgyQeREAcS1ADe4fh8d4jeCv wU+7rvWJ8TJKhhsEPT43n6e6JLz/oPWL/Em2paf0pwHaayOMYoSJEBnI8p3cYtNjqIXFp2KyynO CWatyKhcFNtH/Y6YBR80nTzBvEOkl8r5ApxFCNjSqakQNdBAL3dW4THy2aY+nmU1o3+Ha/CkrZ3 h2HZBOB0NMIxdjBhKJNprxYa6yqs2hwrqG75cglS2nHt7QgAJlqum/LUpOgo2G6uEyTx8nA4ccw u13AXIdStUrtavBq44MlsP9b6nghD4G4Zu2wEyGbMVRLCGwBldGSWNuy7XDUqcYLa1Ne/VE/cEz ZFEQSrtkgVZCulQ== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDE2NCBTYWx0ZWRfX2bqGxr/Jtw5I 0fDZUV2tUXhjMOsOsE21HA0dvDm0FjdHzAfsC73cF/JjZ2QydLPnvL/haYnG9LusAgj7aEXce4V H7EhdgWVVvAcek8I91vfXBPnXLzxPx/wZgXk5gZAjP8jCR+NZHe5AXvfXEqHDtNSiQEkmTln/Kx giYjb8/G/b8+ozSZhsbGIGLsrzfStWFSOh5ajc+VZ5kAXcLaSREwP4d8Z7zMckVYKz0yiU3kQWB TnijjnEq2RxgUOywfP+Y9LghW147TG7mZlHCbGBeQGJI8TEC7rDCSxwNDFTaUeGbJfzG1/4+BAT /XQZRSL+YNCQdS6RmifhY+uGqn3vOqIpeZcfhNL1iCc1X7XdLbGVY77aZPaop1p4IT2lFg+iHWJ dteYFABRRulPzzGfqBz2zj0wJmLq8U1xr4KlYty9LnTKyy57w5yzUGiyefSEdQQwUNUiv4Gcd8H XjY+pNjE0IHg6xOlqgA== X-Proofpoint-GUID: 3c2-DlnmjWbLezuzllIrywFWH194mciw X-Proofpoint-ORIG-GUID: 3c2-DlnmjWbLezuzllIrywFWH194mciw X-Authority-Analysis: v=2.4 cv=Q+HfIo2a c=1 sm=1 tr=0 ts=69ab0d90 cx=c_pps a=qKBjSQ1v91RyAK45QCPf5w==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=GiwafSNXLQ0EgbbDNmMA:9 a=QEXdDO2ut3YA:10 a=NFOGd7dJGGMPyQGDc5-O:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_05,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 adultscore=0 bulkscore=0 suspectscore=0 clxscore=1015 lowpriorityscore=0 impostorscore=0 priorityscore=1501 spamscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603060164 Except for the reset-gpio, all reset drivers use device tree - and as such - benefit from the device links set up by driver core. This means, that no reset supplier will be unbound before all its consumers have been. For this reason, nobody bothered making the reset core resiliant to the object life-time issues that are plagueing the kernel. In this case: reset control handles referencing the reset provider device with no serialization or NULL-pointer checking. We now want to make the reset core fwnode-agnostic but before we do, we must make sure it can survive unbinding of suppliers with consumers still holding reset control handles. To that end: use SRCU to protect the rcdev pointer inside struct reset_control. We protect all sections using the pointer with SRCU read-only critical sections and synchronize SRCU after every modification of the pointer. This is in line with what the GPIO subsystem does and what the proposed revocable API tries to generalize. When and if the latter makes its way into the kernel, reset core could potentially also be generalized to use it. Signed-off-by: Bartosz Golaszewski Reviewed-by: Philipp Zabel --- drivers/reset/core.c | 108 +++++++++++++++++++++++++++++++++++++++++++----= ---- 1 file changed, 91 insertions(+), 17 deletions(-) diff --git a/drivers/reset/core.c b/drivers/reset/core.c index 9fef9f972e93fb7388f27ac3bbdf68c884b72ff5..96199e7b0dd7c89c5a11e2e2c3e= 5eb7fd5d49355 100644 --- a/drivers/reset/core.c +++ b/drivers/reset/core.c @@ -23,6 +23,7 @@ #include #include #include +#include =20 static DEFINE_MUTEX(reset_list_mutex); static LIST_HEAD(reset_controller_list); @@ -36,6 +37,7 @@ static DEFINE_IDA(reset_gpio_ida); * struct reset_control - a reset control * @rcdev: a pointer to the reset controller device * this reset control belongs to + * @srcu: protects the rcdev pointer from removal during consumer access * @list: list entry for the rcdev's reset controller list * @id: ID of the reset controller in the reset * controller device @@ -49,7 +51,8 @@ static DEFINE_IDA(reset_gpio_ida); * will be either 0 or 1. */ struct reset_control { - struct reset_controller_dev *rcdev; + struct reset_controller_dev __rcu *rcdev; + struct srcu_struct srcu; struct list_head list; unsigned int id; struct kref refcnt; @@ -137,15 +140,35 @@ int reset_controller_register(struct reset_controller= _dev *rcdev) } EXPORT_SYMBOL_GPL(reset_controller_register); =20 +static void reset_controller_remove(struct reset_controller_dev *rcdev, + struct reset_control *rstc) +{ + list_del(&rstc->list); + module_put(rcdev->owner); + put_device(rcdev->dev); +} + /** * reset_controller_unregister - unregister a reset controller device * @rcdev: a pointer to the reset controller device */ void reset_controller_unregister(struct reset_controller_dev *rcdev) { + struct reset_control *rstc, *pos; + guard(mutex)(&reset_list_mutex); =20 list_del(&rcdev->list); + + /* + * Numb but don't free the remaining reset control handles that are + * still held by consumers. + */ + list_for_each_entry_safe(rstc, pos, &rcdev->reset_control_head, list) { + rcu_assign_pointer(rstc->rcdev, NULL); + synchronize_srcu(&rstc->srcu); + reset_controller_remove(rcdev, rstc); + } } EXPORT_SYMBOL_GPL(reset_controller_unregister); =20 @@ -322,6 +345,7 @@ static inline bool reset_control_is_array(struct reset_= control *rstc) */ int reset_control_reset(struct reset_control *rstc) { + struct reset_controller_dev *rcdev; int ret; =20 if (!rstc) @@ -333,7 +357,13 @@ int reset_control_reset(struct reset_control *rstc) if (reset_control_is_array(rstc)) return reset_control_array_reset(rstc_to_array(rstc)); =20 - if (!rstc->rcdev->ops->reset) + guard(srcu)(&rstc->srcu); + + rcdev =3D srcu_dereference(rstc->rcdev, &rstc->srcu); + if (!rcdev) + return -ENODEV; + + if (!rcdev->ops->reset) return -ENOTSUPP; =20 if (rstc->shared) { @@ -347,7 +377,7 @@ int reset_control_reset(struct reset_control *rstc) return -EPERM; } =20 - ret =3D rstc->rcdev->ops->reset(rstc->rcdev, rstc->id); + ret =3D rcdev->ops->reset(rcdev, rstc->id); if (rstc->shared && ret) atomic_dec(&rstc->triggered_count); =20 @@ -437,6 +467,8 @@ EXPORT_SYMBOL_GPL(reset_control_rearm); */ int reset_control_assert(struct reset_control *rstc) { + struct reset_controller_dev *rcdev; + if (!rstc) return 0; =20 @@ -446,6 +478,12 @@ int reset_control_assert(struct reset_control *rstc) if (reset_control_is_array(rstc)) return reset_control_array_assert(rstc_to_array(rstc)); =20 + guard(srcu)(&rstc->srcu); + + rcdev =3D srcu_dereference(rstc->rcdev, &rstc->srcu); + if (!rcdev) + return -ENODEV; + if (rstc->shared) { if (WARN_ON(atomic_read(&rstc->triggered_count) !=3D 0)) return -EINVAL; @@ -460,7 +498,7 @@ int reset_control_assert(struct reset_control *rstc) * Shared reset controls allow the reset line to be in any state * after this call, so doing nothing is a valid option. */ - if (!rstc->rcdev->ops->assert) + if (!rcdev->ops->assert) return 0; } else { /* @@ -468,17 +506,17 @@ int reset_control_assert(struct reset_control *rstc) * is no way to guarantee that the reset line is asserted after * this call. */ - if (!rstc->rcdev->ops->assert) + if (!rcdev->ops->assert) return -ENOTSUPP; =20 if (!rstc->acquired) { WARN(1, "reset %s (ID: %u) is not acquired\n", - rcdev_name(rstc->rcdev), rstc->id); + rcdev_name(rcdev), rstc->id); return -EPERM; } } =20 - return rstc->rcdev->ops->assert(rstc->rcdev, rstc->id); + return rcdev->ops->assert(rcdev, rstc->id); } EXPORT_SYMBOL_GPL(reset_control_assert); =20 @@ -525,6 +563,8 @@ EXPORT_SYMBOL_GPL(reset_control_bulk_assert); */ int reset_control_deassert(struct reset_control *rstc) { + struct reset_controller_dev *rcdev; + if (!rstc) return 0; =20 @@ -534,6 +574,12 @@ int reset_control_deassert(struct reset_control *rstc) if (reset_control_is_array(rstc)) return reset_control_array_deassert(rstc_to_array(rstc)); =20 + guard(srcu)(&rstc->srcu); + + rcdev =3D srcu_dereference(rstc->rcdev, &rstc->srcu); + if (!rcdev) + return -ENODEV; + if (rstc->shared) { if (WARN_ON(atomic_read(&rstc->triggered_count) !=3D 0)) return -EINVAL; @@ -543,7 +589,7 @@ int reset_control_deassert(struct reset_control *rstc) } else { if (!rstc->acquired) { WARN(1, "reset %s (ID: %u) is not acquired\n", - rcdev_name(rstc->rcdev), rstc->id); + rcdev_name(rcdev), rstc->id); return -EPERM; } } @@ -555,10 +601,10 @@ int reset_control_deassert(struct reset_control *rstc) * case, the reset controller driver should implement .deassert() and * return -ENOTSUPP. */ - if (!rstc->rcdev->ops->deassert) + if (!rcdev->ops->deassert) return 0; =20 - return rstc->rcdev->ops->deassert(rstc->rcdev, rstc->id); + return rcdev->ops->deassert(rcdev, rstc->id); } EXPORT_SYMBOL_GPL(reset_control_deassert); =20 @@ -600,14 +646,22 @@ EXPORT_SYMBOL_GPL(reset_control_bulk_deassert); */ int reset_control_status(struct reset_control *rstc) { + struct reset_controller_dev *rcdev; + if (!rstc) return 0; =20 if (WARN_ON(IS_ERR(rstc)) || reset_control_is_array(rstc)) return -EINVAL; =20 - if (rstc->rcdev->ops->status) - return rstc->rcdev->ops->status(rstc->rcdev, rstc->id); + guard(srcu)(&rstc->srcu); + + rcdev =3D srcu_dereference(rstc->rcdev, &rstc->srcu); + if (!rcdev) + return -ENODEV; + + if (rcdev->ops->status) + return rcdev->ops->status(rcdev, rstc->id); =20 return -ENOTSUPP; } @@ -635,6 +689,7 @@ EXPORT_SYMBOL_GPL(reset_control_status); */ int reset_control_acquire(struct reset_control *rstc) { + struct reset_controller_dev *rcdev; struct reset_control *rc; =20 if (!rstc) @@ -651,7 +706,13 @@ int reset_control_acquire(struct reset_control *rstc) if (rstc->acquired) return 0; =20 - list_for_each_entry(rc, &rstc->rcdev->reset_control_head, list) { + guard(srcu)(&rstc->srcu); + + rcdev =3D srcu_dereference(rstc->rcdev, &rstc->srcu); + if (!rcdev) + return -ENODEV; + + list_for_each_entry(rc, &rcdev->reset_control_head, list) { if (rstc !=3D rc && rstc->id =3D=3D rc->id) { if (rc->acquired) return -EBUSY; @@ -743,6 +804,7 @@ __reset_control_get_internal(struct reset_controller_de= v *rcdev, bool shared =3D flags & RESET_CONTROL_FLAGS_BIT_SHARED; bool acquired =3D flags & RESET_CONTROL_FLAGS_BIT_ACQUIRED; struct reset_control *rstc; + int ret; =20 lockdep_assert_held(&reset_list_mutex); =20 @@ -773,12 +835,19 @@ __reset_control_get_internal(struct reset_controller_= dev *rcdev, if (!rstc) return ERR_PTR(-ENOMEM); =20 + ret =3D init_srcu_struct(&rstc->srcu); + if (ret) { + kfree(rstc); + return ERR_PTR(ret); + } + if (!try_module_get(rcdev->owner)) { + cleanup_srcu_struct(&rstc->srcu); kfree(rstc); return ERR_PTR(-ENODEV); } =20 - rstc->rcdev =3D rcdev; + rcu_assign_pointer(rstc->rcdev, rcdev); list_add(&rstc->list, &rcdev->reset_control_head); rstc->id =3D index; kref_init(&rstc->refcnt); @@ -793,13 +862,18 @@ static void __reset_control_release(struct kref *kref) { struct reset_control *rstc =3D container_of(kref, struct reset_control, refcnt); + struct reset_controller_dev *rcdev; =20 lockdep_assert_held(&reset_list_mutex); =20 - module_put(rstc->rcdev->owner); + scoped_guard(srcu, &rstc->srcu) { + rcdev =3D rcu_replace_pointer(rstc->rcdev, NULL, true); + if (rcdev) + reset_controller_remove(rcdev, rstc); + } =20 - list_del(&rstc->list); - put_device(rstc->rcdev->dev); + synchronize_srcu(&rstc->srcu); + cleanup_srcu_struct(&rstc->srcu); kfree(rstc); } =20 --=20 2.47.3 From nobody Thu Apr 9 16:33:38 2026 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 0E50C413249 for ; Fri, 6 Mar 2026 17:23:29 +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=1772817812; cv=none; b=CUZU7mkSpgJqIugnM6UJSgwbAMrgrpZpgxhL0I6OxHgBUv0pJe4ogop3d3vQj3RLPKRnZA1zZW3DjrjjSs/uRSYNiPZN76LWY1tMv6Pqquwv3z6mgKv5hOMXsys/RB2B5zO743y9y18H+8YtSbIyE+oWOLaxWZ8iVkzesYF53vY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772817812; c=relaxed/simple; bh=2dSbt+BiOQcE24R8y3iG8J4EmvYs/25ZYHkB6KVqJ7M=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lV+6povoWxFef2vzSKxWmIzWwhdCI4yzFqRLXImKuC49s6RryTOq7Yy6B2tmuKVILLSP5Gn5AeEbB1kWyqQ1/9vQCsLhYfNvJmo634qlL196Iaxgo/Oxn9WpE9AZ5Nx34vB1731J09yqZJ7F4II8UwwnoRO3YVpJVapbUcqK01s= 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=jJtnvyku; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=SWjHzmo5; 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="jJtnvyku"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="SWjHzmo5" Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 626H1qds667982 for ; Fri, 6 Mar 2026 17:23:29 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= kz1YhNjIW+4C6uoNZPj8hC4jLrXx/lkbggRKdn14qv8=; b=jJtnvyku+zJPiPYt SBATWlj3HgfZKdk5YsHy+0BS4zq+87U4LrtPlYNCWyJboKap3VwRxAbLJSM+zIZk sR9CdLKeaRxdlp1yNKIl+4nte/hOz/a1SlVZZscUVcBXIsbs9ljtUeC9/kYbyDQc eNz0V6SYg79d5gIxuUt5CxnY6/ptGhYlmnm1hEaNtTAeIRx9hTqi95FeN6gH49Kz kt3K07SArSMMvwQszNmhINmCMlN4REFacwOcZaU24eBYE0ZFD/gpshaxQ1nWHkBR ovNvtVAr9xmWr44xCTul94mRlXqmPShyAgkOPRz4F/XuQqKQWfXLBFuTQ/qF6jAh NUAbIw== Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cr2ye03cf-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 06 Mar 2026 17:23:29 +0000 (GMT) Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-8cb4a241582so4756248485a.0 for ; Fri, 06 Mar 2026 09:23:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772817808; x=1773422608; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=kz1YhNjIW+4C6uoNZPj8hC4jLrXx/lkbggRKdn14qv8=; b=SWjHzmo5kaWjTRBGl1QGjblg7PmlBF6rsGxR0MGQM26FYFOyDCDTnjnOBO3BbUqXxw 2N8MhphdfKsunP4sa4ndCnGmgpC1IPHEjgkfAAwm/ACS+BXwPVpKjXfRxUj+jyLuAgLx m9QoSwN72MjfvQyBdg053eXi5LCH9XeZE4x2oCTSdm0XkRdxG9AaR3uf9IriyvZa0Yr+ QEPm0Lc0yiO9MfjHdqyoO43JSkqzXw+f6dEuSJ+/TtM64pNSKGThEPr1X5PoImIG07cP DlxeqZ8szbjg1IKeW/u0s+B/LT0GE64kVqhvclx8Nw/04W+bEK1r4zSoMqTpjbM8T35T v/Uw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772817808; x=1773422608; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=kz1YhNjIW+4C6uoNZPj8hC4jLrXx/lkbggRKdn14qv8=; b=I5o95M+rvQ8wO24MEC409grZW7xhtyyIT0ulYHw+BZ9GNLSJH/gZFUTtWeUWdNLap8 lupmxYMH0a71XIuaWuvg/r7L6/69CHbfa7o9h4g+uQLC5W97Zu61NZTldQqYymBeBJhu zN4YzoYAoR7h3eCxcCg1CENqAaqsQQDXlLLf1IyFkO6Ukfvwq2HrYdgopBwUz0zIFuU4 XfWttzL0fX789PZLghQItYdVTb/U8BN5TbabNhHaov8M2CiQrGM33wc1ABqOd3C15blC XRbkiD6zkYV8ivp90TOoBpth8NafWuftq3oDH5QJbuXXnNMDA6+muByvM/5xFf8xNT7j hUYQ== X-Gm-Message-State: AOJu0Ywq+6fyMH3sREhlRABN8/q9QgzAWrreJDsfI98BAPNQrsSqvUMe at7dnBN5RehiqlRqDjLQdOBzKB/TTE7gjmqUGjmWNWQnkK6jHpi3WMEBOTR6Ir29tpMYF4xpfDR 6chJuZHQjYSqGOL9qccCzd+zqC/Kurm3vJ41DwnYmNp7C5MX6GKxkx0h6qfhb1BGLGBI= X-Gm-Gg: ATEYQzzrGU/kMuNvsIA0Ov4XSFwE9Z3xnJFjQIeVsZb1kGhZGjkoMSF2tNjvtBl2yXp aNU45GBd1lWrifcNPEYUvRDRkAH66pofWBvKSlqO0W+z+XmOBplEhYcNFWRQWMQjLhqydrUzCsd cNLexnfLl8em4V0G972jAyvNmak09h2s57LnGhORKuyo6AIMlPTjKscDS7HPRkjog1m4xYrk7xs 7NhOoaR6ZAdMELhMX7rn7avvLAe/bDCfWTBcFPINRTjSCkVYOzjdXYF5mdp+Qb8kgdGm0akvqgX mlgyQHzkVqeNQOcyJbokEa3X5MkqOuJ7gNpQtlBJ+Ra1XQwCTo4Ucz2Lmh9oJFa3icrJZE6KO2f 4HPTtbv4jo0wAEtBrtXQkrUo9347YWua8epXcOl3gEzMc0mUejrJy X-Received: by 2002:a05:620a:4588:b0:8c7:7a3:501c with SMTP id af79cd13be357-8cd6d4285famr337149585a.52.1772817808247; Fri, 06 Mar 2026 09:23:28 -0800 (PST) X-Received: by 2002:a05:620a:4588:b0:8c7:7a3:501c with SMTP id af79cd13be357-8cd6d4285famr337146185a.52.1772817807777; Fri, 06 Mar 2026 09:23:27 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:28b1:4950:7702:bb20]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48527686fa9sm61488475e9.8.2026.03.06.09.23.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Mar 2026 09:23:27 -0800 (PST) From: Bartosz Golaszewski Date: Fri, 06 Mar 2026 18:22:53 +0100 Subject: [PATCH v3 09/14] reset: protect struct reset_controller_dev with its own mutex Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260306-reset-core-refactor-v3-9-599349522876@oss.qualcomm.com> References: <20260306-reset-core-refactor-v3-0-599349522876@oss.qualcomm.com> In-Reply-To: <20260306-reset-core-refactor-v3-0-599349522876@oss.qualcomm.com> To: Krzysztof Kozlowski , Philipp Zabel , Jonathan Corbet , Shuah Khan Cc: linux-kernel@vger.kernel.org, brgl@kernel.org, linux-doc@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4633; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=2dSbt+BiOQcE24R8y3iG8J4EmvYs/25ZYHkB6KVqJ7M=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpqw16njLyn0oTsNoBmOjieQryV6bt2dJsikFub 4L2rzaeCKyJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaasNegAKCRAFnS7L/zaE w1aiD/4n/5Mtrwfvl+1QYE1hw0YE6CljDRSJK+VeqIsU08Sjd+jKa0n7O4EPx5ZWQWsxu4S/9Nb e06pi9FXHhgPXuzPw8AJkXnGHwLmouQ+tua+Y6CMcs8q7Gb7JqNcv0LMfSeJRjV7rNVKia3AS/C CmPe3AMA8OOr2jk8eYZxZP3Dn2fakxtfGoofc4dQ6CBsZ2zIj2n+ow9iLVUM3VQdOVylbAkOq/N MbjIrwl3GR/WPmvcF1YX4pSUXSwHg7b7NYyRjEQJWQVKG76awsXbz3IAuiWFhEL3jCh+wp3afq/ 93WnD/XgShtrpddf0b5D48u4oDAlb3iNLq6JOZVfMfUk8kuRukPqF6AQxN8ldTzDDQAsplKoPqa lBvO9vhoRm+Kcx+ZaiJIN1lkbp8wFNsSVbvgavV75LIS/7N3UxYmRiSraz78dxEVShiFXw5aR92 iTPyzzHEzsAnlw4CQQo3QkZrsr0SOVGzFw//Zp11pF4yDjTSdjIvBdKX/b5+xjRdZoc4dRZfvvU eAFxrCFXWcCxuSNBEgZAI1kyTqZI+cR645QY4ZLh1GArgkb0psMj2HTbJviAYmZ6WUaVdMM+1dF eiXn4qBtxfYqJE/kYGXDrUNZIvuQF74XlNljYHVrqTd8pJ+Iql32M8xUzGpOvyfe7OtiRjN6tmt pdWkw7wbPNnXF2A== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDE2NCBTYWx0ZWRfX6DbYNCoyjNhA fltCeTKWjjvX418SEHd1sptYpoDvUZnAcL7JZbAHRrfMaqublKVQVUPL099H0nblLkHPOlrb7Qy jeEq4yZ17nH/WWKF4eelFfXO0psvdy2KHW+4RI52Q5wpeoPduykXESZMiOlqegLycn+e1WL9IXk LdjaHXOc8RqfuvgkazXJ3Qt9I21q0VCbZnbuQnu7Kyfed2LGYt8L9tHV/gq8V8Xtav4tbMZF11U y9OSL01oVt7Iq/ZsdwHb018OZ75N0OxVgONnrRHyjbIVGSjPQBPlVbFii6P0MQhzbKO/jbf83t0 Bt5QzeyzHDaTgIm7FneldIBKQ+8N4DD+uSCXH0YSMhWJLanC87GTm2zkcj5ANMVkkZ5X5YjG2+x AUt7BebpYXkBIYf4zCpBSDOYfPZ8GhGiM92/qcRqT6lXwGYPahsP9+xu8DARol5SrCTkz8Daai5 HMdNWRyvGr4k362VqoA== X-Authority-Analysis: v=2.4 cv=Bt+QAIX5 c=1 sm=1 tr=0 ts=69ab0d91 cx=c_pps a=HLyN3IcIa5EE8TELMZ618Q==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=EUspDBNiAAAA:8 a=nQ7P6-40-II7rw7jOZoA:9 a=QEXdDO2ut3YA:10 a=bTQJ7kPSJx9SKPbeHEYW:22 X-Proofpoint-GUID: nsOEqTiYsWKrxYxtOzrHw_PlB_J2JcZt X-Proofpoint-ORIG-GUID: nsOEqTiYsWKrxYxtOzrHw_PlB_J2JcZt X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_05,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 priorityscore=1501 bulkscore=0 adultscore=0 clxscore=1015 phishscore=0 impostorscore=0 suspectscore=0 malwarescore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603060164 Currently we use a single, global mutex - misleadingly names reset_list_mutex - to protect the global list of reset devices, per-controller list of reset control handles and also internal fields of struct reset_control. Locking can be made a lot more fine-grained if we use a separate mutex for serializing operations on the list AND accessing the reset controller device. Signed-off-by: Bartosz Golaszewski Reviewed-by: Philipp Zabel --- drivers/reset/core.c | 44 ++++++++++++++++++++++++------------= ---- include/linux/reset-controller.h | 3 +++ 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/drivers/reset/core.c b/drivers/reset/core.c index 96199e7b0dd7c89c5a11e2e2c3e5eb7fd5d49355..d4813c712abf3df7993b0c2be1f= e292b89241d11 100644 --- a/drivers/reset/core.c +++ b/drivers/reset/core.c @@ -131,6 +131,7 @@ int reset_controller_register(struct reset_controller_d= ev *rcdev) } =20 INIT_LIST_HEAD(&rcdev->reset_control_head); + mutex_init(&rcdev->lock); =20 guard(mutex)(&reset_list_mutex); =20 @@ -143,6 +144,8 @@ EXPORT_SYMBOL_GPL(reset_controller_register); static void reset_controller_remove(struct reset_controller_dev *rcdev, struct reset_control *rstc) { + lockdep_assert_held(&rcdev->lock); + list_del(&rstc->list); module_put(rcdev->owner); put_device(rcdev->dev); @@ -156,19 +159,22 @@ void reset_controller_unregister(struct reset_control= ler_dev *rcdev) { struct reset_control *rstc, *pos; =20 - guard(mutex)(&reset_list_mutex); - - list_del(&rcdev->list); + scoped_guard(mutex, &reset_list_mutex) + list_del(&rcdev->list); =20 - /* - * Numb but don't free the remaining reset control handles that are - * still held by consumers. - */ - list_for_each_entry_safe(rstc, pos, &rcdev->reset_control_head, list) { - rcu_assign_pointer(rstc->rcdev, NULL); - synchronize_srcu(&rstc->srcu); - reset_controller_remove(rcdev, rstc); + scoped_guard(mutex, &rcdev->lock) { + /* + * Numb but don't free the remaining reset control handles that are + * still held by consumers. + */ + list_for_each_entry_safe(rstc, pos, &rcdev->reset_control_head, list) { + rcu_assign_pointer(rstc->rcdev, NULL); + synchronize_srcu(&rstc->srcu); + reset_controller_remove(rcdev, rstc); + } } + + mutex_destroy(&rcdev->lock); } EXPORT_SYMBOL_GPL(reset_controller_unregister); =20 @@ -712,10 +718,12 @@ int reset_control_acquire(struct reset_control *rstc) if (!rcdev) return -ENODEV; =20 - list_for_each_entry(rc, &rcdev->reset_control_head, list) { - if (rstc !=3D rc && rstc->id =3D=3D rc->id) { - if (rc->acquired) - return -EBUSY; + scoped_guard(mutex, &rcdev->lock) { + list_for_each_entry(rc, &rcdev->reset_control_head, list) { + if (rstc !=3D rc && rstc->id =3D=3D rc->id) { + if (rc->acquired) + return -EBUSY; + } } } =20 @@ -806,7 +814,7 @@ __reset_control_get_internal(struct reset_controller_de= v *rcdev, struct reset_control *rstc; int ret; =20 - lockdep_assert_held(&reset_list_mutex); + lockdep_assert_held(&rcdev->lock); =20 /* Expect callers to filter out OPTIONAL and DEASSERTED bits */ if (WARN_ON(flags & ~(RESET_CONTROL_FLAGS_BIT_SHARED | @@ -868,8 +876,10 @@ static void __reset_control_release(struct kref *kref) =20 scoped_guard(srcu, &rstc->srcu) { rcdev =3D rcu_replace_pointer(rstc->rcdev, NULL, true); - if (rcdev) + if (rcdev) { + guard(mutex)(&rcdev->lock); reset_controller_remove(rcdev, rstc); + } } =20 synchronize_srcu(&rstc->srcu); diff --git a/include/linux/reset-controller.h b/include/linux/reset-control= ler.h index aa95b460fdf86f10002a465e285cd0119da6eeaf..185d2a9bd7cd381ddc51c0f1643= c4e3cb196015e 100644 --- a/include/linux/reset-controller.h +++ b/include/linux/reset-controller.h @@ -3,6 +3,7 @@ #define _LINUX_RESET_CONTROLLER_H_ =20 #include +#include =20 struct reset_controller_dev; =20 @@ -40,6 +41,7 @@ struct of_phandle_args; * device tree to id as given to the reset control ops, defaults * to :c:func:`of_reset_simple_xlate`. * @nr_resets: number of reset controls in this reset controller device + * @lock: protects the reset control list from concurrent access */ struct reset_controller_dev { const struct reset_control_ops *ops; @@ -52,6 +54,7 @@ struct reset_controller_dev { int (*of_xlate)(struct reset_controller_dev *rcdev, const struct of_phandle_args *reset_spec); unsigned int nr_resets; + struct mutex lock; }; =20 #if IS_ENABLED(CONFIG_RESET_CONTROLLER) --=20 2.47.3 From nobody Thu Apr 9 16:33:38 2026 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 A91A5425CEE for ; Fri, 6 Mar 2026 17:23:31 +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=1772817813; cv=none; b=AMpmvUEAy7H6oY8BNG4ABLmbm16Z5B1CCBQwBsAoubvEgwvoX9gfdL6GfnyPQ/fY8sJ6yYLbWF2QkdBFueijJrhnAkSwaK2y9KDM+fNls4HLptuIBhU/aeb7rv1dOUaac8DppqwpgJTgxIabAegV5Gi/vH9pIIyJwR29+6wWAD0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772817813; c=relaxed/simple; bh=cFVRek2ApJRDsXIzvIHRimHH12mRJMFB9qA0OR3X75s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lpwsMZZH4eXEm0yq1j9XF0Hzuy17c4oasgj2X9jACqWX87pJdHlzCNtwcPWfZS431Xn1Lujs8UXEonSmWfRV4D/cQ6OMAxCt++LpbbjKZbOmetqy+Ia8Q869bQAAdBRwDYpqk9SshdBWWd5EqRxZWghn9eDdDgi4XlprLuG/21o= 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=XuDEZbTB; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=eBgLCJle; 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="XuDEZbTB"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="eBgLCJle" Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 626H2PCe742675 for ; Fri, 6 Mar 2026 17:23:31 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= Mvf/fMp10klr3lNcw5FhLLQnphhOnIvjXrPlO1YIOoA=; b=XuDEZbTBDUms0QL3 pFHun+6dMmZl22RgOFv5W6Ag0v5s4encCtJ3efLqQzC2Zx6Yu2ch3aiLDcB8NDdZ PDGuL53/ZPNMq6Z4HCsAk++Je84zgNgzN+NAf0R5HWfM678CLKCLe6krhHFnOEM6 pGUHt2Y8oCXy2ZEO4CqpX/zFck0ItQwBQc7nAFhA/Rk/BtSK4pMJ1aA7jrV7QYve hdmD08c13KFofXIGntrQEvKwQs8ENpa5GHbCXlp20mLR2kypV/FPfTOBWLpNaenj /2RtjtpNF7wo9ORVcFayT+dwWp3D5zZikxHEzqEOfFM0fw/NfnAZf+iNa9m2MWAq MpFJOg== Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cqpxdtqbe-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 06 Mar 2026 17:23:30 +0000 (GMT) Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-8cb3ff05c73so4808261985a.0 for ; Fri, 06 Mar 2026 09:23:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772817810; x=1773422610; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=Mvf/fMp10klr3lNcw5FhLLQnphhOnIvjXrPlO1YIOoA=; b=eBgLCJleTEdO0QfhkCsSl5R5t2P0hJP88DDTqb3Zhw/z2anYp7PhuLbEEM2Rs3b4t2 CRUptjSHK6UJb3Vz2vmpYvrwSNK78MvRTLTynzSpOIUbdcoYoqaIe3ba/Y5TC7KqRisW eWf/67bqJjYVgFAzLxeRemwMBIzWCqc/v379Z0eY+9eSHaon0iJ++QI1kaD9hxi49avy 8ZRdDI1OvJqNDzMlrAYyZSSbkVKHTPGwqRFkpVoZsio0ysRoBDmotBv9juABvU7iFsQS fwrBkggOIHg47NAwur8Axoomo1dkycEhxS7iJmmlpKBstEfCh8azICzD45HUjVOcTddD erRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772817810; x=1773422610; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=Mvf/fMp10klr3lNcw5FhLLQnphhOnIvjXrPlO1YIOoA=; b=YOFwpZQAO0SI48AulGDfPg7KZ/Tkq6B1l9QUCU60ufgCKut02hf4wJdZAnCeI/NGZr 0M33rrXZOedF2BM9VvsnQvHkDP8qe3+YU4q3NGu/o8Z6UTyyplWh+tvdsMVWnAipyP2i YR1y5AHd/XWA+vRwRPISE59HcRjTT16WmtmBmTZLFxt5wZJB0FKlHyrL1HKxtsn2WBeP qBFpccgCcUVSBo12FDtoliMlLamVxb8JyPopMlbPP2IJyRzm4V18Yicy+x/coeFD2zRR uDq9XQip2qxlAvzlj1D8jO6gthN1QIEjcqEiCuVXooA1h6nj0N7KzHWJPDn6RfLkJ+nE SVNg== X-Gm-Message-State: AOJu0YxXX/zODaZNOKc1/54uZpgCqBb0fEqkkrD6OW5WDrgpwQTnYlwv 9iNt8mFy3TBlTcMyyI6pUNL9jDa9pn4RhPZZPDumza0cLooemStlronvXB0Xj1tw3KjtewscQSp 1z6uyVYhdNJLe+Te90hAFGZUUt4AXO3MzUUY1+GdL9Q11RrUxCxSrVxM+fACd8kPrN2Au44jrXT 4= X-Gm-Gg: ATEYQzwBWPrm/6qCSIctUJtsz/sz1gxDKYrahaQ0Lc4kcatMXQir8vj/o9H8De5VAOn faJ1P8gj3fZsTgltRxFP2HFUYlAJt3ZEAO1NzWByr2A2FJcWLMrExUvv6PjsMb7fbOMsVzDM03H Ia2/k/JUm/w3mT4ZXqgjwAsDbSTCrULm/HiwWH0iBcRC5mChTfhLGqp4NroHp/8lEWx3RyR01fn x4waS+50NxWrXM34lPrYIA7m45aFOMp/8h82/Wniy4rbxtgO668xfIOUs4broEn+oC1OWZYRK/R r1ksBFpaZDM6zscwn9YarxVOaXK2cmJ03nv8YBU25W3lDR7EuOpU+s51NKqN2NBoA6gCv4wXGzj cf3bgTnJ9oHuvZ3qnqT6+WrUr1HAC0MFnrDe09/SdE0RREI2m5dTw X-Received: by 2002:a05:620a:4048:b0:8a9:ef98:6835 with SMTP id af79cd13be357-8cd6d427f8cmr362535885a.33.1772817809752; Fri, 06 Mar 2026 09:23:29 -0800 (PST) X-Received: by 2002:a05:620a:4048:b0:8a9:ef98:6835 with SMTP id af79cd13be357-8cd6d427f8cmr362530285a.33.1772817809266; Fri, 06 Mar 2026 09:23:29 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:28b1:4950:7702:bb20]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48527686fa9sm61488475e9.8.2026.03.06.09.23.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Mar 2026 09:23:28 -0800 (PST) From: Bartosz Golaszewski Date: Fri, 06 Mar 2026 18:22:54 +0100 Subject: [PATCH v3 10/14] reset: protect struct reset_control with its own mutex Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260306-reset-core-refactor-v3-10-599349522876@oss.qualcomm.com> References: <20260306-reset-core-refactor-v3-0-599349522876@oss.qualcomm.com> In-Reply-To: <20260306-reset-core-refactor-v3-0-599349522876@oss.qualcomm.com> To: Krzysztof Kozlowski , Philipp Zabel , Jonathan Corbet , Shuah Khan Cc: linux-kernel@vger.kernel.org, brgl@kernel.org, linux-doc@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5788; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=cFVRek2ApJRDsXIzvIHRimHH12mRJMFB9qA0OR3X75s=; b=owEBbAKT/ZANAwAKAQWdLsv/NoTDAcsmYgBpqw17iaFtggQHPnqQeoX6wV2u7jiA/Zt0AhKg5 G4sX5hoQcCJAjIEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaasNewAKCRAFnS7L/zaE w7M3D/iEPA6rpq1rm36ayc2LrKWizgL8xoiQf8aOOk4cvBH3DBgINVNvndeijAGsro1UpJ9XKfO h9YaXg6YuQHWcuC1SzzPDWZ0wvUEKwzOXzSxktr+QvEHQ4O3Isyqz/MKdiEv5lp/0BB0GECg6/x DJD8ojCR6GpPvxFz9quWIRm+ARh9HO2DHwEl7mEz1LMEzwusI//JhaSUZGvRzrCl/38Q8wRn9E4 wtM0B4tkbBjpUqhTjHybXtu27ewTSZCIV5nRltIHpXFyAH+4+d9adfQUTBndjZaodNItzyqs64r ghTEP3NgvtcnppN7zG9FtI7lvi6osuB4jxV9T8wI9SioW2ELpkM8yvJWPeNVpBl8/gzGxWpH1V/ lH/gWnQ337c6qjwxcpjvoxC6cleT91+Ago3gx1MUvG+C57eI10rrpbv7XKg+XnEKgP9IypqIUM6 e/wL+LfmXIYBehAY4kLHc4uzgJ4X+wds7+Cc6PiSc28TOXmG/eafmDWGabM8lZJ2a8MDEPp4243 mIyBe8vDF4oxQ0Myn7Vf2IklMR56NQid0QZt/Y2h3bigR1+CoiyVR6ZKBYXx/+Go6kvOChepvYH 4jQn/iXc4fX8UqFpVl9EdaANlXRh9y2zXlrhX+SvvTU+6faHjPoJ/l30JYtLP1YidqQ9IXdamv5 NUJz02liJG2Td X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-ORIG-GUID: yG_VoYaIbfmpWHGaGmxwZeaUp6GRf8V5 X-Authority-Analysis: v=2.4 cv=E83AZKdl c=1 sm=1 tr=0 ts=69ab0d92 cx=c_pps a=hnmNkyzTK/kJ09Xio7VxxA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=EUspDBNiAAAA:8 a=BqEP8_E81RGvC7HVDgcA:9 a=QEXdDO2ut3YA:10 a=PEH46H7Ffwr30OY-TuGO:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDE2NCBTYWx0ZWRfXxGrYryHPIdTY 7idKU3X2CbAOkVx3xISremaFPy0hWha/y9iUPcJt1q4pc/EXkvnKonr05yoh03qugCUkdMLzwtS rMLHaD9p6qE6fnsioctqZjQj/bck12aE9Ysi4TRfdd4NYAXzCz0aJnp1KC+Fi5mypuEVKOq6Imv yzC6KDcg9etpoxGNdpDsNSx5COT4v5WqcG8f2K01jZ9Lj2V8C9MQOY1klcb7i0fSh69H3cBqUkU tJy+0LYxOrL+AuhDkhmCfWdIW0T2aoI/NBpd8IsrJFFjxaIj2ndBlyCcJp4ZUwpHUw7+mXY49CV C2EodVmq8CJ5SHB2bPznhBw8nG7JOclfVf0oth/hjG6IR31bAhFIdPfvBUvmiz08ENOKQdcvwbU CYpfP1QnOrNJxLnofwrXCCqxPzqS/MY9L0Z1FJJ/tXniaH/4Q/SGXXRs9QQSyFPCWhONxvy10/t rEau1PTQTRbAW/FI5xw== X-Proofpoint-GUID: yG_VoYaIbfmpWHGaGmxwZeaUp6GRf8V5 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_05,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 suspectscore=0 bulkscore=0 phishscore=0 impostorscore=0 adultscore=0 lowpriorityscore=0 priorityscore=1501 malwarescore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603060164 Currently we use a single, global mutex - misleadingly names reset_list_mutex - to protect the global list of reset devices, per-controller list of reset control handles and also internal fields of struct reset_control. Locking can be made a lot more fine-grained if we use a separate mutex for serializing operations on the list AND accessing the reset control handle. Signed-off-by: Bartosz Golaszewski Reviewed-by: Philipp Zabel --- drivers/reset/core.c | 68 +++++++++++++++++++++++++++---------------------= ---- 1 file changed, 36 insertions(+), 32 deletions(-) diff --git a/drivers/reset/core.c b/drivers/reset/core.c index d4813c712abf3df7993b0c2be1fe292b89241d11..34b11a68f28cd32e7b0ac852503= 193b0d9514915 100644 --- a/drivers/reset/core.c +++ b/drivers/reset/core.c @@ -49,6 +49,7 @@ static DEFINE_IDA(reset_gpio_ida); * @triggered_count: Number of times this reset line has been reset. Curre= ntly * only used for shared resets, which means that the val= ue * will be either 0 or 1. + * @lock: serializes the internals of reset_control_acquire() */ struct reset_control { struct reset_controller_dev __rcu *rcdev; @@ -61,6 +62,7 @@ struct reset_control { bool array; atomic_t deassert_count; atomic_t triggered_count; + struct mutex lock; }; =20 /** @@ -707,7 +709,7 @@ int reset_control_acquire(struct reset_control *rstc) if (reset_control_is_array(rstc)) return reset_control_array_acquire(rstc_to_array(rstc)); =20 - guard(mutex)(&reset_list_mutex); + guard(mutex)(&rstc->lock); =20 if (rstc->acquired) return 0; @@ -859,6 +861,7 @@ __reset_control_get_internal(struct reset_controller_de= v *rcdev, list_add(&rstc->list, &rcdev->reset_control_head); rstc->id =3D index; kref_init(&rstc->refcnt); + mutex_init(&rstc->lock); rstc->acquired =3D acquired; rstc->shared =3D shared; get_device(rcdev->dev); @@ -872,29 +875,40 @@ static void __reset_control_release(struct kref *kref) refcnt); struct reset_controller_dev *rcdev; =20 - lockdep_assert_held(&reset_list_mutex); + lockdep_assert_held(&rstc->srcu); =20 - scoped_guard(srcu, &rstc->srcu) { - rcdev =3D rcu_replace_pointer(rstc->rcdev, NULL, true); - if (rcdev) { - guard(mutex)(&rcdev->lock); - reset_controller_remove(rcdev, rstc); - } + rcdev =3D rcu_replace_pointer(rstc->rcdev, NULL, true); + if (rcdev) { + lockdep_assert_held(&rcdev->lock); + reset_controller_remove(rcdev, rstc); } =20 - synchronize_srcu(&rstc->srcu); - cleanup_srcu_struct(&rstc->srcu); - kfree(rstc); + mutex_destroy(&rstc->lock); } =20 -static void __reset_control_put_internal(struct reset_control *rstc) +static void reset_control_put_internal(struct reset_control *rstc) { - lockdep_assert_held(&reset_list_mutex); + struct reset_controller_dev *rcdev; + int ret =3D 0; =20 if (IS_ERR_OR_NULL(rstc)) return; =20 - kref_put(&rstc->refcnt, __reset_control_release); + scoped_guard(srcu, &rstc->srcu) { + rcdev =3D srcu_dereference(rstc->rcdev, &rstc->srcu); + if (!rcdev) + /* Already released. */ + return; + + guard(mutex)(&rcdev->lock); + ret =3D kref_put(&rstc->refcnt, __reset_control_release); + } + + if (ret) { + synchronize_srcu(&rstc->srcu); + cleanup_srcu_struct(&rstc->srcu); + kfree(rstc); + } } =20 static void reset_gpio_aux_device_release(struct device *dev) @@ -1104,7 +1118,7 @@ __of_reset_control_get(struct device_node *node, cons= t char *id, int index, { bool optional =3D flags & RESET_CONTROL_FLAGS_BIT_OPTIONAL; bool gpio_fallback =3D false; - struct reset_control *rstc; + struct reset_control *rstc =3D ERR_PTR(-EINVAL); struct reset_controller_dev *rcdev; struct of_phandle_args args; int rstc_id; @@ -1169,8 +1183,8 @@ __of_reset_control_get(struct device_node *node, cons= t char *id, int index, =20 flags &=3D ~RESET_CONTROL_FLAGS_BIT_OPTIONAL; =20 - /* reset_list_mutex also protects the rcdev's reset_control list */ - rstc =3D __reset_control_get_internal(rcdev, rstc_id, flags); + scoped_guard(mutex, &rcdev->lock) + rstc =3D __reset_control_get_internal(rcdev, rstc_id, flags); =20 out_put: of_node_put(args.np); @@ -1213,10 +1227,8 @@ int __reset_control_bulk_get(struct device *dev, int= num_rstcs, return 0; =20 err: - guard(mutex)(&reset_list_mutex); - while (i--) - __reset_control_put_internal(rstcs[i].rstc); + reset_control_put_internal(rstcs[i].rstc); =20 return ret; } @@ -1226,10 +1238,8 @@ static void reset_control_array_put(struct reset_con= trol_array *resets) { int i; =20 - guard(mutex)(&reset_list_mutex); - for (i =3D 0; i < resets->num_rstcs; i++) - __reset_control_put_internal(resets->rstc[i]); + reset_control_put_internal(resets->rstc[i]); kfree(resets); } =20 @@ -1247,9 +1257,7 @@ void reset_control_put(struct reset_control *rstc) return; } =20 - guard(mutex)(&reset_list_mutex); - - __reset_control_put_internal(rstc); + reset_control_put_internal(rstc); } EXPORT_SYMBOL_GPL(reset_control_put); =20 @@ -1260,10 +1268,8 @@ EXPORT_SYMBOL_GPL(reset_control_put); */ void reset_control_bulk_put(int num_rstcs, struct reset_control_bulk_data = *rstcs) { - guard(mutex)(&reset_list_mutex); - while (num_rstcs--) - __reset_control_put_internal(rstcs[num_rstcs].rstc); + reset_control_put_internal(rstcs[num_rstcs].rstc); } EXPORT_SYMBOL_GPL(reset_control_bulk_put); =20 @@ -1482,10 +1488,8 @@ of_reset_control_array_get(struct device_node *np, e= num reset_control_flags flag return &resets->base; =20 err_rst: - guard(mutex)(&reset_list_mutex); - while (--i >=3D 0) - __reset_control_put_internal(resets->rstc[i]); + reset_control_put_internal(resets->rstc[i]); =20 kfree(resets); =20 --=20 2.47.3 From nobody Thu Apr 9 16:33:38 2026 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 7F29F426D0E for ; Fri, 6 Mar 2026 17:23:33 +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=1772817815; cv=none; b=PONisiGCIUwAa2uFMUJSl/wri+LHzeJRlEumRMz8Vwq7CMsYVpxQpmCLjTPo+0sZ267+jRM6SgiNXe2q7P+LXoDwdjPy//LgctsyWD+YKq8+FPj8EBEI1TLYN6Dp1S/lAALdgMKeyyoOGJzaxWj1Rhn87sMSSCs+WZdAdrD2TIk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772817815; c=relaxed/simple; bh=R1f/gn/CCqQNQe1p8nz4Iaf4f8ssq3xNMEkgqrIOH7g=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YKnu9trOMW9ZCDB13NekA28lhUzG5/q2a7aq6KC/nVG2cXVUSmBsZigmMGsZag+4ROP/cS1NqTAz/hJVi5NvVY43+KVuTf4j9AVLzpCvBoJ3xkdhMObLCU4NQKItel4TB1353PnO2EMSMlxwLDtY/wgy1bgy1UGl7evBbPEQd2o= 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=XdkUDiwU; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=eBt1agZb; 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="XdkUDiwU"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="eBt1agZb" Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 626H2QoN742750 for ; Fri, 6 Mar 2026 17:23:33 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= IxmVpfU4ghgx7p0NFFaaSzcbw/Vegvb2ZtWvuV7tfgQ=; b=XdkUDiwU1kGRMBSv SEHM6pHR2LYW+iZVJiGfDf0r8oiHsLca3cVrgqtjmyclz7KLO86HOzq9s9IhyUCp 58LvTI9C8ame/t5R059emASZlkLNI3iz5DnZWKvk1IWo+rJwtSjxQS4jIfiFELnm Hw/TaQI4IOhnbUU8Lj6bb5Apb9y7EL2mCXyTccolfx7zpR3A/6z1I4SxcZE9KOiW 524ezU9xczqGVL9pnhW0itjMI9f6/rdWTuD2UQCmbX8XN6ioU9GkB87034+r8e7i a6rRiAM8fZJe+MSGtwtZ5nYAgSbPiItBxTl7Ye3pMnEjxrWFYn9CMD+cGcjCrq8G Y3CV5g== Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cqpxdtqbg-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 06 Mar 2026 17:23:32 +0000 (GMT) Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-8c70ef98116so6168008785a.1 for ; Fri, 06 Mar 2026 09:23:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772817811; x=1773422611; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=IxmVpfU4ghgx7p0NFFaaSzcbw/Vegvb2ZtWvuV7tfgQ=; b=eBt1agZbYu1VChwQrXdIgVf/favVGLYkz6uEhLIl3QDMBgQgn5v/uBksCbwrxk9DwK NjP0Xqe57HqTHvEOTwKH/2EkAM4Op3qLyiYRFJ+wiyoVGoYGHdc0+WccPI23zZ2Lzpxf UqqosDiDE4v9FWO72ibTkX4q/TfM1R053xDf71O4Ive4gXDPqL/baoLtJgTb7LHaVe+S BeexXB0Fgk7tfMVbhWTkQEmoiqJJJ09QCxT/1tEws2IQtFjccL1tb/vZx2CkAlzkcBYj YMym2iDiVNEPdxMpWbNaJOznddMh8tXoM9CkVNlp4hL1fL4v6GWiLbB6Z7S++fljX+Ue dK8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772817811; x=1773422611; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=IxmVpfU4ghgx7p0NFFaaSzcbw/Vegvb2ZtWvuV7tfgQ=; b=lMrZXifDa6t8Ky1mise8ie+8HVTqbgWmxZZJjHUjBQzZvqnmxnEKnklhrQbcLqq3pl eT624v3cLXVWDpduKM+hUeURk1QTZdQpvGZJ8QC3h0qty552wKpt8SnQOhFXYmEb4wUW u0xhhnYG2tWylXyFyuEhzUYyPQ0StwdNXN+DpMpfEESP/BEr/DZAFcZNE5EUHRqVKlO0 ViVMDGLxNpJkKvaX5ylJlzmla84SxrKWBFtZ5FjppTvGPVf/zNVvdJknhahgLMuo2Fi9 64yHfX8Z4vbsAAQguJQDeMOAO+uxBd9/CQa3cjrkkhVrDztnjG78DT+ivy6jpifDgfpl lFoQ== X-Gm-Message-State: AOJu0Ywx+0t1JeXv6b/gaZZL/STaFJHkPT5BFJFx36SF5MjMfr5ZUGJx Pr3JPaln0gP5vGe++LWXB2wlQpway3Aera3cE3n7+ksO7d0RHxKVfASeU2jvW9izZI3ZCOujWFU NU1vDTyd3hi0kV9slluof3BM8FyLpK1cVLiQUz3p8dBfSGHsNkmBA7TuIfh/tFm7G/izmnAJIPE Y= X-Gm-Gg: ATEYQzyTC5lKvC+/6ZuhydWOyNMhFinTZ9/7pt5K8HvB8tM0LP8DdZCr+JWekasZ2cA 7exdN4/Ewwx9XYdiLc0dr04qjIewFQAqT64s+03+EXRBFVmxHlT8Uhf2Q+RieWRDEmNFfG8I3Kn uevVBv+jv1bL10XXhfth4qJiADzk7MfnoXTDq4ohU3QOfOzBj0H9+LCxsfgaUE08SsPiYPzASgX AGpLz2kSV6qDVZfdpuEkqQSvQuX1xLtoq5Cjyr4nAZlF1OzOOum7XmSR2EmCHQOxUCk+XsiHIiQ wP9Fv/JQ4Za4+ul3lAs0LnQiHyTeOkIcDc7Rv0li+kl+PCNxJW9zAusqSrvcxwZUA9zgIAJr5yX G4R66aai8SbYf+LZutoTLvjYucKeTfaBXfsuw3cI4uDcPNpbrDW/p X-Received: by 2002:a05:620a:4688:b0:8c6:a341:ac1a with SMTP id af79cd13be357-8cd6d4d63b1mr356714785a.52.1772817811482; Fri, 06 Mar 2026 09:23:31 -0800 (PST) X-Received: by 2002:a05:620a:4688:b0:8c6:a341:ac1a with SMTP id af79cd13be357-8cd6d4d63b1mr356710085a.52.1772817810984; Fri, 06 Mar 2026 09:23:30 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:28b1:4950:7702:bb20]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48527686fa9sm61488475e9.8.2026.03.06.09.23.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Mar 2026 09:23:30 -0800 (PST) From: Bartosz Golaszewski Date: Fri, 06 Mar 2026 18:22:55 +0100 Subject: [PATCH v3 11/14] reset: convert of_reset_control_get_count() to using firmware nodes Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260306-reset-core-refactor-v3-11-599349522876@oss.qualcomm.com> References: <20260306-reset-core-refactor-v3-0-599349522876@oss.qualcomm.com> In-Reply-To: <20260306-reset-core-refactor-v3-0-599349522876@oss.qualcomm.com> To: Krzysztof Kozlowski , Philipp Zabel , Jonathan Corbet , Shuah Khan Cc: linux-kernel@vger.kernel.org, brgl@kernel.org, linux-doc@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2924; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=R1f/gn/CCqQNQe1p8nz4Iaf4f8ssq3xNMEkgqrIOH7g=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpqw17lVTX4EKuRXHHBiaq6cA/KuA6+/Qm/yyj1 R1DSIlxVLaJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaasNewAKCRAFnS7L/zaE w7XZD/42P+FpdYFpJfThvXqK/68bEYjomYfC1GNnVhBwbqUEB71+6fKnWpIlFGM8auYK0004n5u qVOO8a4NkhM3gT4unWDrUMUhPCbwTZ/ZFSshDGxhLHj1WX4YBlDNIqD9EvU09C+2Yx9/yDu6/Ji hcIQp+0Y9RXAZItT2sT8Diajtfu2s9Vp86sN58nK/01Pfh4vIEQiedLVEb9ixiFb0kGCYtu6iQ5 Pdu8uKFmKzPNW+mpDopJayKi5tgX+35N3OU5WyHwcezZbSjbm7xk4kyBtAXA0fpY8yCcBVZbcDN /8l6c6NXuIB+ck9eCeRJHlEyooDRMmQbmkuug827+6eFMTpCDbg5wkIxQr/rr84iHb1gBXI0uI5 3eeXlNd94x8ByVxjCn0h2MGHrryHP1uWXAVc7HrN9oblB8gxdWZvN4pcCqqLy3JcsK2mLnnFzPT BA1BKcDz/D5I9UgprBUhPAwhqV+40QF/YaOudB5w/EI9wxalHwLvhXI5j+JJEytAVxHjBf5UOwz v0nS+mX+xUzkWiqVGmqOAZAAu/XoHgJEm9ho6VlEES8uqJ3MeJb7fpbOA5GZ1qQQXhQn5cumZd7 ytADcAJIWcvRDCwPScv9Y5aAlmTVN1FaUT/aHDFP4hmcdzqladuOoglvUCg58CiNrRcfQcRZSsz RCt+yl7JrXptqXQ== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-ORIG-GUID: 0bj38_nAkfzKlWnuyTXJPE5iVUzTQqap X-Authority-Analysis: v=2.4 cv=E83AZKdl c=1 sm=1 tr=0 ts=69ab0d94 cx=c_pps a=hnmNkyzTK/kJ09Xio7VxxA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=EUspDBNiAAAA:8 a=xt4VrH2ZgDK96Vd3V1EA:9 a=QEXdDO2ut3YA:10 a=PEH46H7Ffwr30OY-TuGO:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDE2NCBTYWx0ZWRfX4HnLOLOYpfFJ s3Ypu9GiyJPq158mR3AqJCIJlrVMAQ2S01udZ2cADPTOgkODZIMam7QTiV7Tz3VNqFAD7+/MQe9 WtQ76/Xn4HJFxiQ5ohIp12cWXDL3TekMRrfHsz1V7q/oiosWdI0tACzok4mfe3fp9jTMmGT+YzJ VG1qor/GhfM8AZ+5Ad9k67r0kDLFlCVnxEDZKEz1DeZlP2pRnmaZxS60/9Bf/ZxSC0rg7fTGYWn 9Yjw9xLaOXVvMzofVLdgQj/J8czN/SAwBhVJf5083t9fMgLTcN/Kpiauj7YZAysS1iGp3DkETzj WLL+SlhVjplrVlvj6KXQI6T/FfzBnE26m97aAMijHdRTrMR1xmfTlFmdoohzIGW41OFNQ/7/npI ykXM/tGKK9AZGa3+eLoAlmiBDqL0u9dCtaQji1w/vg9rnywH+yaXXFsmq2EiQEK2cJZg7msNaPT 2W+x3oVGoANUBEk/9rg== X-Proofpoint-GUID: 0bj38_nAkfzKlWnuyTXJPE5iVUzTQqap X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_05,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 suspectscore=0 bulkscore=0 phishscore=0 impostorscore=0 adultscore=0 lowpriorityscore=0 priorityscore=1501 malwarescore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603060164 Start the conversion of reset core to using firmware nodes by reworking of_reset_control_get_count(). Unfortunately there is no fwnode-based alternative to of_count_phandle_with_args() so we have to hand-code it. Reviewed-by: Philipp Zabel Signed-off-by: Bartosz Golaszewski --- drivers/reset/core.c | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/drivers/reset/core.c b/drivers/reset/core.c index 34b11a68f28cd32e7b0ac852503193b0d9514915..a00a08b3ca9e90853659a4a9460= 7947fddcfcff4 100644 --- a/drivers/reset/core.c +++ b/drivers/reset/core.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -20,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -1430,21 +1432,35 @@ EXPORT_SYMBOL_GPL(__device_reset); */ =20 /** - * of_reset_control_get_count - Count number of resets available with a de= vice + * fwnode_reset_control_get_count - Count number of resets available with = a device * - * @node: device node that contains 'resets'. + * @fwnode: firmware node that contains 'resets'. * * Returns positive reset count on success, or error number on failure and * on count being zero. */ -static int of_reset_control_get_count(struct device_node *node) +static int fwnode_reset_control_get_count(struct fwnode_handle *fwnode) { - int count; + struct fwnode_reference_args args; + int count =3D 0, ret; =20 - if (!node) + if (!fwnode) return -EINVAL; =20 - count =3D of_count_phandle_with_args(node, "resets", "#reset-cells"); + for (;;) { + ret =3D fwnode_property_get_reference_args(fwnode, "resets", "#reset-cel= ls", + 0, count, &args); + if (ret) { + if (ret =3D=3D -ENOENT) + break; + + return ret; + } + + fwnode_handle_put(args.fwnode); + count++; + } + if (count =3D=3D 0) count =3D -ENOENT; =20 @@ -1468,7 +1484,7 @@ of_reset_control_array_get(struct device_node *np, en= um reset_control_flags flag struct reset_control *rstc; int num, i; =20 - num =3D of_reset_control_get_count(np); + num =3D fwnode_reset_control_get_count(of_fwnode_handle(np)); if (num < 0) return optional ? NULL : ERR_PTR(num); =20 @@ -1542,8 +1558,10 @@ EXPORT_SYMBOL_GPL(devm_reset_control_array_get); */ int reset_control_get_count(struct device *dev) { - if (dev->of_node) - return of_reset_control_get_count(dev->of_node); + struct fwnode_handle *fwnode =3D dev_fwnode(dev); + + if (fwnode) + return fwnode_reset_control_get_count(fwnode); =20 return -ENOENT; } --=20 2.47.3 From nobody Thu Apr 9 16:33:38 2026 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 E5BB4426ED8 for ; Fri, 6 Mar 2026 17:23:34 +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=1772817816; cv=none; b=j/3/EQjDDduZ92V6+eIySrSdZ2Sm70qyNtUoix6MdSP81hHoS8uCx7OnMi15vYTHCS2+8/1RZLol9LL86avZGvEWWsEOJL4Fr5lX2U/F3ZZ5A0kIgZv9iaVCG5hMllcgVD29pFhfAzdVdLlUPBqkdk76jYAFa9BT1keMDzW3Lx4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772817816; c=relaxed/simple; bh=4vN/CH/Ew7F6Yrlk1iGPVHH8dyM6IgQN0K5btZhTK6E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=raCB90RT+RDM2qbM6JDwHOh4UP3eNZnuopQ0TMmvF3gry3olGdahs8lmN8G9tGUgsks+EwAJ/wlUfZPhs4JG6g4tp0rFgdsfuO2dIEXXjf4l2KUPxiMjAGPDe7ioFU75PEf6Be1XkKU5/HKEm0IPOlBH7Q3RporNHvH+Skb/eNY= 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=Ef986gxe; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Cfy4CaeZ; 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="Ef986gxe"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Cfy4CaeZ" Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 626H1q7Y1898370 for ; Fri, 6 Mar 2026 17:23:34 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= Q/SFmN0fSeYUX8mnZDbivqXkUlI6+o4LvIFTJM1awn4=; b=Ef986gxea7bWr+XN jix1eatl3S5OwAtD0K0Dc8LYfalsSNGVE2/9v+veul750dYOZsdoNW8oF8xRT2Iz oP3tCxKqVYorcKcQAM+XEzAPrrQzNmEfgwVfY9HAPSI16amgvRdOiTC9GRm1uX/R eECBwLnthNE7MxnXt/m5dyz2IZ7pOCifU3++1gSkS04b5R3UfcsjNWfPdV0z9d0Y A3Vl+ZzBtBtEsORZ1HYOXTbBsr7JIfhBPLyrHmIeqKXuw113F+UPg8fkOz2o+0XY 3kA1+HPAEqtloJIGF7K7maWX41MDcMHzGxsLpXAm+TNqzuXGvExYxS8wzwvj7iwQ 8CA5OA== Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cqx14h5ee-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 06 Mar 2026 17:23:34 +0000 (GMT) Received: by mail-qk1-f198.google.com with SMTP id af79cd13be357-8cb413d0002so5942541985a.1 for ; Fri, 06 Mar 2026 09:23:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772817813; x=1773422613; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=Q/SFmN0fSeYUX8mnZDbivqXkUlI6+o4LvIFTJM1awn4=; b=Cfy4CaeZSp1Fbm15xItO7CMRZmFqAZDrP1AR7yE8uSG+Wd9nASozleZGkfYGWDm0RX C1dOTakllFC6+DoKS9aidRfiHE9AUCxPVjkAyxnGJXXrkPpuVVJ+Warr0fW42t4X+HJQ X9p4R0K3KytMoycvn7fgE1MP675zxS4dLHdvyz2H9WCLD1dWEt9Pnc+G+WlTx2ALWyh1 T7SXMHhNH5TN9AXMETIvVVchJYmpMlP+wp5C3TWyHySmDrHkcpOYuBTjmk6JO+pPTxAg pchZa9tRFux2XF4oqD1Pza0Ja5NW3OCBeh643d9Tembq69fnLlVkvIIHa4KAAG8wQQX2 7u8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772817813; x=1773422613; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=Q/SFmN0fSeYUX8mnZDbivqXkUlI6+o4LvIFTJM1awn4=; b=UbOaiD9T3edlUFqIB7m9o1RMUUP8EfFjJKT0QuVh9wAu+UnuWNLoVBg8H4zF1D+v3M rRYvQPH1oiWoqQPPj8tGdwoZ++s0GC4XEqjk3vW2DPOwSjpbeF77FrQwk8R1zeGPPea/ 9BXlAI2e2qY7Ei2mdZodZ2BtCxD7pS4I4Gm2AnA4vOLSa+O7WlV6oEUOuCYmJJCzyobm JNOvBGbR4DQ5HPM/AwuyhLBFCoIDNc/urdk8BVyaMTkfSXld2hFPE/JntL7CmeXbX/1f Y7XdTJB3REZAcjU6F1gZI3TmXoNE3/rEREsgbZdgfLH/NkoUcB+s61wNPT54aNPikak4 a4gg== X-Gm-Message-State: AOJu0YwbZhHMyCUlafY2huCvRqD9BWFDj+a9y8AXyo4fgB3wucp4yHQ1 Qd1LtxB0m0PJvMVxTQLG6OEni7S7ZeJ+Pzk7BDtl7GKVGQfrAaAUpUUQKYfVch6ci+JuDE9dBPS I15oyTsL7gNHyEO1ClAEZpwGd7FraL4Tv+TF54kRfYKSGNfQ4aacL+egvyfqeCQ4mYf4xdlrZQk A= X-Gm-Gg: ATEYQzxnE8HT3jsKFgMLWCE7eCa4mG5J+huVzT62Bl1uURxsJsKf+gWgTPUCnmG7jPM X/XVpqIPIm51DVLzARzsVHZNgWQJIfMgzYplAnMDg0yvqz5Gis89Jskc/ARAc3+Y3u2qadc5DNY fsUrO+77oaUIoeQUK/W0CfuFPkd6+FVEd/11vUka2s2OtNBKOZaokTQNpBYyKQBI113zDfeu4g9 OIzQWU1VcZjtY5GmYJBjUMFTv+HE8mTXjWjJK7Zts19OukOfBcOedVPngJwB+OXiFAHOoqSjPXz iNH5AdYTQMOYOoxhDaF9lp712PHUhtsZnV8UYjVI9erOJ8i8u3ZzrP8laKEKc6rNrE3+DNljvmk Nh35TaZYWW08E4OlVLRM4w9tnPI9ZAysEvNmTmkHKoJm0/jW8Zzsh X-Received: by 2002:a05:620a:4591:b0:8cb:df8:e86c with SMTP id af79cd13be357-8cd634bc514mr809724885a.26.1772817813007; Fri, 06 Mar 2026 09:23:33 -0800 (PST) X-Received: by 2002:a05:620a:4591:b0:8cb:df8:e86c with SMTP id af79cd13be357-8cd634bc514mr809721385a.26.1772817812406; Fri, 06 Mar 2026 09:23:32 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:28b1:4950:7702:bb20]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48527686fa9sm61488475e9.8.2026.03.06.09.23.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Mar 2026 09:23:31 -0800 (PST) From: Bartosz Golaszewski Date: Fri, 06 Mar 2026 18:22:56 +0100 Subject: [PATCH v3 12/14] reset: convert the core API to using firmware nodes Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260306-reset-core-refactor-v3-12-599349522876@oss.qualcomm.com> References: <20260306-reset-core-refactor-v3-0-599349522876@oss.qualcomm.com> In-Reply-To: <20260306-reset-core-refactor-v3-0-599349522876@oss.qualcomm.com> To: Krzysztof Kozlowski , Philipp Zabel , Jonathan Corbet , Shuah Khan Cc: linux-kernel@vger.kernel.org, brgl@kernel.org, linux-doc@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=11980; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=4vN/CH/Ew7F6Yrlk1iGPVHH8dyM6IgQN0K5btZhTK6E=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpqw18EEbJdpceXE4g+P1BycAU6/88ZL1gLQuHu 9rYGzLN2hWJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaasNfAAKCRAFnS7L/zaE w3HUD/4xIc9qZ363fHU7vClyoIa74LIcUe1uB8lTuL4sRGi3l1rty7SBXHygZ1hEFSEEAwmtVfF 6eP2MCawftRtSf6TS5uatBSfiGCWgf9sCny0v2Ayza5KHU0loIOi8PvArnZZxiIzZtv257CWWxP n+0kt4AyqPcBxwd4/TZdwsA6wsVctlDwSanWFcINYfTkV7x13oHdYiVAJbYNBJ01ba7nSd7Nh27 7naQFexf2lMCA6vzWQWhR3+3iAQH7BLl1cNGoLhVZx6wRRb8UbYN+EM7P73Krfito3J4a2AHrsM S3DgKvX4TLEGJUAESVZTVtBVI6eG3OIGmwxE3O22CFIghvOsrEUxWS+3RkOGYd0tL6brpFCGU/y B9hyfV2XhVq2eIN3XZbavz/qHRZGBiWMfof+HljRjuybK2ZZ2Bqfyg6jbUB1WxwlcVeaQFaaUtc u5Cz7pbYNd1FNiATZcnB9+m5qZYfGo26GOJiROERmOq5xc941VoI/EaTwuM813XRZZKyBXqABAw oXx/OHfUOlp3WLihXjlZ/aCxwlbOLkzzDIFRodCdnutxrei5R1bOeF9jrtfpwLjr26LbmRk8YDF Nq4xbRZVq5F5IOLbJwvwUrsQKPYfPl+nfMFKLYikJ84x6ykI5dFFnPapd/kl0b1NohfIEsb1sGJ 0JW2dnDAr+6ky+g== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDE2NCBTYWx0ZWRfX3c6xwlj1ZHyp qbNPpvqjijKD9e4yv32jem20CSw/w0gAluSooHW4EKVxeWOn6PL9Vbed8zyCJJK/iJIB+8Xvf1p FSZt+fWToufDRwJO6sVTlv9TL8RxsJYdyThRT2Q0M/MXq5jx+jB5mmjx3XCcoDMQjnr4Hw0BADT 4srv70Ldhbe/enU6apWkFeb5M5l3noi5BbDu+JHZ5nipTxw/8C/BimtjQJuS/8XgUWq7jx7OBki H0ypxxLopQ+In6BHXTiRfng/qqKdlPp0ISuNhKSCetTeZrxC5N/3bKsrSqR8U4WrnRYNyt/rig6 8Hw8h4+cDQ1J0RWf60QyEyd/QathdBnEDJaaQu5grdqk0zI8tcQS/+wvB44xfb1KlkqJHrmfdca 8J5TAOLvRVvoL2ItSkvehv8cGAIaStLkcbhCDEMTNCIppMGKRGZA1TxFP/uxb5cDygJN+o1arR3 iKwHt8ESbyNjBBKK4qA== X-Proofpoint-GUID: P9NX5HzkZSZjgfWHo6wdED0LdverhpyU X-Proofpoint-ORIG-GUID: P9NX5HzkZSZjgfWHo6wdED0LdverhpyU X-Authority-Analysis: v=2.4 cv=e/MLiKp/ c=1 sm=1 tr=0 ts=69ab0d96 cx=c_pps a=qKBjSQ1v91RyAK45QCPf5w==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=EUspDBNiAAAA:8 a=O0KKrJeO1xfbjrHHZ3QA:9 a=QEXdDO2ut3YA:10 a=NFOGd7dJGGMPyQGDc5-O:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_05,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 bulkscore=0 adultscore=0 clxscore=1015 spamscore=0 phishscore=0 malwarescore=0 lowpriorityscore=0 suspectscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603060164 In order to simplify the commit converting the internals of reset core to using firmware nodes, first convert the user-facing API. Modify the signature of the core consumer functions but leave the specialized wrappers as is to avoid modifying users for now. No functional change intended. Reviewed-by: Philipp Zabel Signed-off-by: Bartosz Golaszewski --- Documentation/driver-api/reset.rst | 1 - drivers/reset/core.c | 33 ++++++++++++++++------------- include/linux/reset.h | 43 +++++++++++++++++++++++++---------= ---- 3 files changed, 46 insertions(+), 31 deletions(-) diff --git a/Documentation/driver-api/reset.rst b/Documentation/driver-api/= reset.rst index f773100daaa415ac2c74b7b0db7a4f6f05d736d8..7a6571849664f08758a975fca3e= 078cd45967c8d 100644 --- a/Documentation/driver-api/reset.rst +++ b/Documentation/driver-api/reset.rst @@ -198,7 +198,6 @@ query the reset line status using reset_control_status(= ). reset_control_rearm reset_control_put of_reset_control_get_count - of_reset_control_array_get devm_reset_control_array_get reset_control_get_count =20 diff --git a/drivers/reset/core.c b/drivers/reset/core.c index a00a08b3ca9e90853659a4a94607947fddcfcff4..0817afe72de75f795d62e024515= 20726da7c9844 100644 --- a/drivers/reset/core.c +++ b/drivers/reset/core.c @@ -1061,7 +1061,7 @@ static int __reset_add_reset_gpio_device(struct devic= e_node *np, rgpio_dev->of_args =3D *args; /* * We keep the device_node reference, but of_args.np is put at the end - * of __of_reset_control_get(), so get it one more time. + * of __fwnode_reset_control_get(), so get it one more time. * Hold reference as long as rgpio_dev memory is valid. */ of_node_get(rgpio_dev->of_args.np); @@ -1115,18 +1115,19 @@ static struct reset_controller_dev *__reset_find_rc= dev(const struct of_phandle_a } =20 struct reset_control * -__of_reset_control_get(struct device_node *node, const char *id, int index, - enum reset_control_flags flags) +__fwnode_reset_control_get(struct fwnode_handle *fwnode, const char *id, i= nt index, + enum reset_control_flags flags) { bool optional =3D flags & RESET_CONTROL_FLAGS_BIT_OPTIONAL; bool gpio_fallback =3D false; + struct device_node *node =3D to_of_node(fwnode); struct reset_control *rstc =3D ERR_PTR(-EINVAL); struct reset_controller_dev *rcdev; struct of_phandle_args args; int rstc_id; int ret; =20 - if (!node) + if (!fwnode) return ERR_PTR(-EINVAL); =20 if (id) { @@ -1193,7 +1194,7 @@ __of_reset_control_get(struct device_node *node, cons= t char *id, int index, =20 return rstc; } -EXPORT_SYMBOL_GPL(__of_reset_control_get); +EXPORT_SYMBOL_GPL(__fwnode_reset_control_get); =20 struct reset_control *__reset_control_get(struct device *dev, const char *= id, int index, enum reset_control_flags flags) @@ -1201,12 +1202,13 @@ struct reset_control *__reset_control_get(struct de= vice *dev, const char *id, bool shared =3D flags & RESET_CONTROL_FLAGS_BIT_SHARED; bool acquired =3D flags & RESET_CONTROL_FLAGS_BIT_ACQUIRED; bool optional =3D flags & RESET_CONTROL_FLAGS_BIT_OPTIONAL; + struct fwnode_handle *fwnode =3D dev_fwnode(dev); =20 if (WARN_ON(shared && acquired)) return ERR_PTR(-EINVAL); =20 - if (dev->of_node) - return __of_reset_control_get(dev->of_node, id, index, flags); + if (fwnode) + return __fwnode_reset_control_get(fwnode, id, index, flags); =20 return optional ? NULL : ERR_PTR(-ENOENT); } @@ -1468,23 +1470,24 @@ static int fwnode_reset_control_get_count(struct fw= node_handle *fwnode) } =20 /** - * of_reset_control_array_get - Get a list of reset controls using - * device node. + * fwnode_reset_control_array_get - Get a list of reset controls using + * a firmware node. * - * @np: device node for the device that requests the reset controls array + * @fwnode: firmware node for the device that requests the reset controls = array * @flags: whether reset controls are shared, optional, acquired * * Returns pointer to allocated reset_control on success or error on failu= re */ struct reset_control * -of_reset_control_array_get(struct device_node *np, enum reset_control_flag= s flags) +fwnode_reset_control_array_get(struct fwnode_handle *fwnode, + enum reset_control_flags flags) { bool optional =3D flags & RESET_CONTROL_FLAGS_BIT_OPTIONAL; struct reset_control_array *resets; struct reset_control *rstc; int num, i; =20 - num =3D fwnode_reset_control_get_count(of_fwnode_handle(np)); + num =3D fwnode_reset_control_get_count(fwnode); if (num < 0) return optional ? NULL : ERR_PTR(num); =20 @@ -1494,7 +1497,7 @@ of_reset_control_array_get(struct device_node *np, en= um reset_control_flags flag resets->num_rstcs =3D num; =20 for (i =3D 0; i < num; i++) { - rstc =3D __of_reset_control_get(np, NULL, i, flags); + rstc =3D __fwnode_reset_control_get(fwnode, NULL, i, flags); if (IS_ERR(rstc)) goto err_rst; resets->rstc[i] =3D rstc; @@ -1511,7 +1514,7 @@ of_reset_control_array_get(struct device_node *np, en= um reset_control_flags flag =20 return rstc; } -EXPORT_SYMBOL_GPL(of_reset_control_array_get); +EXPORT_SYMBOL_GPL(fwnode_reset_control_array_get); =20 /** * devm_reset_control_array_get - Resource managed reset control array get @@ -1535,7 +1538,7 @@ devm_reset_control_array_get(struct device *dev, enum= reset_control_flags flags) if (!ptr) return ERR_PTR(-ENOMEM); =20 - rstc =3D of_reset_control_array_get(dev->of_node, flags); + rstc =3D fwnode_reset_control_array_get(dev_fwnode(dev), flags); if (IS_ERR_OR_NULL(rstc)) { devres_free(ptr); return rstc; diff --git a/include/linux/reset.h b/include/linux/reset.h index 44f9e3415f92c9d7591b898cdb4bf7f05f2b0568..9c391cf0c82298a06a4d84eebd2= 93864ef8c48da 100644 --- a/include/linux/reset.h +++ b/include/linux/reset.h @@ -5,10 +5,12 @@ #include #include #include +#include #include =20 struct device; struct device_node; +struct fwnode_handle; struct reset_control; =20 /** @@ -84,7 +86,7 @@ int reset_control_bulk_deassert(int num_rstcs, struct res= et_control_bulk_data *r int reset_control_bulk_acquire(int num_rstcs, struct reset_control_bulk_da= ta *rstcs); void reset_control_bulk_release(int num_rstcs, struct reset_control_bulk_d= ata *rstcs); =20 -struct reset_control *__of_reset_control_get(struct device_node *node, +struct reset_control *__fwnode_reset_control_get(struct fwnode_handle *fwn= ode, const char *id, int index, enum reset_control_flags flags); struct reset_control *__reset_control_get(struct device *dev, const char *= id, int index, enum reset_control_flags flags); @@ -103,7 +105,8 @@ int __devm_reset_control_bulk_get(struct device *dev, i= nt num_rstcs, =20 struct reset_control *devm_reset_control_array_get(struct device *dev, enum reset_control_flags flags); -struct reset_control *of_reset_control_array_get(struct device_node *np, e= num reset_control_flags); +struct reset_control *fwnode_reset_control_array_get(struct fwnode_handle = *fwnode, + enum reset_control_flags); =20 int reset_control_get_count(struct device *dev); =20 @@ -152,8 +155,8 @@ static inline int __device_reset(struct device *dev, bo= ol optional) return optional ? 0 : -ENOTSUPP; } =20 -static inline struct reset_control *__of_reset_control_get( - struct device_node *node, +static inline struct reset_control *__fwnode_reset_control_get( + struct fwnode_handle *fwnode, const char *id, int index, enum reset_control_flags flags) { bool optional =3D flags & RESET_CONTROL_FLAGS_BIT_OPTIONAL; @@ -242,7 +245,7 @@ devm_reset_control_array_get(struct device *dev, enum r= eset_control_flags flags) } =20 static inline struct reset_control * -of_reset_control_array_get(struct device_node *np, enum reset_control_flag= s flags) +fwnode_reset_control_array_get(struct fwnode_handle *fwnode, enum reset_co= ntrol_flags flags) { bool optional =3D flags & RESET_CONTROL_FLAGS_BIT_OPTIONAL; =20 @@ -500,7 +503,8 @@ reset_control_bulk_get_optional_shared(struct device *d= ev, int num_rstcs, static inline struct reset_control *of_reset_control_get_exclusive( struct device_node *node, const char *id) { - return __of_reset_control_get(node, id, 0, RESET_CONTROL_EXCLUSIVE); + return __fwnode_reset_control_get(of_fwnode_handle(node), id, 0, + RESET_CONTROL_EXCLUSIVE); } =20 /** @@ -520,7 +524,8 @@ static inline struct reset_control *of_reset_control_ge= t_exclusive( static inline struct reset_control *of_reset_control_get_optional_exclusiv= e( struct device_node *node, const char *id) { - return __of_reset_control_get(node, id, 0, RESET_CONTROL_OPTIONAL_EXCLUSI= VE); + return __fwnode_reset_control_get(of_fwnode_handle(node), id, 0, + RESET_CONTROL_OPTIONAL_EXCLUSIVE); } =20 /** @@ -545,7 +550,8 @@ static inline struct reset_control *of_reset_control_ge= t_optional_exclusive( static inline struct reset_control *of_reset_control_get_shared( struct device_node *node, const char *id) { - return __of_reset_control_get(node, id, 0, RESET_CONTROL_SHARED); + return __fwnode_reset_control_get(of_fwnode_handle(node), id, 0, + RESET_CONTROL_SHARED); } =20 /** @@ -562,7 +568,8 @@ static inline struct reset_control *of_reset_control_ge= t_shared( static inline struct reset_control *of_reset_control_get_exclusive_by_inde= x( struct device_node *node, int index) { - return __of_reset_control_get(node, NULL, index, RESET_CONTROL_EXCLUSIVE); + return __fwnode_reset_control_get(of_fwnode_handle(node), NULL, index, + RESET_CONTROL_EXCLUSIVE); } =20 /** @@ -590,7 +597,8 @@ static inline struct reset_control *of_reset_control_ge= t_exclusive_by_index( static inline struct reset_control *of_reset_control_get_shared_by_index( struct device_node *node, int index) { - return __of_reset_control_get(node, NULL, index, RESET_CONTROL_SHARED); + return __fwnode_reset_control_get(of_fwnode_handle(node), NULL, index, + RESET_CONTROL_SHARED); } =20 /** @@ -1032,30 +1040,35 @@ devm_reset_control_array_get_optional_shared(struct= device *dev) static inline struct reset_control * of_reset_control_array_get_exclusive(struct device_node *node) { - return of_reset_control_array_get(node, RESET_CONTROL_EXCLUSIVE); + return fwnode_reset_control_array_get(of_fwnode_handle(node), + RESET_CONTROL_EXCLUSIVE); } =20 static inline struct reset_control * of_reset_control_array_get_exclusive_released(struct device_node *node) { - return of_reset_control_array_get(node, RESET_CONTROL_EXCLUSIVE_RELEASED); + return fwnode_reset_control_array_get(of_fwnode_handle(node), + RESET_CONTROL_EXCLUSIVE_RELEASED); } =20 static inline struct reset_control * of_reset_control_array_get_shared(struct device_node *node) { - return of_reset_control_array_get(node, RESET_CONTROL_SHARED); + return fwnode_reset_control_array_get(of_fwnode_handle(node), + RESET_CONTROL_SHARED); } =20 static inline struct reset_control * of_reset_control_array_get_optional_exclusive(struct device_node *node) { - return of_reset_control_array_get(node, RESET_CONTROL_OPTIONAL_EXCLUSIVE); + return fwnode_reset_control_array_get(of_fwnode_handle(node), + RESET_CONTROL_OPTIONAL_EXCLUSIVE); } =20 static inline struct reset_control * of_reset_control_array_get_optional_shared(struct device_node *node) { - return of_reset_control_array_get(node, RESET_CONTROL_OPTIONAL_SHARED); + return fwnode_reset_control_array_get(of_fwnode_handle(node), + RESET_CONTROL_OPTIONAL_SHARED); } #endif --=20 2.47.3 From nobody Thu Apr 9 16:33:38 2026 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 71AB042848C for ; Fri, 6 Mar 2026 17:23:36 +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=1772817818; cv=none; b=o+Jqk7kh3gQCwrOx7ZhCCvSw8hvT1yZIdztPBGCgDScZWojKso9luhsJmSQKozM6p9mQAUgr5JD9w6WXWigFOBiDcgBI9qXKipf7ldfOtf91WnNqXesu2rxEfPDZ1mDA9ZjqsTdnttAGMKJPXGOiAWNzAe7S9qwiDdyPSEIvQP8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772817818; c=relaxed/simple; bh=6FY6/NpoOq7Rdpg5gYZySEQvwKsaI6/Ar0wZmyeBw3Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=H5QUJIMWC8eOtzKX5CniMoUVu6v5tqTe3z/k/pT/A7GxKnmMimrx133uxYVEEZJqAyZfFgHOsph7eNEn/6lyz/7KH62gySEchtvwVdi8JwKcIFu5jjXhnKwM6ldZttdCWaibThD9d8YAEf4UpBLlPNdBrWjvtVJ64nI4PKzjbF0= 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=DhYJIfcx; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=j9NjZmTd; 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="DhYJIfcx"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="j9NjZmTd" Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 626H1q7Z1898370 for ; Fri, 6 Mar 2026 17:23:36 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= gnCHGaTyIrO+/XHi40pHajxkTWJ3etB/P/3gSFJpnBk=; b=DhYJIfcxVOzcWuWg RwxVm+VBl2KvsbtLt9VbqP2xsb2bjYPbgNgkRSVffQb7q3emlUC4vBkltMSinphm AcXbMxW9eoVeUOlysHCoT9x7yANaajDiupCY/WidBp9iCVAhV1c360d382FwzeDQ J7JQzAps7WleZu59ePjHWqoeZ6gid3AgWc09+YyXuaymd3Kzy7hm2l+KTqPsHAVf /7yTBjTHwDe4BcsCrUGHmNu9vZxESQrbY6OFsLUoDDFjlfvxaCil5tAoB7MYQ1Zd fZGnxzVY1dp8fyRlyiOVHuzefrgtCU+r9IDLYrP5uP2CmUI7gmJZrZX7MlljdWqk 4JEpkA== Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cqx14h5eg-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 06 Mar 2026 17:23:35 +0000 (GMT) Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-8c70ef98116so6168037485a.1 for ; Fri, 06 Mar 2026 09:23:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772817815; x=1773422615; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=gnCHGaTyIrO+/XHi40pHajxkTWJ3etB/P/3gSFJpnBk=; b=j9NjZmTdOwNQPXfDNiMJhuHZhmQZiyjP7Qh/lypiGnDnhQezv9yk6jini784gXqyhE tdZ3QXEgi6wXwLeCVdRyiz98OF4M59dERSrktZ0xlmYvtuc0YJsl9W7VoePT0Um4tlH3 rmNNDa40S0YVsNjaeZb0+qgaeUidsk3fggwnAkX2fgLqahMfKG/sDkhxvDyZVStPJSN1 Z0H+Sf/XvaY6iop8aM/ZXaUdImAUSwQ1QPY16UyxBbCUSxXLGlGGbYoB7GMs7HoiUli/ AIp22iM1VpVAJJ45eC0xjASriJgEn3nSObc6f5qafz00zx8tNO8CKUjNOH5vIX2xOaAw HjcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772817815; x=1773422615; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=gnCHGaTyIrO+/XHi40pHajxkTWJ3etB/P/3gSFJpnBk=; b=LhWqwvsHQdhzm3qCc4FR53U23YAIeYKEC0NOyof6fqojsJjqFuXBS8xHgK4YtSkRZR FVwvFyo7w+IO9BNpdX1x4aCli+rpBHbtqvzRkVlCuNDVT7UwNCxtPU2geKd8FVdfQRwf g9pXkFLvPMc6GNclkeNcZxZqCvPkrV6fjZcv1So5/zTpS0cyrtX1HGHEmACw4a6A+/LS 4/Zka0OCGfTD7vARBHi4Y/bWITBRIgGyg2qAFguNwPABjWYnu0cO17yhwwMy0GYclg4A 1wvAKf/6ggnXf0z+fSvOkTQBjHxWY4rz8CRaXJ6+PZDfetb+yUhrtzV+qcMsp1caRvW/ sNag== X-Gm-Message-State: AOJu0YyHhW1y5Csehbcxv+qx1G3Dde7AT6tpIHXMgxC4XXT69qlHDhp5 eZ758DH2NHqZjAF2ofqtCR2/p5ZRi/9P10cecA3BBVgzKZgCFbi28mE8/73rBYxwbF4O1IiO75k asknyWHwAmmcvHWsihExy8ONvUdyY58Jqy+jVXjFD0Q/aSl8oOA8Hzazo07zC2NKhYQ0= X-Gm-Gg: ATEYQzxG0bZ8ffSfdIF8lgVm17SFdGukKR/3An6QhccPeX20OaOhCtTXse+lkdl6lVj wl8+oov5yP/cZFHTsiYNamvAhsUgsp/ifFq7KT4knRmtuLibMiST1JwavmqI/i81egy7hLdvzEt ODod1AmVacxrmL5s8CUfcgrqq+nxTQm8xEdFyHYQ6BoNF7m10kSexUFk7YXbv8WQJSS2XOCMbWg TjPEsTObIqZYDdN4wLa/cu2+qhJAIpdXvjv2fRKvlRUq5nJHElw5rx9NVDZU1HawFnArB0q+1c2 X+hKypk6q6ytxYnpPnN02KZDxUUuw20uV7WoPKX10F0x7pr8IRUS/mvuOhtUE+z89T88CMutrw5 Dgw3D25H//kfLw+pmic8PzvztauhaBl9gs4FjikU+N5daa+KJSpUe X-Received: by 2002:a05:620a:1925:b0:8c0:cbd8:20b0 with SMTP id af79cd13be357-8cd6d468037mr344777585a.34.1772817814525; Fri, 06 Mar 2026 09:23:34 -0800 (PST) X-Received: by 2002:a05:620a:1925:b0:8c0:cbd8:20b0 with SMTP id af79cd13be357-8cd6d468037mr344772385a.34.1772817813888; Fri, 06 Mar 2026 09:23:33 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:28b1:4950:7702:bb20]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48527686fa9sm61488475e9.8.2026.03.06.09.23.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Mar 2026 09:23:33 -0800 (PST) From: Bartosz Golaszewski Date: Fri, 06 Mar 2026 18:22:57 +0100 Subject: [PATCH v3 13/14] reset: convert reset core to using firmware nodes Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260306-reset-core-refactor-v3-13-599349522876@oss.qualcomm.com> References: <20260306-reset-core-refactor-v3-0-599349522876@oss.qualcomm.com> In-Reply-To: <20260306-reset-core-refactor-v3-0-599349522876@oss.qualcomm.com> To: Krzysztof Kozlowski , Philipp Zabel , Jonathan Corbet , Shuah Khan Cc: linux-kernel@vger.kernel.org, brgl@kernel.org, linux-doc@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=15703; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=6FY6/NpoOq7Rdpg5gYZySEQvwKsaI6/Ar0wZmyeBw3Q=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpqw19/45UfXqlpcldxprhPodcq9u5EhnP2HgEQ Nv7cMKFn9+JAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaasNfQAKCRAFnS7L/zaE ww5hD/95X1Pdm2D5Xd/3RdQPg0LQ5DXT128KonLWkljxQxPVGoSSG+602nZjuUgk4YJuxTwYMmP Be6a0i8qqeyVg7Z3EmM52doVPL2drkszQNzte0ydveE3z7S3EmlAIVBKTRml62ZVJyfKbSBBIrj y7GgL/1xpNyPgXPEBpoDAi3xOEzuiHqAitqNQZQ4lc9FdquRaBdGgxiLm8rxGRE+HN40PXrRQJw 8nifk3P6PmWNTUczXBImX3bsXmIyAoYfGESoyOC/BPgTIEkgHIPuRiJBF+4VtebBCWvjwnoeBP9 9NwDoYySsFbPbOKbmQKFeQ/HFegFvSCuDpsJiQGm//MAA/sKFVx6t8QffkvXSVO861zXHf7XFGy Vx3EpC1csSRBZSA6Ak8i9q1Wq+NpaCO2wJwyIPwpDk0amx5TQpnby6dVTigVnpA4uvGep2G4myC 76VBWyIDC5Em9GRi1BcYlqfhxSG/VS8p0WYWPDaHzl0/8QGC3HOrmuQfWQUzNkc1C5ZWkbXkzsQ Qicus+4bLSwOLBv93EJ/3y/sYC3El7DPFDAO8cw36PS03cz90HrBHnPVdr1FiFLL2+2S6Ccmhk2 j81ZrpaQapaYxhtnuAfgeF7+mhIz3+oYrUPoo21ibzwyjagSsNOaxTIwJERbpPavn0Wtm/Ijk05 UZSRgdede4TGOhQ== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDE2NCBTYWx0ZWRfX8Ggc3I70/XiQ MOjM/QEzYjeOIX7LtH3N7K7qzA9xJaCuc5uAM3QFeWuTSVu33GUe2VxcHHVH+jpNvc71quxpHaX tL5sCOcFN2RXmh0wd/9qGz/to1gD+ZZdGOtpeJ4bkqz2Z73LdFytimK5ktAUMiHu9bJMY4bb+1q vc8OKztP8OVVJK+1Wzqnxicx9nA8jmePLTwJhoGml6g+wH2uUNjB3aeTPeIUpgLjW+zm6ApXy0X +jVuomXt5h1kWOZ/OqJzMAdKEKA6GNadoLmKeYWQr2RswXhlcxt3Tht8Xwc/mKsYvYSE5Mgbnr4 qG7ZNT2lG+U61dlnmY/3k7Z5SacTnvbJLTIZbdWniox/ibAIXm+ktUtrEBGTnWA0q4Q+BtDkmLB P/fscY7DffQvg0IIXgqgKr+BYUfsOkhiZzhsmECwhACJLhmANMhOb3C4MxZ+GDMnkouunzKWo0N fnRPuIhdtHOsXv48UqQ== X-Proofpoint-GUID: wE9AR93btmMzjDD8U3Sr7RDEQFgzUqK0 X-Proofpoint-ORIG-GUID: wE9AR93btmMzjDD8U3Sr7RDEQFgzUqK0 X-Authority-Analysis: v=2.4 cv=e/MLiKp/ c=1 sm=1 tr=0 ts=69ab0d97 cx=c_pps a=hnmNkyzTK/kJ09Xio7VxxA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=EUspDBNiAAAA:8 a=KnmVVp5zvkuUHY8ZiwgA:9 a=QEXdDO2ut3YA:10 a=PEH46H7Ffwr30OY-TuGO:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_05,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 bulkscore=0 adultscore=0 clxscore=1015 spamscore=0 phishscore=0 malwarescore=0 lowpriorityscore=0 suspectscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603060164 With everything else now in place, we can convert the remaining parts of the reset subsystem to becoming fwnode-agnostic - meaning it will work with all kinds of firmware nodes, not only devicetree. To that end: extend struct reset_controller_dev with fields taking information relevant for using firmware nodes (which mirrors what we already do for OF-nodes) and limit using of_ APIs only to where it's absolutely necessary (mostly around the of_xlate callback). For backward compatibility of existing drivers we still support OF-nodes but firmware nodes become the preferred method. Signed-off-by: Bartosz Golaszewski Reviewed-by: Philipp Zabel --- drivers/reset/core.c | 166 +++++++++++++++++++++++------------= ---- include/linux/reset-controller.h | 14 +++- 2 files changed, 112 insertions(+), 68 deletions(-) diff --git a/drivers/reset/core.c b/drivers/reset/core.c index 0817afe72de75f795d62e02451520726da7c9844..e33a9bc9f94fc6867be6efd3217= 8658d99fc088f 100644 --- a/drivers/reset/core.c +++ b/drivers/reset/core.c @@ -81,13 +81,13 @@ struct reset_control_array { =20 /** * struct reset_gpio_lookup - lookup key for ad-hoc created reset-gpio dev= ices - * @of_args: phandle to the reset controller with all the args like GPIO n= umber + * @ref_args: Reference to the reset controller with all the args like GPI= O number * @swnode: Software node containing the reference to the GPIO provider * @list: list entry for the reset_gpio_lookup_list * @adev: Auxiliary device representing the reset controller */ struct reset_gpio_lookup { - struct of_phandle_args of_args; + struct fwnode_reference_args ref_args; struct fwnode_handle *swnode; struct list_head list; struct auxiliary_device adev; @@ -98,24 +98,24 @@ static const char *rcdev_name(struct reset_controller_d= ev *rcdev) if (rcdev->dev) return dev_name(rcdev->dev); =20 - if (rcdev->of_node) - return rcdev->of_node->full_name; + if (rcdev->fwnode) + return fwnode_get_name(rcdev->fwnode); =20 return NULL; } =20 /** - * of_reset_simple_xlate - translate reset_spec to the reset line number + * fwnode_reset_simple_xlate - translate reset_spec to the reset line numb= er * @rcdev: a pointer to the reset controller device - * @reset_spec: reset line specifier as found in the device tree + * @reset_spec: reset line specifier as found in firmware * - * This static translation function is used by default if of_xlate in - * :c:type:`reset_controller_dev` is not set. It is useful for all reset - * controllers with 1:1 mapping, where reset lines can be indexed by number - * without gaps. + * This static translation function is used by default if neither fwnode_x= late + * not of_xlate in :c:type:`reset_controller_dev` is not set. It is useful= for + * all reset controllers with 1:1 mapping, where reset lines can be indexe= d by + * number without gaps. */ -static int of_reset_simple_xlate(struct reset_controller_dev *rcdev, - const struct of_phandle_args *reset_spec) +static int fwnode_reset_simple_xlate(struct reset_controller_dev *rcdev, + const struct fwnode_reference_args *reset_spec) { if (reset_spec->args[0] >=3D rcdev->nr_resets) return -EINVAL; @@ -129,9 +129,23 @@ static int of_reset_simple_xlate(struct reset_controll= er_dev *rcdev, */ int reset_controller_register(struct reset_controller_dev *rcdev) { - if (!rcdev->of_xlate) { - rcdev->of_reset_n_cells =3D 1; - rcdev->of_xlate =3D of_reset_simple_xlate; + if ((rcdev->of_node && rcdev->fwnode) || (rcdev->of_xlate && rcdev->fwnod= e_xlate)) + return -EINVAL; + + if (!rcdev->of_node && !rcdev->fwnode) { + rcdev->fwnode =3D dev_fwnode(rcdev->dev); + if (!rcdev->fwnode) + return -EINVAL; + } + + if (rcdev->of_node) { + rcdev->fwnode =3D of_fwnode_handle(rcdev->of_node); + rcdev->fwnode_reset_n_cells =3D rcdev->of_reset_n_cells; + } + + if (rcdev->fwnode && !rcdev->fwnode_xlate) { + rcdev->fwnode_reset_n_cells =3D 1; + rcdev->fwnode_xlate =3D fwnode_reset_simple_xlate; } =20 INIT_LIST_HEAD(&rcdev->reset_control_head); @@ -931,7 +945,7 @@ static int reset_create_gpio_aux_device(struct reset_gp= io_lookup *rgpio_dev, adev->id =3D id; adev->name =3D "gpio"; adev->dev.parent =3D parent; - adev->dev.platform_data =3D &rgpio_dev->of_args; + adev->dev.platform_data =3D &rgpio_dev->ref_args; adev->dev.release =3D reset_gpio_aux_device_release; device_set_node(&adev->dev, rgpio_dev->swnode); =20 @@ -951,18 +965,18 @@ static int reset_create_gpio_aux_device(struct reset_= gpio_lookup *rgpio_dev, return 0; } =20 -static void reset_gpio_add_devlink(struct device_node *np, +static void reset_gpio_add_devlink(struct fwnode_handle *fwnode, struct reset_gpio_lookup *rgpio_dev) { struct device *consumer; =20 /* - * We must use get_dev_from_fwnode() and not of_find_device_by_node() + * We must use get_dev_from_fwnode() and not ref_find_device_by_node() * because the latter only considers the platform bus while we want to * get consumers of any kind that can be associated with firmware * nodes: auxiliary, soundwire, etc. */ - consumer =3D get_dev_from_fwnode(of_fwnode_handle(np)); + consumer =3D get_dev_from_fwnode(fwnode); if (consumer) { if (!device_link_add(consumer, &rgpio_dev->adev.dev, DL_FLAG_AUTOREMOVE_CONSUMER)) @@ -982,15 +996,23 @@ static void reset_gpio_add_devlink(struct device_node= *np, */ } =20 +/* TODO: move it out into drivers/base/ */ +static bool fwnode_reference_args_equal(const struct fwnode_reference_args= *left, + const struct fwnode_reference_args *right) +{ + return left->fwnode =3D=3D right->fwnode && left->nargs =3D=3D right->nar= gs && + !memcmp(left->args, right->args, sizeof(left->args[0]) * left->nar= gs); +} + /* * @np: OF-node associated with the consumer - * @args: phandle to the GPIO provider with all the args like GPIO number + * @args: Reference to the GPIO provider with all the args like GPIO number */ -static int __reset_add_reset_gpio_device(struct device_node *np, - const struct of_phandle_args *args) +static int __reset_add_reset_gpio_device(struct fwnode_handle *fwnode, + const struct fwnode_reference_args *args) { struct property_entry properties[3] =3D { }; - unsigned int offset, of_flags, lflags; + unsigned int offset, flags, lflags; struct reset_gpio_lookup *rgpio_dev; struct device *parent; int ret, prop =3D 0; @@ -1001,7 +1023,7 @@ static int __reset_add_reset_gpio_device(struct devic= e_node *np, * args[1]: GPIO flags * TODO: Handle other cases. */ - if (args->args_count !=3D 2) + if (args->nargs !=3D 2) return -ENOENT; =20 /* @@ -1012,7 +1034,7 @@ static int __reset_add_reset_gpio_device(struct devic= e_node *np, lockdep_assert_not_held(&reset_list_mutex); =20 offset =3D args->args[0]; - of_flags =3D args->args[1]; + flags =3D args->args[1]; =20 /* * Later we map GPIO flags between OF and Linux, however not all @@ -1022,33 +1044,31 @@ static int __reset_add_reset_gpio_device(struct dev= ice_node *np, * FIXME: Find a better way of translating OF flags to GPIO lookup * flags. */ - if (of_flags > GPIO_ACTIVE_LOW) { + if (flags > GPIO_ACTIVE_LOW) { pr_err("reset-gpio code does not support GPIO flags %u for GPIO %u\n", - of_flags, offset); + flags, offset); return -EINVAL; } =20 struct gpio_device *gdev __free(gpio_device_put) =3D - gpio_device_find_by_fwnode(of_fwnode_handle(args->np)); + gpio_device_find_by_fwnode(args->fwnode); if (!gdev) return -EPROBE_DEFER; =20 guard(mutex)(&reset_gpio_lookup_mutex); =20 list_for_each_entry(rgpio_dev, &reset_gpio_lookup_list, list) { - if (args->np =3D=3D rgpio_dev->of_args.np) { - if (of_phandle_args_equal(args, &rgpio_dev->of_args)) { - /* - * Already on the list, create the device link - * and stop here. - */ - reset_gpio_add_devlink(np, rgpio_dev); - return 0; - } + if (fwnode_reference_args_equal(args, &rgpio_dev->ref_args)) { + /* + * Already on the list, create the device link + * and stop here. + */ + reset_gpio_add_devlink(fwnode, rgpio_dev); + return 0; } } =20 - lflags =3D GPIO_PERSISTENT | (of_flags & GPIO_ACTIVE_LOW); + lflags =3D GPIO_PERSISTENT | (flags & GPIO_ACTIVE_LOW); parent =3D gpio_device_to_device(gdev); properties[prop++] =3D PROPERTY_ENTRY_STRING("compatible", "reset-gpio"); properties[prop++] =3D PROPERTY_ENTRY_GPIO("reset-gpios", parent->fwnode,= offset, lflags); @@ -1058,43 +1078,43 @@ static int __reset_add_reset_gpio_device(struct dev= ice_node *np, if (!rgpio_dev) return -ENOMEM; =20 - rgpio_dev->of_args =3D *args; + rgpio_dev->ref_args =3D *args; /* - * We keep the device_node reference, but of_args.np is put at the end - * of __fwnode_reset_control_get(), so get it one more time. + * We keep the fwnode_handle reference, but ref_args.fwnode is put at + * the end of __fwnode_reset_control_get(), so get it one more time. * Hold reference as long as rgpio_dev memory is valid. */ - of_node_get(rgpio_dev->of_args.np); + fwnode_handle_get(rgpio_dev->ref_args.fwnode); =20 rgpio_dev->swnode =3D fwnode_create_software_node(properties, NULL); if (IS_ERR(rgpio_dev->swnode)) { ret =3D PTR_ERR(rgpio_dev->swnode); - goto err_put_of_node; + goto err_put_fwnode; } =20 ret =3D reset_create_gpio_aux_device(rgpio_dev, parent); if (ret) goto err_del_swnode; =20 - reset_gpio_add_devlink(np, rgpio_dev); + reset_gpio_add_devlink(fwnode, rgpio_dev); list_add(&rgpio_dev->list, &reset_gpio_lookup_list); =20 return 0; =20 err_del_swnode: fwnode_remove_software_node(rgpio_dev->swnode); -err_put_of_node: - of_node_put(rgpio_dev->of_args.np); +err_put_fwnode: + fwnode_handle_put(rgpio_dev->ref_args.fwnode); kfree(rgpio_dev); =20 return ret; } =20 -static struct reset_controller_dev *__reset_find_rcdev(const struct of_pha= ndle_args *args, - bool gpio_fallback) +static struct reset_controller_dev * +__reset_find_rcdev(const struct fwnode_reference_args *args, bool gpio_fal= lback) { + struct fwnode_reference_args *rc_args; struct reset_controller_dev *rcdev; - struct of_phandle_args *rc_args; =20 lockdep_assert_held(&reset_list_mutex); =20 @@ -1103,10 +1123,10 @@ static struct reset_controller_dev *__reset_find_rc= dev(const struct of_phandle_a device_is_compatible(rcdev->dev, "reset-gpio")) { rc_args =3D dev_get_platdata(rcdev->dev); =20 - if (of_phandle_args_equal(args, rc_args)) + if (fwnode_reference_args_equal(args, rc_args)) return rcdev; } else { - if (args->np =3D=3D rcdev->of_node) + if (args->fwnode =3D=3D rcdev->fwnode) return rcdev; } } @@ -1120,27 +1140,26 @@ __fwnode_reset_control_get(struct fwnode_handle *fw= node, const char *id, int ind { bool optional =3D flags & RESET_CONTROL_FLAGS_BIT_OPTIONAL; bool gpio_fallback =3D false; - struct device_node *node =3D to_of_node(fwnode); struct reset_control *rstc =3D ERR_PTR(-EINVAL); struct reset_controller_dev *rcdev; - struct of_phandle_args args; - int rstc_id; + struct fwnode_reference_args args; + struct of_phandle_args of_args; + int rstc_id =3D -EINVAL; int ret; =20 if (!fwnode) return ERR_PTR(-EINVAL); =20 if (id) { - index =3D of_property_match_string(node, - "reset-names", id); + index =3D fwnode_property_match_string(fwnode, "reset-names", id); if (index =3D=3D -EILSEQ) return ERR_PTR(index); if (index < 0) return optional ? NULL : ERR_PTR(-ENOENT); } =20 - ret =3D of_parse_phandle_with_args(node, "resets", "#reset-cells", - index, &args); + ret =3D fwnode_property_get_reference_args(fwnode, "resets", "#reset-cell= s", + 0, index, &args); if (ret =3D=3D -EINVAL) return ERR_PTR(ret); if (ret) { @@ -1151,16 +1170,16 @@ __fwnode_reset_control_get(struct fwnode_handle *fw= node, const char *id, int ind * There can be only one reset-gpio for regular devices, so * don't bother with the "reset-gpios" phandle index. */ - ret =3D of_parse_phandle_with_args(node, "reset-gpios", "#gpio-cells", - 0, &args); + ret =3D fwnode_property_get_reference_args(fwnode, "reset-gpios", + "#gpio-cells", 0, 0, &args); if (ret) return optional ? NULL : ERR_PTR(ret); =20 gpio_fallback =3D true; =20 - ret =3D __reset_add_reset_gpio_device(node, &args); + ret =3D __reset_add_reset_gpio_device(fwnode, &args); if (ret) { - of_node_put(args.np); + fwnode_handle_put(args.fwnode); return ERR_PTR(ret); } } @@ -1173,15 +1192,30 @@ __fwnode_reset_control_get(struct fwnode_handle *fw= node, const char *id, int ind goto out_put; } =20 - if (WARN_ON(args.args_count !=3D rcdev->of_reset_n_cells)) { + if (WARN_ON(args.nargs !=3D rcdev->fwnode_reset_n_cells)) { rstc =3D ERR_PTR(-EINVAL); goto out_put; } =20 - rstc_id =3D rcdev->of_xlate(rcdev, &args); + if (rcdev->of_xlate && is_of_node(fwnode)) { + ret =3D of_parse_phandle_with_args(to_of_node(fwnode), + gpio_fallback ? "reset-gpios" : "resets", + gpio_fallback ? "#gpio-cells" : "#reset-cells", + gpio_fallback ? 0 : index, + &of_args); + if (ret) { + rstc =3D ERR_PTR(ret); + goto out_put; + } + + rstc_id =3D rcdev->of_xlate(rcdev, &of_args); + of_node_put(of_args.np); + } else if (rcdev->fwnode_xlate) { + rstc_id =3D rcdev->fwnode_xlate(rcdev, &args); + } if (rstc_id < 0) { rstc =3D ERR_PTR(rstc_id); - goto out_put; + goto out_put; } =20 flags &=3D ~RESET_CONTROL_FLAGS_BIT_OPTIONAL; @@ -1190,7 +1224,7 @@ __fwnode_reset_control_get(struct fwnode_handle *fwno= de, const char *id, int ind rstc =3D __reset_control_get_internal(rcdev, rstc_id, flags); =20 out_put: - of_node_put(args.np); + fwnode_handle_put(args.fwnode); =20 return rstc; } diff --git a/include/linux/reset-controller.h b/include/linux/reset-control= ler.h index 185d2a9bd7cd381ddc51c0f1643c4e3cb196015e..52a5a4e81f1844075210339bf7f= fa46ec5ca6edf 100644 --- a/include/linux/reset-controller.h +++ b/include/linux/reset-controller.h @@ -5,6 +5,8 @@ #include #include =20 +struct fwnode_handle; +struct fwnode_reference_args; struct reset_controller_dev; =20 /** @@ -38,8 +40,12 @@ struct of_phandle_args; * @of_node: corresponding device tree node as phandle target * @of_reset_n_cells: number of cells in reset line specifiers * @of_xlate: translation function to translate from specifier as found in= the - * device tree to id as given to the reset control ops, defaults - * to :c:func:`of_reset_simple_xlate`. + * device tree to id as given to the reset control ops + * @fwnode: firmware node associated with this device + * @fwnode_reset_n_cells: number of cells in reset line specifiers + * @fwnode_xlate: translation function to translate from firmware specifie= r to + * id as given to the reset control ops, defaults to + * :c:func:`fwnode_reset_simple_xlate` * @nr_resets: number of reset controls in this reset controller device * @lock: protects the reset control list from concurrent access */ @@ -53,6 +59,10 @@ struct reset_controller_dev { int of_reset_n_cells; int (*of_xlate)(struct reset_controller_dev *rcdev, const struct of_phandle_args *reset_spec); + struct fwnode_handle *fwnode; + int fwnode_reset_n_cells; + int (*fwnode_xlate)(struct reset_controller_dev *rcdev, + const struct fwnode_reference_args *reset_spec); unsigned int nr_resets; struct mutex lock; }; --=20 2.47.3 From nobody Thu Apr 9 16:33:38 2026 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 84BC042B75F for ; Fri, 6 Mar 2026 17:23:37 +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=1772817818; cv=none; b=k1w5NN8/CCgOD7IokVh1uCtEx3DV9ze+CvevJM9kSHIibj4Th5Ea16UfVoumvrXgVrjbHtNuVaBYyFe1M1SZcDG8wnvPgoyGfVYXf8jrFKl4L7/qX6PiH+DCMeUh/fkiXg9sEdx9/36/gNwOJ5kXUdyEsA0abKaqHtELXE0itCI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772817818; c=relaxed/simple; bh=WwdQB/HEMCiILXFdnsdSwGLYysMzviGgQyw41TjcHTg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gD5+/tnIvghXJJth4d8jozjOFxnba3TE/soyeWqtWr0Iw+kFpFNCYSZFqmagYFwATpNiKzHZ2CWwFZeFmTlwZxttnXbh4HqBxgMuQUk4ywzblyaa8CKucIS4IbWpGV1xKkR4SiFQMyNRpTstDy0gnEwrvR2/OaaUQvmJM7Uk7Q0= 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=IKLYi4tE; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=bq2wK8zu; 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="IKLYi4tE"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="bq2wK8zu" Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 626H1qRg1898387 for ; Fri, 6 Mar 2026 17:23:37 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= 7ucGnjAmJrAINhZPKAil097cu+BIB2nTNg2JRK7+n04=; b=IKLYi4tEYzNGco36 nXrI0gzyS+FNpZrCV4t4pyoYB4ke9qvvl/7FQLAFzmEjkRNxU9pXQvSQ2KGtXcKG Ak1lOL0qsmO8tCgNnHTFXO2/ScMVLwlmyj8ZX9G68YRCkvoCgE6ZzkovMIaVlWjo TKfDMQ8BYgzEUnXyN0pMEpHlZIyl1VOx3bp6xeOwebTyXp6Hstgvgh4MmI2vviIu QY8PoAjxIMZXu/qKdoCyXCSLg25wHUcCwSo+lLt+qBNHXJsCIFsXF0xOXDw9XKdU IJOlW2w86/oGsV7JvuX5oJ5nKHtVjIfQyWYAMuqPpOU/whWE4+PMrHlD0vhTHROa VNfcCg== Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4cqx14h5ek-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 06 Mar 2026 17:23:36 +0000 (GMT) Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-8c70ef98116so6168049785a.1 for ; Fri, 06 Mar 2026 09:23:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1772817816; x=1773422616; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=7ucGnjAmJrAINhZPKAil097cu+BIB2nTNg2JRK7+n04=; b=bq2wK8zuj2d1PNt9ACsaiWq5BJldkmBPeBkh1RQj/+qZEMKVYZrDJdfkMdbpSQTNDj wA23W1rydMdlcm/fc7AUY81XZtX5+VHW+Xi4/SlmhsW8e8SHShxwJqddMh2+YRKK1ogr BWT9zsmQEG3S+f70soI+gGobH520a1oR9NekUuKOcRy550GYVmypenDoZRbZAb8Mm0r0 3t0ZE9kvUubzEtVfIF3tS2QU0FJ6r48/tMLRwQ5TFufwv+swXfTmZp6fX32tyGtQjMJ5 auqLoGmG3DdfVOuNF+PQ0h0I1uHe0Et4md18q4rObmpreA/Sd4fksjqzLPB3ftd55VLG x3yQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772817816; x=1773422616; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=7ucGnjAmJrAINhZPKAil097cu+BIB2nTNg2JRK7+n04=; b=Vwo7LUWDkxtroMBdkaTlaAbsNtC+Q/FlqzQsZs+U9SlUbZ71J84jAI/ERjEhDvsASy BaNDJv8rLuJv2kl+RMEciX/eX5lT0seB8asoLcH8/ew1j9LQMLutGupdCusPC/5iJAtp l76Akis8Ew6X/9cgGkK066aCR6gAIqIyCln7VHeRM5atvg39RmLLeE+0q615crekXhSL V/VSh/gmaNC1jFkiqvE2FpWZ528ecZNssJ6z4e94zGWjOD/0Hz2sACy5uEo6jCTG4wxx 65iVK5kWcS7PJga0BEgykaD8jzwmCMeO4gkcTZf331Sek35SCFwTdsp0GTi4hgCRy3p6 cXSg== X-Gm-Message-State: AOJu0YzXmeQOkTjUNk/2qwzIMfJCrxZraVuUP0wPRK6F5iyvSrx56GKp eFLutluqShO/4dRBqT1Iw4dbAsx8NgYzn3DnGJpcM3fbvTr8xhX4EcBiETlkGAx3Cz6gPZ/NbmO NH5pj9+l3IAy+nRoJIpqLLXz5Vitcdh6p9Jb1E2cGmew0cqYdW15i9OA48iiM0noyK7zQkb4KSu E= X-Gm-Gg: ATEYQzzVDxjDa6o06FUn557mlo5GmN7nEH5j7fIHu76atiHaC0RIO/kRA9TJ4xjTLIk fFUvP+V3oiOzLh9mURyRyOOV9uu0VTXXU/0LArpxdar6tJSv+7cRl/D7JQt5nRU+f76YQxZduBs VcMeFfnw/h4ZUnZyP1Bvf0XFt/3Wi+MhwAHwhxhNnVKXqWLqYIvNYeHjlPyKRM+iRLoRLKkJsyv F7v5yo2V0GB4ih3ThBlzrWRagqjthqRylC+1LnSojggatWJqsXv4/cVSsXFsGQyWRPLBlXJJUH4 zbQgSJtZpCC88+mXLZqQ+3G9vmk5udAeJ6/io7uxLe3AFezUAqpCPSdbSpdFTOVmbaAvpx0nsll 4BgyNr4c364upBF3l9bHKJIki9OHzklAeBJ5lxv03xQnNMvYsaPWo X-Received: by 2002:a05:620a:4404:b0:8ca:3c67:890f with SMTP id af79cd13be357-8cd6d531b85mr357220485a.76.1772817815791; Fri, 06 Mar 2026 09:23:35 -0800 (PST) X-Received: by 2002:a05:620a:4404:b0:8ca:3c67:890f with SMTP id af79cd13be357-8cd6d531b85mr357217285a.76.1772817815269; Fri, 06 Mar 2026 09:23:35 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:28b1:4950:7702:bb20]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48527686fa9sm61488475e9.8.2026.03.06.09.23.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 06 Mar 2026 09:23:34 -0800 (PST) From: Bartosz Golaszewski Date: Fri, 06 Mar 2026 18:22:58 +0100 Subject: [PATCH v3 14/14] reset: gpio: make the driver fwnode-agnostic Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260306-reset-core-refactor-v3-14-599349522876@oss.qualcomm.com> References: <20260306-reset-core-refactor-v3-0-599349522876@oss.qualcomm.com> In-Reply-To: <20260306-reset-core-refactor-v3-0-599349522876@oss.qualcomm.com> To: Krzysztof Kozlowski , Philipp Zabel , Jonathan Corbet , Shuah Khan Cc: linux-kernel@vger.kernel.org, brgl@kernel.org, linux-doc@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1683; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=WwdQB/HEMCiILXFdnsdSwGLYysMzviGgQyw41TjcHTg=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpqw19QdSWLo58xqzPbY3E/ZW1lcno/34jhW2o/ fcSZCmGAt+JAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaasNfQAKCRAFnS7L/zaE w+4UD/9VIDVGnDP654XCvQOf/uPEmXjhExA6w/r6cIYLJEm59omPj4vHNR9S3pMbBaw0L295c/m NFS6W/TE1w8PpNsZSPdyhz5rzMZavFTzBQQ1s7Jhiz/P7BMnclSAPhwgNbj+RaHzSKgBTC3PTX7 NWL/qDvibwY28uJHXO8XaX5/kuO0nOnRs+jt5iG3ACSs8exvFA2FBXGw651ruifXsMsMuzZIuv4 d+bBTJo4t9wZ1Ckph1vwIWVsU9x9YH+nh2v6wyzrdBbXIoUgmF9dduQSXA3qpQm4pDjxz0yggC3 dqGkkVNDxPYKcuIv0iQaw9sLLNtY0c7MLv459qoNJ2/OIlsLQKPJWv9PHGeCRsGpZwgQv0KQknq DQI10TAB34WddDTFn3pWDSVofJ8stke8GrOYHJOzneBxH9NPJisFNR1j+PEL5GewaRm625jzrxV fqr4b9PauT9lP9rFknkinRi8pplt6Q7dsaVdbcNJo58VMUyk0g/PQnGE3fYBU5ap8eY6pZkcjp/ y0biTJLkRg6NIar0YI+St5Px6DOUb/FhI6VTGC6fC9d23/SXIW+oHcssf6ey1WITJeMWCPIIQsF JgUOZEe/cWnV3rCLWmSfXHknNLpeSWCuMICKS+9alvVwQp3fLnLzB68mk2++msLxwJXNeGpEjCu U35+ueygxsZR1og== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA2MDE2NCBTYWx0ZWRfX0gIyc22270Dk zUUnVyy725jv8Gh66rGQ23MvH01XVOZ7U0l2pjZj4kLnQfx0nPxDjWKrNJEhO56POyvXS0x9fW1 4WMFtPJbIzlMZ/CHqRfqmHysGiFCskYhJjjOg4Jq8j+kKyxet13zcdsnFhMoIcALOroMyXr8BQQ SNzgob6AdAOEucSNVQ9E1SJSMQxDAfV6yxOCSAVg/AokbTQZ/eyzE8OiDSP/mHb7aaHcgT610aC cHpJjpjQnz0VWQp7d/+TjL5+rT+iz6RLy+2EBu3hRCAtUvD4NcTdI07rh9W/+mKJ2jlWxnGXDnh n09kWJgQYrUAfruBCkWxL7h9UJHa/qpi2mMlF+Ta3Y4bYA4EKehLCQuL9tyfix2/9eI81ddTcVR yfXAjsx4ivi+UFQ81k2UZkuN1glD3nbaaB0VvMYtGspdpnLS6McaDYkq/AGaZ5T6811l4gjq2o2 Slsd9IaV6jUouMgpoHA== X-Proofpoint-GUID: A__6fQrIBlETrk8svHOQvgw53rsRjHUO X-Proofpoint-ORIG-GUID: A__6fQrIBlETrk8svHOQvgw53rsRjHUO X-Authority-Analysis: v=2.4 cv=e/MLiKp/ c=1 sm=1 tr=0 ts=69ab0d98 cx=c_pps a=hnmNkyzTK/kJ09Xio7VxxA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=EUspDBNiAAAA:8 a=3hQubXxqK_WyehwcTsYA:9 a=QEXdDO2ut3YA:10 a=PEH46H7Ffwr30OY-TuGO:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-06_05,2026-03-06_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 bulkscore=0 adultscore=0 clxscore=1015 spamscore=0 phishscore=0 malwarescore=0 lowpriorityscore=0 suspectscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603060164 With reset core now being able to work with firmware nodes, we can make reset-gpio node-agnostic and drop any OF dependencies. Reviewed-by: Philipp Zabel Signed-off-by: Bartosz Golaszewski --- drivers/reset/reset-gpio.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/reset/reset-gpio.c b/drivers/reset/reset-gpio.c index 5044f809d0e59a08861597f4aeb685e95328c2af..26aa2c3a2e689385ffa6ac056ce= 8787518ea4376 100644 --- a/drivers/reset/reset-gpio.c +++ b/drivers/reset/reset-gpio.c @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include =20 struct reset_gpio_priv { @@ -46,8 +46,8 @@ static const struct reset_control_ops reset_gpio_ops =3D { .status =3D reset_gpio_status, }; =20 -static int reset_gpio_of_xlate(struct reset_controller_dev *rcdev, - const struct of_phandle_args *reset_spec) +static int reset_gpio_fwnode_xlate(struct reset_controller_dev *rcdev, + const struct fwnode_reference_args *reset_spec) { return reset_spec->args[0]; } @@ -72,8 +72,8 @@ static int reset_gpio_probe(struct auxiliary_device *adev, priv->rc.dev =3D dev; =20 /* Cells to match GPIO specifier, but it's not really used */ - priv->rc.of_reset_n_cells =3D 2; - priv->rc.of_xlate =3D reset_gpio_of_xlate; + priv->rc.fwnode_reset_n_cells =3D 2; + priv->rc.fwnode_xlate =3D reset_gpio_fwnode_xlate; priv->rc.nr_resets =3D 1; =20 return devm_reset_controller_register(dev, &priv->rc); --=20 2.47.3