From nobody Sun Feb 8 05:28:27 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 E7A0A17AE1D for ; Mon, 5 Jan 2026 14:16:05 +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=1767622568; cv=none; b=PWbEBJmD5MlNkSBMqf7lAN8Sx7lQmWB9MJvBLAFlgIuCmsjh7tTKGDgOYKKWLCxV1GC7QSEP5j7wcVAJ6b/joQItboMxFyFNuHik/hexz9nfJZ12VPPbydLvIKFy0ljRPUil97tun8z0UIUGGxUcN3dPBJS7TQ9XnbmX1y0dfCs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767622568; c=relaxed/simple; bh=uxegMP4ngfz6YTXW5vsipTEH39YjT5UqWwy6wlSpynw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=cuJtxk8acud8K0Yt73MpG9NOfYwKZfYTMdMLVjUNfmWBxnN411qFplZ45G3UYyjhBnGuRYx/80sCIGzAbHRdRP/5A4PqBu/tWzUUpmBgMBkx19qTVSGyDmVDHQuDskpteH4fPbxoBcn1bLPxx7hqFikiGTSoR8fJ4jRx7Hf31I4= 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=j4LGe7Dh; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=AEtTE2jB; 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="j4LGe7Dh"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="AEtTE2jB" Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 605AJBa8091785 for ; Mon, 5 Jan 2026 14:16:04 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= 5XexJX5iQg/6Cc+7RXXC3iY4y41qBJxRKM+icYmx2H4=; b=j4LGe7DhJAi1YeY7 9eecKo00iULICHDEU/xviIdyNpG+Ft+h5TMHSImeYbZHWxdWCgbZXHJkLVWyO3qb swbY+8/d7QEHbSIoB4xgOZ6G4y9dsHRk3oxsZD48phjdzuClPF+QEAC0/Z5YgmO+ aZ1fDyXrpU54qaF9fYwIbbcBL31IlOJ8la7ANpEsQTYFfG6iDwNCaAEU8CTSKjTq 4jagtbZ2GvzQZSwd8aSTF9Xt9N3OG7gyylCEdXj0b1Fv6aG2GasAGuwkUFd69BeO 7p9BNxWIkn0NJ0ocQCJqZo2U3xRMCWaTHB04VzBG+eqCt9W3mmVNpvtTsTttysIO N3C2zQ== Received: from mail-vk1-f198.google.com (mail-vk1-f198.google.com [209.85.221.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bg4v61r36-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 05 Jan 2026 14:16:04 +0000 (GMT) Received: by mail-vk1-f198.google.com with SMTP id 71dfb90a1353d-55ad466ae47so31249941e0c.3 for ; Mon, 05 Jan 2026 06:16:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767622564; x=1768227364; 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=5XexJX5iQg/6Cc+7RXXC3iY4y41qBJxRKM+icYmx2H4=; b=AEtTE2jBL69LBjwP0OrWn9S+UDkSTVp/hkPGE5PwtWjYt1bAjcB1SPOH+1MZXY7oVG N8UqMkArlGTH5IDpilYODPJfSsymADtzid5XY73p+nmTKbt6evzGSi2due/gGucWR0ys PxKJIGUzm+P4hf3Osgfx6Q/LrZOcncW7atR8fP+YTziC4yDSsnitifQNm16ArRyuG2Y7 YBWa2puwNdso6K9oHZWvAJsmxPjbpvv9vzb2XPZve7AO/w8tT6mMKwq+oxe3gt29N7yS 0SRvUpqOOYgQv4p+unqX7cYtdtibkHL8kpXAxmTH2QPpBLYBDvpT+s6msnTizXWMZrds /wOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767622564; x=1768227364; 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=5XexJX5iQg/6Cc+7RXXC3iY4y41qBJxRKM+icYmx2H4=; b=QTP37EZ7eaG9MNSHRYo8tUOtcj7PqTzRtI2gxfIdTyzqmGlT5F1JuQ3RB2YjCth+Wo MzO/PFMnYxSf5AMBesUT0RmWY3/L5fb2lYPyWnftfS1mYUrnjukMm/L41vn3L4J+yk5S W2xMTHh8JY7Q31eErIWIFFeQPDF5CIwshCHhLLpvGFbnTI1BDOL/dToU+wspa23GvUMH VXzQEJbC7M2SP+dIYH6spwO84/NUVfbyfjLB2HiOAPmZLfhVDILXxW/2iBiK0EhDpTJS x6meMLOQHjN2LDqZak22ZaAeX2pUQMfQ3ZZtHsiBZl1bbxlLCBx/JnY4FOdjFCe/qzoQ AcVA== X-Gm-Message-State: AOJu0Yz0u6LreNrTWH7obvtjUJBRKmb0n1pz/+Co//N7uhHzMAbZSjzx NsIpdt2rLxCAJo+e7ng157EmtmiKiNpB6/BK/6hqrGtKAfoow9bSCcib5NmtIhfM8Ly1+voVUB7 Tw38MHBxzeMBmROC0sUjwdIW99Ll6WhGLJx2clSImuknEYfUqi9D3jDN5MPbSc+yrAj0= X-Gm-Gg: AY/fxX5QDTNdRIeG/fOOqRG2ivUZ4TO3aukMpGD8th7QHUkmUYliD7oRAzOxK5xRXdf MGk7iXVCcka5cTUlYBUPLzJVAPSpSls8QjS95XEFhfKLw/lw+9xzZ8TqKJUKNw0fMo25RL2KRjC 7mnmwngCHtcn3xwQoZaE7yo/gXqCjpOvhMvCngBp2nXL5hihgwiKSA+wtqH5TnZZaW9lpG54eXb oF3WvuYJO7HKamH7gYWoGBrEqP3PrZ43RF/nBsWRi4FD12WcnLnIsEI06Flhqm9xltJEQuSValL 25qpIqaVx7lqTFDa4o++t7xiMED4Wt54NWsRVk4XrFijvoaNNVG6iA1DpMoxxt/wxX1b0QjzUcC yDAnc4INf+8MG3WkeMb5JIG+wo0pUQ6+uB7mMo3M= X-Received: by 2002:a05:6122:883:b0:55b:305b:4e34 with SMTP id 71dfb90a1353d-5615be902ccmr17456391e0c.20.1767622563893; Mon, 05 Jan 2026 06:16:03 -0800 (PST) X-Google-Smtp-Source: AGHT+IGwW/2sgUTawIcHlk+zfDnV7xE72J04w6iAMqO0EiH5BcIc2qAlqXPL0fMTBPWQhYxpxkNemA== X-Received: by 2002:a05:6122:883:b0:55b:305b:4e34 with SMTP id 71dfb90a1353d-5615be902ccmr17456353e0c.20.1767622563369; Mon, 05 Jan 2026 06:16:03 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:dd3b:c635:dd06:9574]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea1aef7sm100774703f8f.7.2026.01.05.06.16.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 Jan 2026 06:16:02 -0800 (PST) From: Bartosz Golaszewski Date: Mon, 05 Jan 2026 15:15:20 +0100 Subject: [PATCH 01/15] 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: <20260105-reset-core-refactor-v1-1-ac443103498d@oss.qualcomm.com> References: <20260105-reset-core-refactor-v1-0-ac443103498d@oss.qualcomm.com> In-Reply-To: <20260105-reset-core-refactor-v1-0-ac443103498d@oss.qualcomm.com> To: Krzysztof Kozlowski , Philipp Zabel Cc: linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1633; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=uxegMP4ngfz6YTXW5vsipTEH39YjT5UqWwy6wlSpynw=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpW8eULIfHxTd1csJI9/EglgTdGdj5vX9iELAIU b4fi/r0OQeJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaVvHlAAKCRAFnS7L/zaE w4pvD/91ttTwXG+Aldpz9UzzlMeDwOd0Z5mCflfjCtJbdzT1nf2bDoOvvl7IXjSHbDqyevX4g0J yeCLfvLCp9gvb7DxBmxdN4nCnvFnZYT9J3wWfvqG0VoPccap4Gy45rgXLjZKvlIpwygDRrjM12X ahzwaER3OfVjfCaQMf7xK7oD/Nx77pAYMkS+mFAqktKZNPc5rPNio9PCczuoFYQ/A5EFQOEjX59 pWuh4w6M29z4mSV/PWec181fMFAA3zrrGO6f7QJd86AR3RwSbxldZPJgWJvmMBhX4zHRp0rfRlN ex6IgZ02NQCnR58d8zNNYoKTouD/xcyZNhAnUrY+DPM7r8fzN4Di86SZgTvT/QnAdSrfysV8IdS wSYTeVhfw3H1CCQ4EVNCOAiAokVYkPIfVuTcYo69VITWKK7NVKrAgcuCl2ZIfLJRW4ld1OGW0M9 t62EAg7MYla5KDkXpcj8dqDAJG/l723QpLsQ6AxipEma96LtAG2UnmJ4aa2wQfIJcdUrduXlkNn jmtN5974QD5zPxOGT5PGXn7oq47c55dSA1bAms5UWE59gaXYpnxU5iLSQMjQPB9z0WnG2V74STB z4ySShW8hCiyuvXN4bA1CRpcBBhi/3Z/mn6ej1RJ1fzPK4Xyr3o/I+tjkHUglVnFHLJbL31zQp0 q7ccFaqfbuOdsAg== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTA1MDEyNSBTYWx0ZWRfX6yepMVhLbNa+ vDcK+CouU/J+Tax0bHG9okF3Fj2Zwcwue0NheOXQkx5uJESdsVjSWjI2/EI95pOPDWWEQlg+HCW SEsYi8EqvChG3+iK4qbY8xQmcPXqnq795ZFhnFUmMb3jh7zouKjajrUzv5aaqQqAm/YOiSLzdVs sgeSL4WSa1fGniPD5sgwaFLuVjUWJIwIfUOUPZpH3pNv3XSCZEHZpKGfTqmct1oZLXsPDZ+ovVs RGRRjWHYm10BI8eG/Z70/2clzFM9xyTKwEOP7lZdLcizFslos8aQTGgcvoFTYG6CYZGYyetRCrH 97oU7i05/QAGZZ2B3YBvHYw6MyQxqtGg/yfPp0enYrrDxB5PtvuH4TAyYb5aQj+cxCbh9el1deU CJN5Q5biT3AGl8/oVuHDh6aaNoKP7nsorrCM0DJwjVWIFuHtcPNyu//bvuN2nqH6zQ4ynxoYLtn achbg/pAs92uzJ1mnHA== X-Proofpoint-ORIG-GUID: sGAJ7Qa6N71B5YbG86DpwjyY7BEV4PH8 X-Authority-Analysis: v=2.4 cv=c4ymgB9l c=1 sm=1 tr=0 ts=695bc7a4 cx=c_pps a=1Os3MKEOqt8YzSjcPV0cFA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=ygpbbqW4ee5_35vKHe4A:9 a=QEXdDO2ut3YA:10 a=hhpmQAJR8DioWGSBphRh:22 X-Proofpoint-GUID: sGAJ7Qa6N71B5YbG86DpwjyY7BEV4PH8 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-05_01,2026-01-05_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 suspectscore=0 adultscore=0 clxscore=1015 bulkscore=0 impostorscore=0 priorityscore=1501 phishscore=0 spamscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2601050125 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. Signed-off-by: Bartosz Golaszewski Reviewed-by: Philipp Zabel --- 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 e5512b3b596b5290af20e5fdd99a38f81e670d2b..003bad361b3d32560f931f6b922= 34de523f97cf7 100644 --- a/drivers/reset/reset-gpio.c +++ b/drivers/reset/reset-gpio.c @@ -56,18 +56,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; @@ -87,10 +81,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 Sun Feb 8 05:28:27 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 BF77717DFE7 for ; Mon, 5 Jan 2026 14:16:07 +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=1767622569; cv=none; b=LRXW/L9QuIRQGU3fFE+FpGKv6lDDbkoLvyJB0MQVnXG5qNbQWvvBtTnUnjJSIBqrFn5m/F493GkYYLFcRpf+pjFqNEFzV9akZ5978LpbD9f4xWCAv4Fw3idONZuTF//S3YxOMovUcmXrsQ2oXjJoyKQLw6Npo5OS1Ds+G6IuKUc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767622569; c=relaxed/simple; bh=xNW/rBF6v8gJiP8mr+QmeWgvap8QGFLJIXuErBmXIPk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=emUeu54eUAUKWH/180X1FKDbMhUM36cqiOSNMyJkpROU/oD+tKvf6mBIYSw5bsTMQO/uwXBCQ/gzDNjtJEAzT/09/vZHEBe/2t1zpRjVod9gmaeyFQqL5kh6R+Y8gZjwIBtLvEDw5v+Q4D83TO1Wl2xG2RuXNZMDu9MvQypkSkI= 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=O/vWWWfi; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=NmFpmLXG; 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="O/vWWWfi"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="NmFpmLXG" 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 6058LDv53684516 for ; Mon, 5 Jan 2026 14:16:07 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= Olhx4ltTdN32Pv6Wp/cHcKEI98UY9I/iwG2k5PztNvo=; b=O/vWWWfibxadwnGt uCOxh/AG9ueVjF/tUmSc6sIXFyLUmmNDe65MgQTzEtdYDwiZhQ5WePQ0aRh4uQlw FOnmi2P7hxEYoBOe1hY8VcjQk4eItb3SPVfoRmH7rwfjz2qqtJzRx3ONcBno2T/E 6yA55w8hoLZu86x4M1bGVkMht7GKYjplV0svU1wAA40bSmdwgcMfMdexIhDNEVGL KtcIKfnpKdAgmB6d2jdBK+6d4WXMdIurpKAcpQsRgbpTwoMiPISyQuXkAxhGDRbL plPEcZIT5G+rNlHjXoXdqwGtNU+OwzrwHP76YbTzDLDvvM1Vv4+MOnOjpG2/rD8g W3GSsw== Received: from mail-vk1-f197.google.com (mail-vk1-f197.google.com [209.85.221.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bet2qvwha-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 05 Jan 2026 14:16:06 +0000 (GMT) Received: by mail-vk1-f197.google.com with SMTP id 71dfb90a1353d-55b16794625so11398939e0c.2 for ; Mon, 05 Jan 2026 06:16:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767622565; x=1768227365; 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=Olhx4ltTdN32Pv6Wp/cHcKEI98UY9I/iwG2k5PztNvo=; b=NmFpmLXG0B+mhrwDZtZmEmNZ8/xQ/tWSfnQqQoZlzD+3TN9T+Ut7b7BSl+gz2sxbs3 vKt7+5YTDpYdcWzen8omlyZp4uni/mn21WLnqmtjo72h80fzPPQIhQRzT0cDSybX0T/H mNFMrfifiKbhrRJBUngseN+5X+57nGD1AwH5vpBN3m3nVLiu4vLg+5XrwoIdJNjcsXXE CiFmTYMilfhtWoXCGZ4rB95pPR4tRsRjbgdHzuProA7KO2mXXA3GxLgKPbXZ00nout/p lxV+SxOi7H7bJEEQcNAXiMMAXn9wzN06Yele2QrtkNWcykRt6ERzIJJ997sZRdAz1RyR BvZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767622565; x=1768227365; 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=Olhx4ltTdN32Pv6Wp/cHcKEI98UY9I/iwG2k5PztNvo=; b=VqTTOTuxVAD66IvZgOZghDn3QjxHxfdmVLAVJVvjdMGXyiQOgZphORII3yZ1YDfZEG 4xFcWyBVDjt7B5ErAupGFRg9XUoVvywvVHVj++nv1AjbMP7opqV40djZke2rFSV6kO4G +wOKg6TgQ/9KMwoQ3N74J3/vnbtYZhPmyR10Ypg3wrcVwYhTWGHBwTaJY82kvIYdAxVT zd3kqjzTN8aQVPbaXouErMtSwcpcif1bTLqvt6LZjXpYkS84U9VI7QNPLiAoq9BVHXE8 8y27V/lVezfpu5KJt4ei71UzF+L2hHbW8HkZUxYONpVgXUa4RHQTuC6Gp3rcQGYRvYLX 4z5w== X-Gm-Message-State: AOJu0YyYcZg/zdj6y2DP8yaiYOs2DtiM1kntJrVsx6iGu+8ZAJZYEWEH P4CpfYnGM/s8jetsGyI0vhQ4SY7hsxZI2LPdF14oxINuZV9W4Th33xJiB0QqDd6dtgSGUR8jJkq NCymCJ4R2Bfv+Znt9JAtHqUaHc9lmdXuLtyF2Znv4Pza+KKrOXohuGOi2WASPgQpeaBs= X-Gm-Gg: AY/fxX5I3mqCrFlOfVKT9feyCmBF78YSgJqhxNHFemPoGuH9AvRPgupRb8W/D+8Xbmw bYwEv27Zp7WbpFhQrAqgAWCrquRg4w0Gm+WRpMK82LaFG3Hx+LCOh0oR+FwPXW/BxIv7g2WiTDo qiucrztWKlPwLCNp7Dlo8vQ2xbBYaELMmj/nB0rWBaCbm8kY0ZmyohX3q2aRdFhH9UXHYnjz/Zo T8wddX6912lPTRbRUPs2r5PmbJfxgzWloGeToZNi2rcQdkLh4lIs3X8BclLWeZbhE4+X649WNf8 z6ZWMOcvMo0zXC/5En8sF677emcwFrbRJ171+WNVoL1tY9pR4yXYymb8y7eDzXsyJytTdH0VFDy 6JHwiW/IDfxwO3nIs3RruWOY4OFacO/LxulZ5aPg= X-Received: by 2002:a05:6122:2a42:b0:559:5ef5:b196 with SMTP id 71dfb90a1353d-5615be937d8mr13192401e0c.13.1767622565306; Mon, 05 Jan 2026 06:16:05 -0800 (PST) X-Google-Smtp-Source: AGHT+IGGDHzD04KGWG7AVS+mYE+sUgh5bn28HPYsc2WBrfY1vSImZAsiSYgP968/bEv4zuBgqABw+g== X-Received: by 2002:a05:6122:2a42:b0:559:5ef5:b196 with SMTP id 71dfb90a1353d-5615be937d8mr13192361e0c.13.1767622564668; Mon, 05 Jan 2026 06:16:04 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:dd3b:c635:dd06:9574]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea1aef7sm100774703f8f.7.2026.01.05.06.16.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 Jan 2026 06:16:04 -0800 (PST) From: Bartosz Golaszewski Date: Mon, 05 Jan 2026 15:15:21 +0100 Subject: [PATCH 02/15] 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: <20260105-reset-core-refactor-v1-2-ac443103498d@oss.qualcomm.com> References: <20260105-reset-core-refactor-v1-0-ac443103498d@oss.qualcomm.com> In-Reply-To: <20260105-reset-core-refactor-v1-0-ac443103498d@oss.qualcomm.com> To: Krzysztof Kozlowski , Philipp Zabel Cc: linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6008; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=xNW/rBF6v8gJiP8mr+QmeWgvap8QGFLJIXuErBmXIPk=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpW8eVM/1n5hIT0L8Y5B3wTM+kKYgudSwEoB1s9 fxlWGGUAgmJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaVvHlQAKCRAFnS7L/zaE wzpZD/40DcijlhGmP2k//1WfcaMMgDQrRql9V0Dd6DrQW077bVBtberYUgMNGDCjoHtgqX6VZEg JwH0d9ImJ6UxPYCTpj6foiaIgbWjR7xzks2qdzN1tREnlW5wW0V235cgOATw7hcHLu2f+8g31h3 0sXkb3N+DYOVZ+FxgNCxdqcMWPVY2qh9EenQzihiCvQnzaGMMJwfkM/yJdX8JdXzDBkGpfvhWwn rZT104XQ5DZTQU/GjHEZ8SbkoPAm+DXXheRgn8bRuC+MMHY+b3qpcPP+JeWHT6CeuzBAqz+EHip IdwdfUjrupqiZW4DGv3AWL592cJsgF1gbx8/SgfDQ67Xy4hr05f6TH+LhL75QwfrWipP5Tj16mm ykUxGVelb3k3VWTKxqQtQKUJacBg3MNIBtD+6OxaKTulZ8IOlCOqW08/uRxFx+TDh7CYVwzhANF H7f6810eNb30W9vNRHzRG+yegfaus7xoXHwWG58QxzAPhfBg0A9zLBDpF8zWWojbdW5GxOJQnFM wLp+Qi+pFNOBRQL81MDTPLFkWusWSoQCL9ucyMpfdrMuYhwsfBbcOyVcmHq2pLo2C7sxa6oeL/n /FfoDPsW2ZpN97inWn9z5IX+hBiNNYYjxJwuCSsAlOLkHCcl7Q9FeOUl/5laBPyYwCZYuo8YTJG 83ONx/SL/kwar5g== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-GUID: nlSsJy7sgWvzI1OOogngfTfJwA3ys8Wn X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTA1MDEyNSBTYWx0ZWRfX0TYxipcLgzGn qEYkNX/eexakFI/8wveHjlOHJjoN2vZcYapeZBN0V//L6VEpmhAOe/n1FjYdbnxVqLt2jaxT1Gv vjM6gUbPlMe2h6GkyMGP8ombFwG6/94n2gFBX6M4f2WyAdSN/TOYsKrh8BEcTq5iq7TAEM6a/Yn 8GNlXWCCiz/ZuC6yfHYM12whdk3UV/VmCnIamlDsdm+KyS5OsjcQI2QUnC9lVNVfDTyqZ+mioyl 7RIx4HLMwFZ6BCpTQrw0R0mfrIxPnIEBs1uNeumagmvhFDtzt1je0IstZtdLzgQDlEJsmHfRTLh E0/c1Fca6Pg9EsFBYoX0olljav0jo3q67n3f9jjGO4pTubgoDiSVGo09izfz8+wqBX1ve5Wb/fX vGv92t15l+HCZDj10iZEYbwVW2P1EQVRDwdglNr5U7G2p9Q3n5z6a+wlJeKjKdYz8kSqyEBDlHl sXnfQURDLQzr0diKHtA== X-Authority-Analysis: v=2.4 cv=RKK+3oi+ c=1 sm=1 tr=0 ts=695bc7a6 cx=c_pps a=JIY1xp/sjQ9K5JH4t62bdg==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=gl4R_IGdbvU1KyCt79YA:9 a=QEXdDO2ut3YA:10 a=tNoRWFLymzeba-QzToBc:22 X-Proofpoint-ORIG-GUID: nlSsJy7sgWvzI1OOogngfTfJwA3ys8Wn X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-05_01,2026-01-05_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 impostorscore=0 malwarescore=0 lowpriorityscore=0 priorityscore=1501 suspectscore=0 bulkscore=0 adultscore=0 clxscore=1015 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2601050125 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. Signed-off-by: Bartosz Golaszewski Reviewed-by: Philipp Zabel --- drivers/reset/core.c | 80 ++++++++++++++++++++++++++++++++++++------------= ---- 1 file changed, 56 insertions(+), 24 deletions(-) diff --git a/drivers/reset/core.c b/drivers/reset/core.c index 0666dfc41ca9af6fbf1768f17157b4faf7849962..813b85cb2758e129c72c09267a3= 87108d7ad683b 100644 --- a/drivers/reset/core.c +++ b/drivers/reset/core.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -77,11 +78,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 +827,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(sizeof(*adev), GFP_KERNEL); - 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 +942,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 +983,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 +1067,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 Sun Feb 8 05:28:27 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 4C35A1A9FA4 for ; Mon, 5 Jan 2026 14:16:11 +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=1767622573; cv=none; b=HEComqQmN/LwqBEYW0FdzHUVP6Qx3FGVgGvIqGXAZbOh8wHo4EJFqamj36pXguZ88VaunShqSGqyAyOFfdGwWApFbUcd2tYW1k5Ry1UUxv4nMwxjJq9cEshWygwZ5ju2ecZokZoOFPTNwJO3ekyzDJY7u06hjMPHW+61rkzlG8Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767622573; c=relaxed/simple; bh=CIWIlhQTdDJfk5s1NJ9/r7kHyl8e+xZMsksyBGoT2rk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GOASdXbVZXjpPAXtJo6r9nwgIuxQHjFvKNjtUMqhs4mScsgOfUCIA0mQ7ATZ4Vl8mviZsB3MMsRIdCfe1ip9QspWq6FInyBmSoKCPleCVy8O+WWW87Hi99UjNeHmbmO4/xkWaSqBeeboDhZCWQGFsr0EbPT69XOXpECDy8iE2Es= 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=jWIh1ASf; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=L3P4prDB; 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="jWIh1ASf"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="L3P4prDB" 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 6058wAce594030 for ; Mon, 5 Jan 2026 14:16:10 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= YGSpZglEHDg6NBayxPb2gxDkXgHKuQV0Nu+rmaLJWIE=; b=jWIh1ASfUk7urUa4 kHeY948tPAPH0pGam1dgRmO892f5uMsnSN0dijHRBkRt4FHzZzmmfFLa7uVDkdch pKMnUxdW769s7gYAax4xFG6s+uQIzHAzgNZ78KBsAmGEtetkyerQvXGBsy//eUDJ AwS++T9q6ZraZSG/xZLtMO3e8PgeQRh0OXa6+TwPekYhKd/I/J2nvPF2Ljt/KmKe E8YA5wu/vLnpcUKL6dBf7WUNwAu8kH0Q0VE9BuTukfbJ1YIO5j1J11WtfLwHMrs1 FXvP3fRgl8JViatoouwDE+SU0e7pxVvWrFMwLzGVSbKN21sMXZl85NABVyTP+Zq5 cCy+Og== Received: from mail-ua1-f71.google.com (mail-ua1-f71.google.com [209.85.222.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bga8pgt88-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 05 Jan 2026 14:16:10 +0000 (GMT) Received: by mail-ua1-f71.google.com with SMTP id a1e0cc1a2514c-93f57cdeb11so17121393241.0 for ; Mon, 05 Jan 2026 06:16:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767622569; x=1768227369; 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=YGSpZglEHDg6NBayxPb2gxDkXgHKuQV0Nu+rmaLJWIE=; b=L3P4prDBXuznt2wQv/Vp4JvsxQEshKVUxSpTzAlFYx4uxdzCbX13U8JHhu2uZDgQSR hrj+UgBnX3RJm68Zy/aUZA8nEGaGpmlZ6rIUErlQghsisrxB4a3ePeRCaJDq4vRgH5r5 /FXxRzbY3tQYo9fjQt3tdzfiIPy60eqOqLBstI9jKNOq2dfeE9p+zvsKc6FsztC3RPfh 1fVIEkv5F4BBPnXZSgwDNHOC/Ze710BLmWfoKLkfhIOdGZAmaYAZxZKHgsiL+7qN0A+t TrCwq8RTEMHEC9p4nWtvPq5YXVAlSo30KZBlhB8KwzAsaD+2PY0ka2RYEJhhI9F5uBtZ zA4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767622569; x=1768227369; 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=YGSpZglEHDg6NBayxPb2gxDkXgHKuQV0Nu+rmaLJWIE=; b=mGnlnRUAcy3ohtuUpST+22FHFIjUcPu4Z4DD3W93cWWIPFgB2DjYzn+BsfvvFBKtCS XEcxdVWJhF88zCA/+ajX3qaUN4G6T3ZRYPgDcGRoDMJ1PWsshrVlLMPSbnstvIkEEx93 3KyIsgYgGAbXDo5xnI5oMO2Lm3MD2X1dqaSeA4lTQOfB8PGzo99EqEG1MrSQCWhhyByq OYTU8ZNcdvSgEUhb7hLhDCNcAgzLVdpdurNE2qFOWJQPQvUpbXDxO7E52FLQOEUI6zBf UkCPywB0y9U4u+c3qcNJNvqZUhJVZRfMhI0xpgj+V308RStFt8/EYnDFvvEv70zDGq8v 16/A== X-Gm-Message-State: AOJu0Ywi1C4jfuQ6F8HRzENr2Fx7yOe+8iPTPWOVbw0zTtJjIWVriG7X hMi80cj06cjuRDSAQxDqerdcMktOFTFU8JYs0BibJHB+oL/iw/8s4Kujww4H8oY/tMduohRTJTk JyxtD4mXIjO9Dj/UTzskdUnUqjlQwxt2khuKNkLo5IKcS8Ph/vKdX0/MBjY/Hida5Mu0= X-Gm-Gg: AY/fxX542ylmy3q33HtLP/fcYvyrbRTegY9cXwf/h3cObQE5N9EvFREoBJy2K+xpY0P o4/sZLPTvFYflI5nu3ANUs5A9kUq9RUNN0XMDTagh1+5c+HTaBYV1VADVmJQVH1qGA0iYH4Lw5C GNCU+AXFXLalJzHLpYFlileLmHgFwNoOv+i8rg6WNKBu1pUuM7vdwgcEdLT1X0PDR5TODQs1wMV 5jrEBTrbUTCN4+GcH4mUtwHvMYd372XnHOxHhiTGRDR6Eh83KQsymKuQm8ipm47dUFW7QNOUYpn jfRgbqOmXklUY/YxazhQmdJVxCSngZr287UFJ2NsJ4Jg0N/mhDbemk51uQmmDg+VR+Vt45ywETX ENw1Z6GPmSi6728t6g0vsSpJCOT2i7Hyz9KdtinI= X-Received: by 2002:a05:6122:a04:b0:55b:180f:fed6 with SMTP id 71dfb90a1353d-5615be677b9mr13542733e0c.13.1767622567808; Mon, 05 Jan 2026 06:16:07 -0800 (PST) X-Google-Smtp-Source: AGHT+IEzo9Srn/bhHXkmM8VEz3sg1ICtMcOe8VIPMnY4n9Al55d2Fw1eWb/b/SYUbe7eyD5pohLiYA== X-Received: by 2002:a05:6122:a04:b0:55b:180f:fed6 with SMTP id 71dfb90a1353d-5615be677b9mr13542640e0c.13.1767622565904; Mon, 05 Jan 2026 06:16:05 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:dd3b:c635:dd06:9574]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea1aef7sm100774703f8f.7.2026.01.05.06.16.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 Jan 2026 06:16:05 -0800 (PST) From: Bartosz Golaszewski Date: Mon, 05 Jan 2026 15:15:22 +0100 Subject: [PATCH 03/15] 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: <20260105-reset-core-refactor-v1-3-ac443103498d@oss.qualcomm.com> References: <20260105-reset-core-refactor-v1-0-ac443103498d@oss.qualcomm.com> In-Reply-To: <20260105-reset-core-refactor-v1-0-ac443103498d@oss.qualcomm.com> To: Krzysztof Kozlowski , Philipp Zabel Cc: linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4445; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=CIWIlhQTdDJfk5s1NJ9/r7kHyl8e+xZMsksyBGoT2rk=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpW8eWRHvuxZW9epZyWu+0MQkyMGu8ZHfE7rPa5 zYw9th+v/WJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaVvHlgAKCRAFnS7L/zaE wxfmD/wI6LfXvJ6bgC0izH2VW6SWyg+TlaUceLMc/wu1DUsPVdCJU7lUZhchtdruQ/yaR2ZMHGC zTQQiLegDhylhnWI4C3fvemCSFxpFOMTPbMqc3Gwy6D0DYTzLNnA1XZuHYQnUvPa22tvjkXPZwC KVDF6D/A+AF5ZJhs0zlqMbTvjuvsHggaXthRftrUl4vBoXD0SxHngJRq+bFsq9ImI5ckkrrli2T +Ur9pMlZr7VNgZmahLUkBDU2WI5M4sNicAlhyAoYm/FB8oh1G1okzHx1Na/xAjmjJ9pPR/56XBo oL+Ye7HZ7d8xGB0LqxWVy6XOVNTa/Qy2GGdO8qpn4qQYLdjI602F1ewIWrWkNMepoqBSyykkYSD HYUvDvNoB/yoDi6XizZ0hSGPaqKjkI8ar3CgESak8O4QRo7Mshu/6swHcvn7DNnZwseHb7GEqwT N2r8KN2SGhauSTqg1ObwP/0QPXIits+/LXig7xpCBk2XC7bD5xLr1GBchYfQqBYPrQgkH14cvHO oUJrwX8VD5s0dzxfVInk1WTDBd6cfg5N0WKt5vV2WuDGsaRxm/LxEsqxPnc1zNfjydaOIAqKuFE e3C8lnPKDBD96OcM4taBUcaVLSn5HFX3HWwr7zFRRP/f9EH2NrgWnJ4PJU6ADv7p4aUJLflhxpm 7C4L+GeaBWp5LoQ== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTA1MDEyNSBTYWx0ZWRfX4BPdgPOWbyZI RrnzNhxssQg7LdyOvGIUOwaVd066ISnDy1IECwCUoZwL85pHRjU5exZ/qmTYhagplw/xYt7GdEB zQiZZlwBcqDaYfVQLMHIuL0ddid7j786PFfS/CzoayS52eJyj1WtLEslwL1Hf2KmIJCKt6JbiXp ZdkgQagbxud4F7A+m53xxCTkEMCixj8/xol/aM1SPBi5v1W84952iaqyGF1DH3iX4BVFA8EkTak T47yAloKhcE1Uh05a65qu/+R1vgP57HvXSfq6is3ptMWGJwd6c8/IwvuwsBPiiQriixKDS1XApg PlK684sjcUp/6uJjfUrcI6+vq70tV2+SIhzl8UzUc0FlTyUe/nNA2ibzGdqziMCQsz8H2YPWG0+ Yjd7hizLhJ9fn5u8BTx/OonBwDJrSWTTDED5vUOJBHH0ADMGysf8yw3ETGSVbSn/HvJzHlZBS4o qYRE5fFXoTrBZuidPig== X-Authority-Analysis: v=2.4 cv=JfWxbEKV c=1 sm=1 tr=0 ts=695bc7aa cx=c_pps a=KB4UBwrhAZV1kjiGHFQexw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=C-6xm7Ge3zJZVfUZFQkA:9 a=QEXdDO2ut3YA:10 a=o1xkdb1NAhiiM49bd1HK:22 X-Proofpoint-ORIG-GUID: -HFSz0lsGDjh4gtFlCMWlqkZiCl6jk3a X-Proofpoint-GUID: -HFSz0lsGDjh4gtFlCMWlqkZiCl6jk3a X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-05_01,2026-01-05_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 adultscore=0 suspectscore=0 clxscore=1015 priorityscore=1501 malwarescore=0 lowpriorityscore=0 spamscore=0 impostorscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2601050125 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. Signed-off-by: Bartosz Golaszewski --- drivers/reset/core.c | 14 +++++--------- drivers/reset/reset-gpio.c | 5 ----- include/linux/reset-controller.h | 4 ---- 3 files changed, 5 insertions(+), 18 deletions(-) diff --git a/drivers/reset/core.c b/drivers/reset/core.c index 813b85cb2758e129c72c09267a387108d7ad683b..ec9e4c39e8debd93d59851cfe72= fcf44a79ed7e1 100644 --- a/drivers/reset/core.c +++ b/drivers/reset/core.c @@ -95,9 +95,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 @@ -126,9 +123,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; @@ -1007,13 +1001,15 @@ 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 && 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 003bad361b3d32560f931f6b92234de523f97cf7..100fa23b56eaa01d042101b11a8= 23196ae5ff113 100644 --- a/drivers/reset/reset-gpio.c +++ b/drivers/reset/reset-gpio.c @@ -60,12 +60,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; @@ -80,7 +76,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 Sun Feb 8 05:28:27 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 07EC318787A for ; Mon, 5 Jan 2026 14:16:10 +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=1767622572; cv=none; b=YC41Ki6INCakBSseNb/CrKgzYIbRJ/6X8Km27tqB2lb6V2G6JhVJUCBzeCgWlIrbbf6fN94FeaWBWbP4d+UJlYpM7pxqxGquUf0609r+11XHr1W1T3oXhAztI5eUst+GniakPkVew6X9iQu4P4nVFvo9tUDYu49crHeIXlIR0e0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767622572; c=relaxed/simple; bh=8KjQ2L38dTR/cfFtt3xaHdE1GrBXGjgUWJC4aS5lnZ8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SIQyS22+DDg3RRCufHHQ8I6mXHrBNK5gl6aoersmlY+yoFhmD0V7Yyb2yBlwZKWA9s/sjkBOX+d8u7LtSQbi3WcjYp452g7s4gd+EKC8sFAHN7379nWNn8SbBPdEqHyeNBr3ppHDAsJaWttG5AXgEp51HbwFKkRB/nyekFyepak= 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=Wn9ZgtlQ; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=I70iu9kS; 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="Wn9ZgtlQ"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="I70iu9kS" 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 605BP7L83521074 for ; Mon, 5 Jan 2026 14:16:09 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= YEptkgyN592XYGIT3VZ8kiCx4dtH3Zw85dBEVIM3K4w=; b=Wn9ZgtlQ6pjSxFL4 vTiXmKKAu4ghOK8lh7VOtXOtSp/yerwAl8S/w8QmXF6qyK/R+fB3wUMi5M+Yi3Tz fYcpmhPixobJHkeyqe2YyDKxeopgX6Qu22O+L4uJnFRa5n6R9hRW6kIi7KhOr8wb csiOxoIcxr3qDsweCh5yJiZU5UYlIiGDvyWmQKa886RzAzcJJihUOhCpwFtdETT1 YiBUmhlrdThhAdEL6wvuQO0Ae5u2Gzpw/fEPznJeC7TlUZl9fYMfciIvKItYwWMU naBmsYBB2eKP6eta5jBEMENh9tV4Q9T4PzWHYDLdfr65IfWyBvlj5i1yY+O6tQzD PEqwdA== Received: from mail-vk1-f199.google.com (mail-vk1-f199.google.com [209.85.221.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bg6uu9g90-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 05 Jan 2026 14:16:09 +0000 (GMT) Received: by mail-vk1-f199.google.com with SMTP id 71dfb90a1353d-55995c43832so31389033e0c.3 for ; Mon, 05 Jan 2026 06:16:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767622569; x=1768227369; 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=YEptkgyN592XYGIT3VZ8kiCx4dtH3Zw85dBEVIM3K4w=; b=I70iu9kSpHupAgFetDxnTA5zRaIjH/u/xru5YcrCbO78uZRtdPVKZnw7zQEQg0hy93 v0sxxsrTZfUOxEBQWP4G3n1fLOTDM2BXTuDSNoo0RsGMCZuuOULZKl5X90aoEi/q17Wo ohR0qABizvbMBAj6oYQTNw3SdhD+ryjojtE3ZVNQI+E6Q7IbHkE9akB7lmpkFiUN9rJN +l2K34O9ZGWRNNPtsuN2adj6jqpRj/Cw9VzrL5fLaYCP3PzfzfKnSM95BYmTYZx4Hdl+ j7W1lN5A465A3GBolefxc7e0ZYYrQldzekyXBNl9T8vqWNKEJe5Sbf01Rm3DoN4xeOv9 FUHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767622569; x=1768227369; 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=YEptkgyN592XYGIT3VZ8kiCx4dtH3Zw85dBEVIM3K4w=; b=hr0Ik1Yojt92y3hUB9yzt2nBzCjUHOiXSuWc9o1AKt5zwSgsAYIJy4fBK/q8PXEf2R l1hYmW6rRxhZe6QGVnrdZMzwnb5QuvEgC35JfXqhmxHFqXOg76EQ1ez2/e2ThM6RCZog yQQs5hp8lloBxC9Q5iqfmoosZrHRzIoERcXLpH/ziMKparoF/+06wi5SYR238bx9rOmP H1ilQNcsdRanhs6F3zS1yVCWeHdujopWdHCPk/d7TwkjoviMASpTuzRjOPwHdFaIe6Hn DxO6KRQjBbCGfa/cmOHhyZuuJQTSKhPXHe4oUFQ2wOpCBg98/E8N10dN5zYgX7iZFkIO izuw== X-Gm-Message-State: AOJu0Yw4pL4zyjxi6ylQuEQcT880zTn5qFOamQvYL3YomYO8TMIVr7Pp j3GiUGQomv1FjLQwymPaxaR0fgwF8wgqwXdnr/bOtuk3I1usR1nzcz7JLYaizKKUitNGF01pQPq NcnM2FLGzblj2uklekW7v23DB8NripiPU0BEUIT4niE5XBkFIrLPqe4gT9x7r9Gw+Xt4= X-Gm-Gg: AY/fxX6n4yjy3FxZl6L/SKBdWoL+TirWEOOUNMB1Xjiz5SIbWChBRj+1x4xGtTs+puj gGWNVkuzSiWbOCsQaR5tT1bMtYvhtcLmpN72VrT6mA1rEqhak6BhV7gLIUBQrAigGk0WPTISYYf 4EQPOVtCOjSQ+oaj0tfm4ZcnsiNkwvac0C4VkjVJqtDwP/kj+fSDbFXCfQnYWuSga2hKhLHcv7i 5OOifykUsZR1tmCXaYOlB5FKPuGciHw/Sql9C3tsHOzqirAkubVMNKxGa9xxba+hRQtBONvB66I doGuZKskMshjQgu0G1WNgHRAcaDPzoq/JLqAJBTd+qy+TMPYHJNJ2K1gVulj2JakMN2NUFI+GEE tCIt2da/TIi//tdby8447cSDqbt5qP8HqsnZaq48= X-Received: by 2002:a05:6122:2a44:b0:557:cbc5:ce0f with SMTP id 71dfb90a1353d-5615bdc15f6mr15889342e0c.8.1767622569063; Mon, 05 Jan 2026 06:16:09 -0800 (PST) X-Google-Smtp-Source: AGHT+IH8FdZGjpUe+KurWU5fmYcopDcvh475MJMXip41aaIMH89ETLEL5lOL/6zZ5a5I0jQqfctKOw== X-Received: by 2002:a05:6122:2a44:b0:557:cbc5:ce0f with SMTP id 71dfb90a1353d-5615bdc15f6mr15889257e0c.8.1767622567113; Mon, 05 Jan 2026 06:16:07 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:dd3b:c635:dd06:9574]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea1aef7sm100774703f8f.7.2026.01.05.06.16.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 Jan 2026 06:16:06 -0800 (PST) From: Bartosz Golaszewski Date: Mon, 05 Jan 2026 15:15:23 +0100 Subject: [PATCH 04/15] 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: <20260105-reset-core-refactor-v1-4-ac443103498d@oss.qualcomm.com> References: <20260105-reset-core-refactor-v1-0-ac443103498d@oss.qualcomm.com> In-Reply-To: <20260105-reset-core-refactor-v1-0-ac443103498d@oss.qualcomm.com> To: Krzysztof Kozlowski , Philipp Zabel Cc: linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=774; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=8KjQ2L38dTR/cfFtt3xaHdE1GrBXGjgUWJC4aS5lnZ8=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpW8eXXvSHOcRsbYCsPW6eKzWLDfVG09nhIVxc5 ugUbaAk5tWJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaVvHlwAKCRAFnS7L/zaE w5V1D/9W00jmtRgKcziRywkknLqRhUwGLFB4945bb7tTzRXs7OFg0NyTiAMx25lqmtocBHtXzxF UNfpXWLWAeRa/asjs8N9nPCrqtuy0afiS51AYiGKG/K/DkcXD16WsOA99mHULI6B95Vs2oHS5XZ xfsRjYG49arahSvvAudxwMwr+3JMXNFUkVqlfEm+O4/d4BedgIJW5iR8/oE65qkEVzzn1GShq16 vGZORtoT/Q4n/Cg+WeRZeDSdFWZ68giHRP5PMIFVICXBSLpDALwA3Vem3Je4SUB0l0RHuFVNkSN nxmnIKE6nGwAcrfv6NLOZxEPAMUFknF1daf8y/JJPvJcla+bg/XImVTDToCJGGd/Zj6Nkgqq5T9 mLESfl4IsPTgJ1c7IsoRE0fvldlweMZbgD+Uv8fobtidH12oJ5u4rp0xX4OjO7ZXgYKjdjJMcLL yhIXgZSLEsT9ABr6prnHKGJyHe62Rrlst/nQdamdMSzBZb8gRJvIgvYult39SPrlu0vE7QPLrVl sp5PsHKqNT7QTAL+nPhma81QuTW/na4e2hpIO4Hgaq91SGusxxw8jNqtuCo57Vywwn2wfmWV/uv qE6lzuBURfFkrS0w8+jgedJT1JvQgK+ufK7jQMhCdmTiVzRZjcg+XVrvJJ7gFDhPxuJOjbD/G8V t/k9weMICBtXgvg== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTA1MDEyNSBTYWx0ZWRfX4q1GeBbTE6xP TU19p+zQnqFhXUZj7BZj28XyMVwx+Rz5Ht43io1j7NgqlKiJeO84pZ7kiawr9Z/rTsT2/wrj4BQ LrpUezM3I6jPHinp+snuQh9i6tVtkt3RrMgrYiDp+dYFUcxrOPPTJKbbhV/rffXE6rNaxWk1ft8 x1RWUv8d78YlyuozZ7zKRU6ABJ7DG4OfF3Bq0TEE3zS1pmgJvWaxYuY2PgULnISSBWjr0dkuXdl VndYiG2yqsI6KEch/VVAGO30qDhtr47CvCxP7FgXQ0OzFVIP7mnHaEUC9cRCqXJo2nbU7JhuSKy YqtE+hrmRXaj+SGSStwzZZsxuYgvVUG6BQum2G2bgtZhYUeIBnbF9u3Kj0A0TmVwHu+JGeXJrhr LOk26PBfiaXepy0jWQU9uKMRXICPO3YsyLX8Jjozr4PVmp1nZ/yMyEpdBDBZDynCYOXln6YyZ7o 6oebPOjNlxthzYmcKCg== X-Authority-Analysis: v=2.4 cv=eZ8wvrEH c=1 sm=1 tr=0 ts=695bc7a9 cx=c_pps a=+D9SDfe9YZWTjADjLiQY5g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=X4VvQV0HAJngfktaq0kA:9 a=QEXdDO2ut3YA:10 a=vmgOmaN-Xu0dpDh8OwbV:22 X-Proofpoint-GUID: 0eFkjS1buYHRa0pxKVBTwXHct26TxmEQ X-Proofpoint-ORIG-GUID: 0eFkjS1buYHRa0pxKVBTwXHct26TxmEQ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-05_01,2026-01-05_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 adultscore=0 phishscore=0 clxscore=1015 impostorscore=0 suspectscore=0 lowpriorityscore=0 priorityscore=1501 spamscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2601050125 There's no user of the driver data so don't needlessly assign it. Signed-off-by: Bartosz Golaszewski Reviewed-by: Philipp Zabel --- 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 100fa23b56eaa01d042101b11a823196ae5ff113..6053a458b259f3876a14358cb47= 97bee8a2ee4de 100644 --- a/drivers/reset/reset-gpio.c +++ b/drivers/reset/reset-gpio.c @@ -66,8 +66,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 Sun Feb 8 05:28:27 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 D27F820125F for ; Mon, 5 Jan 2026 14:16:11 +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=1767622573; cv=none; b=Q6b9vLVHAT7bqRs1+KiAtDZkJ+Ku3xFk7217ODhnjwuPvqTAmfl4iBOrCFvtzsWIySmGs+BLhG7uQR5r4g1RKckLXWdB19v66yIHLEiOZm5QqzY8oFfvIoQJGc8v47SUEaRfg05y8t2jK8L/5wC9x9nWOf6aLOf+H+87aDWEzyc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767622573; c=relaxed/simple; bh=ii5VvN/49tr9CGb/Bk2nlrYIqDcoe1wavE5Vmbf9EBY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pfU3xcf/hcY+fa7eZWxpERdvd/ZHYuGYkVABSU33o0T5rvazNDWf3ISkae+xMcLBI/fDsksCYIolQIDex4HPK8hhrdmtJIzD/tWa38ng//Cn8aFYyTiSFCInp6bQ95IElwhwYN0AUKL1MM/XtrZsGwrG+fFx5eVkQ/V3HL+Iqxs= 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=j/QFnPQ4; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=gtfH4XWd; 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="j/QFnPQ4"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="gtfH4XWd" 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 60588TQP3796636 for ; Mon, 5 Jan 2026 14:16:11 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= XlLvX3a1+q9Y1g3vNLp0fgn/EcEet9dSqYsXlt0HG9Q=; b=j/QFnPQ4YpV/RvWv dhsz37N9dMNIaiLWJGFM26USTlUpW9RpxyH+SVQPNe+vtkOio+hE0KKB0koOhqr/ A9EMGrLfi7riz+VNd67HatRGp+ktQDGezW4uOV+6mKxsfnWzIkpSISbRoob2NVvR xAy9MtB5d2AVR3O9/4icEjNH1P/LfFrGAgcH1UjULYVEGnerbHkpMww8WHzWHoC9 M8hE/BGXte80HOcn68l7RHhTzS33UTCgoj9aG1+XbW97jhOQUmv0perVvhGxHi2G weC3IkjUcfKxRoOELDxXQxqllvZa0BW8RiGi7NzjT4yrj9legahd/Fp4BHfRZIN0 jyRf6w== Received: from mail-vk1-f199.google.com (mail-vk1-f199.google.com [209.85.221.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4beuvd4q1m-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 05 Jan 2026 14:16:10 +0000 (GMT) Received: by mail-vk1-f199.google.com with SMTP id 71dfb90a1353d-55fc4204d3cso39957431e0c.1 for ; Mon, 05 Jan 2026 06:16:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767622570; x=1768227370; 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=XlLvX3a1+q9Y1g3vNLp0fgn/EcEet9dSqYsXlt0HG9Q=; b=gtfH4XWdGTejiC4Wd/yApJd5gfO46tBSBaYEvEzlkD9a/HG02OFiZIrmY+dTtjwIWP PKS6smbbAFOx5I9qMfSNUldW/Ftscfn0L0ourfgY5YrZTxje9J9D4c95KDbBWe6bj2e9 s1ShQaeBzvHp0MmodVz2VBsNsmliVB9bKQWa5+cVVI/gOdQmMH4jIDf5ZneeS3tcGGU0 gzJX2Ue9x4KHlhHZYWgNnmSJhxixwoc1KcP+bTqJ2wxklf/+pmcqufxfm/M5RZbMq3jD p6TsqadZaVg3klw2iaONj2KfBh4JH517B5kE2DJ2hv3p7JwXu39PFpchDwIXZcfMJlaR h7BA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767622570; x=1768227370; 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=XlLvX3a1+q9Y1g3vNLp0fgn/EcEet9dSqYsXlt0HG9Q=; b=TQHyZOK6hePSpmz9OhicpNyEJEeqa1lwD42jp2z/OZJvuzdqZ/WZPwYTOutKJE4D1u 7pgq89DMflqRExn1UudLYTlgg7wocCwGEbMwJR7KPcaJmR/K4qPbXzuES/fgk+tY4C7o 3CHimh3z5P8KK48t5f/kOfzc+wXegk4FzVLtScEssWzND+Ky9rGwGW7ziwUVpwloMBoy F3ajqW8ORiriPv9Rt23Tvzo4epITk02yZY7UcL625cWOfHpwKBiCunn/bvAVdHaMktj4 SO6pqm4ocsYWCs1ZcQmr/o/u0M34XPToNSNbjSIt5LaDh8du2VRUMiA5Uuz1ZiMxahfH 713Q== X-Gm-Message-State: AOJu0Yy59zK5brmHKxK6cDlvantvOLlmPri5NR4X8ynLkhkfqKJY2mES tXuWvcCt+i+UFT+TlmwNIIYTHH81/ThG8kZOp/pEtma1upcKVPPJ6gD/1L+5U4fTTPVRqlDfKde XG2DwRWnq/wLhBol/2yfAuKmWNE+v9Y05QLz25inRa9opquHeUnFuxhSAWM/DpkDjkbs= X-Gm-Gg: AY/fxX6W5BPhcXU7Q0sS07lguqhBm79RudnutawbGvk5vp8NNwYlZAFh+egO9KYjQfY lLPldnsNLauaCLBYoLhLusr5VxBRQhfALOcXo6SOhCNoV9ee20E1RT73ysu/I0zA1f9gBePUIy1 M39DAb/C8oN+FjAh1kcLdOf0LWPbXYzGxu5kw8Te8zPpLbxL+vJ5NUOtKn0Jd4P/n90rBsabvNw /v+cazEuzFqkiqsD288bdr+0+7aZPj3EVixMeu17vw6pQkrug2N2M1EE4iKvukCmR+sdmSprMm4 ul1zOc/o8USGwmV9Mr8VRZ3eNNbfO/I1+xCnchL97vCOh1ToANH/ziiZD0sVVDbi2CXZiXKAzc8 80qfeLbm60X8Vy19Jmm4ucY8H05rkaRyqn65XLd4= X-Received: by 2002:a05:6122:46a0:b0:556:9cb9:65cd with SMTP id 71dfb90a1353d-5615bd04fe6mr17480059e0c.6.1767622568316; Mon, 05 Jan 2026 06:16:08 -0800 (PST) X-Google-Smtp-Source: AGHT+IEP+/Vi31Q4VsrCVXl7h54BauzLoM8Hr/fLCxrMcRyuIlhpTVuNqmwqWWRxx2dId9rEwFwOFA== X-Received: by 2002:a05:6122:46a0:b0:556:9cb9:65cd with SMTP id 71dfb90a1353d-5615bd04fe6mr17480038e0c.6.1767622567950; Mon, 05 Jan 2026 06:16:07 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:dd3b:c635:dd06:9574]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea1aef7sm100774703f8f.7.2026.01.05.06.16.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 Jan 2026 06:16:07 -0800 (PST) From: Bartosz Golaszewski Date: Mon, 05 Jan 2026 15:15:24 +0100 Subject: [PATCH 05/15] 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: <20260105-reset-core-refactor-v1-5-ac443103498d@oss.qualcomm.com> References: <20260105-reset-core-refactor-v1-0-ac443103498d@oss.qualcomm.com> In-Reply-To: <20260105-reset-core-refactor-v1-0-ac443103498d@oss.qualcomm.com> To: Krzysztof Kozlowski , Philipp Zabel Cc: linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1110; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=ii5VvN/49tr9CGb/Bk2nlrYIqDcoe1wavE5Vmbf9EBY=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpW8eYBVew2aPsXLm6jl+788bI9FQ/wFSPLcz2D BMNqpEfto2JAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaVvHmAAKCRAFnS7L/zaE w/53EACmsOKN26zEOLwmiZeAwcR/CWTQgOW2f3QqilJr0ZJI6Xh/7274xIXtWanDZi7CpLJLrlY F5va2XgmNT/zQ3Y0WggtSBhgv8BoUr1FZC5hNo5v2+CxOAVqAyuWVWsPozGRiNzrVFNXFjrradW ijjEqhWW/Qjj3xVe4RcCFFZstNSjMZdCHsaLYkbIrrER/ODNQiiJWsx/h6aeZcirRlJGQVSDWJ5 4SREWqU5ZR22cuaKuUHzlQPR3cEZPx19zZzd2TXFZQfi7IUAfMS5zusCjOYpMbvCg+balWMg+ua hf8ISGp2/hgZO/1TLrW32SeGYyadcHF6gHSvWqfXpGLYPohUdbjXmlEm9geJR/mh9yATxYzMpay 3VrfvR9PiORCD3CFbV/0M7mONg432R+zWwAS1TB0GGBeDxT1xCFweaBbXR4YUKSVx/80pmPiLPt UbgzDLMQZOtWtDM5ZFTL2luntQYBwY/HnZ92CUo1hy8heWENZp2HAGWW4zGRm5Q2g6frB3hCuRu ZzSJDfAHEZd7pC1/oGk8bhMDhL1DMguOlwS5MtdQP8aO30TwtL0myUDdzWuBYJu7aQ/mCWVOalK 7ovegaw0t7UX17jEwmKL3AQyJKfEl3H289Hw3yBKxl/rpkTuPF7a7PSC35zpVVsR1zf9LRhmkEV 3xr7OCvGQ7JFVMA== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-ORIG-GUID: uERehMrjuIWyswiMwOaWCcgeILCxLVmJ X-Proofpoint-GUID: uERehMrjuIWyswiMwOaWCcgeILCxLVmJ X-Authority-Analysis: v=2.4 cv=OuhCCi/t c=1 sm=1 tr=0 ts=695bc7aa cx=c_pps a=+D9SDfe9YZWTjADjLiQY5g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=PSwaGH99yfHkr9kmC4oA:9 a=QEXdDO2ut3YA:10 a=vmgOmaN-Xu0dpDh8OwbV:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTA1MDEyNSBTYWx0ZWRfX/OAoQkfkAhz1 r6pO9S9jZyl2sYsNq0CT+26AcPPdIvV5RbB57ZP88UjZp4I7DpU8KqE5pHXAbvpariWkf2VKphI TsPxjx2iwkaiHm+G1PvgOpfAFPTu/bqi1+Mu5DIFKCyI44VU7K3hP527Hh0nNbXlgMZ3Vw2pYIz 1tTsoOvPDgwkI/CfMzey6Xx6+JXTw6MRJyIgl2QUJTKBTktTJwXGT/ocSFMklzTyUtwgqlRysnA WiEO0LP7I+uHuzDWgHH0i/Vl3hpX5zauHy0nXhBVBuOKl0LQQP8gqIEKqB5H3M9ruyimmkQ14k/ l4jncCzG0HJcMBTvpbjEuzyX4b8S/QV1e3hmtQtHDvQuo4CsaYFdt4jzxKLoRpcAxicFNiPvRVg EC30RtFYcIgMlGjqJ+6F8BKGC2nuV/ApyOsJapUGiwpWltwCAKO1Z1ykvjCKVvYPzlpZd4Z0VCa MIw3R3YkChx5Ymxh+wg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-05_01,2026-01-05_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 clxscore=1015 impostorscore=0 spamscore=0 priorityscore=1501 lowpriorityscore=0 adultscore=0 suspectscore=0 bulkscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2601050125 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. 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 ec9e4c39e8debd93d59851cfe72fcf44a79ed7e1..e08056e0f67e86ca76ffd3c1951= c543a7e490a23 100644 --- a/drivers/reset/core.c +++ b/drivers/reset/core.c @@ -821,7 +821,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 Sun Feb 8 05:28:27 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 0EA8719CCFC for ; Mon, 5 Jan 2026 14:16:10 +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=1767622572; cv=none; b=Pw1Q0ND+zBT5Qnge9vqLzfe1sCsQTKJ33iScjitvSnVxmwNiodVjEU8g9WbQCHuFW+0Bp4rMzXAyWBudYRCXm88hcxcBzWsl+gZ+LwJLYlR/is/H1Bg83nE4neuzwZeCR93fXT4/EH9AZAWPO6IUOmzxHydIMAGCOFezZRo+MpQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767622572; c=relaxed/simple; bh=Kg9ksXZFQd+xZ1byCyuHlZAAV8BRvOwTScgwUWvy+bg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=heJ8PmhjLAynAzDPp9wOBbixY6xUeUBhaQ2o0kKoaFyZ6GmtUfV2pspRUWQCh+xA2psjZ+exAVoZ0hqqhsJf5zFcxJRmFypU3cMF+TfV+QWXk5Wn+QbT0YWIs1VH/VaECu/ICXwyeWdDQq+sa7shdl2mwGcIrOXw/KN7TFWZlLE= 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=ST1s4ga7; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=MpqzRN5s; 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="ST1s4ga7"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="MpqzRN5s" 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 6058Nlr11058794 for ; Mon, 5 Jan 2026 14:16:10 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= rC2w4egPB7MEzkPL+olONP9Ww1QL330+SZXANZAeLVY=; b=ST1s4ga7Z2swYaKO 82ab5/CjH7gN/1WqGYvegL6wJzyrnB79nZsfBZBp/FMwUCEx6UbNsz5xDrq3b+lh 1g7yIQOVZadzsGQmHU9gfVG4Mnlrq1TAlnsNELlFeCe/xahIb36eved227mVUtwo /797Oud5mBF/TA3PZbFCBvjNlwcGELUoYvfzwbAk24soschdt2HGY8wgDHW++B7X WZ6Wd6KF4C8NgR79VxkVhxMjm1ckwrBWSBUmDx1ogy9YOahE4TfSpGuS3YGIbTFM Uqy0//l0p+9Xwpju5WtUm3n30/Sxg2Eikm3Ei/Mlp1Yf43fdfK6iHtFiAEcjaHTo lNJrlw== Received: from mail-vk1-f197.google.com (mail-vk1-f197.google.com [209.85.221.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bev9hcnpm-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 05 Jan 2026 14:16:10 +0000 (GMT) Received: by mail-vk1-f197.google.com with SMTP id 71dfb90a1353d-559597c717dso30518583e0c.1 for ; Mon, 05 Jan 2026 06:16:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767622569; x=1768227369; 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=rC2w4egPB7MEzkPL+olONP9Ww1QL330+SZXANZAeLVY=; b=MpqzRN5s7E8ZwGlqAeofhYNaqcd1FwA5cwBBjdqYiq8MOu/c+Bxr7jNcDFQ8pdCKIZ SFn6+fQ05Lr6OoxV06PUh4R2jtQ+qjvw+j8+wW6+xCjqn/CN8CZXQFyPJNz8CLpruqsA 3umemk9o0S8BVO/2NdZ1QjqRNzZkI+JQU3RL2kpVKhGTCKLbHPuqq70cMqOEZP/TnMIA i5Wa+LhhWdN7lsosR0Oedg4LPqz/kVtJ2w1OedxKy3pAIhigKILoLgKt7SJ/P6bn9fHq 8HOVSkz5GVdEAVMrQdTNZveW9xPCJ9dlRrFOjliEZ+6FIeTfiddfnDzGIh+B/wjbAj6/ CBuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767622569; x=1768227369; 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=rC2w4egPB7MEzkPL+olONP9Ww1QL330+SZXANZAeLVY=; b=xIvyk31M5QxKjVt61mcy1fSnVkUKblZGg5XkgwM30iO4Zs83uHXKlxQ0D4buwHRjrw XH1siLE1I0iAyb3v+hTbnZH/1Uf0XMpxpZsE7x39ClmTD0wOK5eMdm7uMh/88y/XvAC+ 6T0FCQMJbYIAbB1aCdvRKpPvRzjwvN+S6gW9zJBGnyfkVeNU7L4I82hduGo4OAzaiv/J YDn/CBP/YT+nAKCGShTqOgpp1JE5GYJdNPDSc8t+hCH3JM5nycoAWx89O6SZw7uOzJYI nejy02oDOFhIueOPeR5hA9Z8s6q2j1hUE+CF8qMeysXZoVzlXZSSf141uqno4YqUZn2u euow== X-Gm-Message-State: AOJu0Yzq+pOjQ/bUDUcrFZe604MD0aVWgVin9jFLsW5/ekCCRzjGDlAj PZ9v75uj4JH1sTqLR6SH6VV8Yp6Sm4raTDQ/M5D8QEWyJXAxa8NT4gqbfA+/pqGJb6nSpDQkAwZ WNFR+jeoyi48nQWZmWXvtZ5h8fNUM3lZAIXKQ2EAmPh83Dr7IroVnkXyyQMKsiSJWZaQ= X-Gm-Gg: AY/fxX5qcVf7EzzQb7D2vAee9nMuIw4ABc/gWHBsXvrBc2zIj7UrCgug4/n1nAk/WsA w+lYog08EbLHbcCzSdzxZAsuYMncsaIAsFVUMbs9bhHlHI1F9S9LmF5xGJqTAPeuS4BC5MS3+kf MZ2qXe6C+u/vD1ErD7eRD4f4DhzPA9pYZw6e4wABmqZVhcviPkg+fBN6DxRqTM2pEmHGH2e8WHe mVXq/v3ryRu7Os6RwduPnuyCVdqrHALzjDv73lHhLeSvtYQk8JrFIoSFeyYzb+G+cgODNHxxlpM q8wvmvbcZcLxPiGYXyyuMboxhe8oDF8YLUJDgcdbU9/rU50js3FftUwLV5YygYL1bii8OWGXcLT rmzToxWo49XO0Qh2BYv976JcRSd+11MwbtVypm3c= X-Received: by 2002:a05:6122:a1b:b0:55b:14ec:6fb9 with SMTP id 71dfb90a1353d-5615be767d9mr14474539e0c.14.1767622569166; Mon, 05 Jan 2026 06:16:09 -0800 (PST) X-Google-Smtp-Source: AGHT+IENw6JlYhAnnEPi5lbM3pnTl9d/UCXCXxnTZMjO+KfCEA5elG9B2QYOlQOcS21PryrFgSyyOg== X-Received: by 2002:a05:6122:a1b:b0:55b:14ec:6fb9 with SMTP id 71dfb90a1353d-5615be767d9mr14474511e0c.14.1767622568786; Mon, 05 Jan 2026 06:16:08 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:dd3b:c635:dd06:9574]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea1aef7sm100774703f8f.7.2026.01.05.06.16.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 Jan 2026 06:16:08 -0800 (PST) From: Bartosz Golaszewski Date: Mon, 05 Jan 2026 15:15:25 +0100 Subject: [PATCH 06/15] 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: <20260105-reset-core-refactor-v1-6-ac443103498d@oss.qualcomm.com> References: <20260105-reset-core-refactor-v1-0-ac443103498d@oss.qualcomm.com> In-Reply-To: <20260105-reset-core-refactor-v1-0-ac443103498d@oss.qualcomm.com> To: Krzysztof Kozlowski , Philipp Zabel Cc: linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2942; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=Kg9ksXZFQd+xZ1byCyuHlZAAV8BRvOwTScgwUWvy+bg=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpW8eZZq/E9GQEk2trYCLf4xcy+uNhpibFdtfXu nUReFxM8CWJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaVvHmQAKCRAFnS7L/zaE w+5qD/9InjuRfLikdc9NErhUc51souxh9Ua8mccFxFCYUygfcuRl5ejoDMMAQ3VWU6onCPxcS8v wqj2ZPhRKFY4HC6N7jLLxFq2nWvbyrEDYbNfeiisOP1zBTRBwWOGyb52JhONO+ZvXFC7UgH3zjo Igd4dC6MJdF3dapxIglTfQsVgkRvYLPQlRlE6xXXQGPuxkHOTLZLU43ura1WuFB2fFdRWorlr+B 3qygVO43hKJj8FKmhL53nyz2pQFvtjWlNrIsB2RIvI4N9e1gcAPdLqfn6k+UXBuK0zEiVs3KhDT AiMF9hR2JM5BkMWmn6vU+wuEo4OsCnVIKlY+lRy+aHVJMEg2MdM28ifwm5WenZ3QB61qbEpWrM8 ZQsgGrdCVi7l1maeG1yaWY5q/MRtfm6AaZVfIw8Yt/qJKoYdCyq+KvWEzg4rl87+9TgYQm9bnlB 04hhSZpvRxHTh4rry2BCz13WBD7gxj53L4DVECL5ApTcvDVt3TvasppoBJDBhgTUitS4p/KLJmt dSCnTPAWrVwRKyVhHR3yGDXP5iY7pZCfyx9XKBIfBidX0VG2bg+jo7R+mC0zHS7irvLjhrdQ4HE M9cE9w9GZeXtjsBz9biRHzgUvdHm6E04NU52Kn5bFStBeBkS0kNcGV+k6haLqUOE/cszWWMh6rO ufOMI9CubLCqjBA== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTA1MDEyNSBTYWx0ZWRfX1ksS4XZ0NDVY narvK2/HMlUidqbZ62tbn6mr+4RL1Bm/U2M6uMkyaWkVMOtwjd1H7NROku19mSyqIMtX11mGx7y OrPYpfPHv/GPZWZwA/NRn0NYZOjVLnqZIIPZg14WYQmi1vBsRPWwHwiEkBh44BIbThVyR9qToSf 6NCdhDA2IMp5UgDk97RAIsIgXxVHgQR21IyquJhQQd3PtzqTSIbrm/gZegdtLo+YpTmdSdFnAuM fhve1DJge5U7Q9zCBRenNfCFmllrEHwDhTp2kjkL/eB5hJ+THVkJ9pHHP+XrffGcTZFBR08R7Um U91lwot8iASo5jDrFwxvoyyxjrKf39RBlrLzSS9njkrC9YxoPSOUSgpOiRBDsiSyOl5r0w8kfyh X/X/0nEihc0VbZV0wU9tNaee+cU4PWJF5wTsTrSZnzB/rjD3ZTmIdSs+aJlVji2kQKJTDnHsi4H nmmK1D5Dozz0DMi8imw== X-Proofpoint-GUID: 1ZcYiUCbd7Ky6dote2F01cjiLIOPdZsM X-Authority-Analysis: v=2.4 cv=RrbI7SmK c=1 sm=1 tr=0 ts=695bc7aa cx=c_pps a=JIY1xp/sjQ9K5JH4t62bdg==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=HM6bUx3eE857ULQHB2EA:9 a=QEXdDO2ut3YA:10 a=tNoRWFLymzeba-QzToBc:22 X-Proofpoint-ORIG-GUID: 1ZcYiUCbd7Ky6dote2F01cjiLIOPdZsM X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-05_01,2026-01-05_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 clxscore=1015 spamscore=0 impostorscore=0 malwarescore=0 suspectscore=0 adultscore=0 priorityscore=1501 bulkscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2601050125 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 --- 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 e08056e0f67e86ca76ffd3c1951c543a7e490a23..39bedf990223212998fa8ed4cda= 517529f94ee23 100644 --- a/drivers/reset/core.c +++ b/drivers/reset/core.c @@ -825,10 +825,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"; @@ -838,12 +842,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 @@ -892,7 +899,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: @@ -952,16 +959,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(sizeof(*rgpio_dev), GFP_KERNEL); - if (!rgpio_dev) { - ret =3D -ENOMEM; - goto err_ida_free; - } + if (!rgpio_dev) + return -ENOMEM; =20 rgpio_dev->of_args =3D *args; /* @@ -977,7 +978,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 @@ -991,8 +992,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 Sun Feb 8 05:28:27 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 B54F72749DF for ; Mon, 5 Jan 2026 14:16:12 +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=1767622574; cv=none; b=tvRajcP3nWgZ7naxbS2M8/n0lMBUilVKBKoYVdZyZfSVMu170p1MGUkvkbX11qGBpUUelFWdW0XR1h0bMwsmLW5RYJU7n4PyA7mSRPJ8V/YFtwObBM1fHqH0rml8KNvD0VvETHU518bGXBydcWVdSTM/rtXWRqZvXJbfkbd8i24= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767622574; c=relaxed/simple; bh=BrQ/21QZGDQuN7dhDoEHw0H247zcTWTkSd6dSJl8JUE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=k4tO3ktMU0btpx5jwllb2Vh4mH5y9LTrjYmZQH1x8A511mPYyPFQHtrmkv4y+POGSDg08qTY4ljPYKZBPr7DUs8flzMiNQiHwbzsu/GmwB1V2BU6ybI1q3APKhi5uHRDSabNeW7n/DTZyR95DuL6gywXBw+aIPMlOyz4lDh422A= 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=epw1MGiJ; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=HdGP6Uzk; 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="epw1MGiJ"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="HdGP6Uzk" 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 6058KrAt3655686 for ; Mon, 5 Jan 2026 14:16:11 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= 4UGXyFsEyFi5eKZbXvn6VtZJa+dbc0di1+5ox9ledZM=; b=epw1MGiJuBGgpBTs iFuO86EAR184/9H6YY2N790yhzXDc+XkPvJ5XIRGnwiAjmaCLE8LlM0WWuVDKMGz L7ugaKOfsJ+taVkEgaP6HcXZiV1G0rkSfxnTVv9LNehuqFLKZ42atRJqpwxIZ7Ff NT64/rYYZw5bSBxMDoJSOocT+B2C+NHTgDgkYjvBADGL3m6QGpV08Yst3nBCtojw 1Tidnjn78XtPwkResugWPDQn+DWALGvvq9yKAT+ifH54E2X8k0cdczEJGkvKZyHO PtVJ3j591rzhWMY/RnAl6wf9BoAHbACP46m9QLBLesUPndXXlfmoyvSHBFBHGNyE ZJJUEg== Received: from mail-vs1-f71.google.com (mail-vs1-f71.google.com [209.85.217.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bet2qvwhj-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 05 Jan 2026 14:16:11 +0000 (GMT) Received: by mail-vs1-f71.google.com with SMTP id ada2fe7eead31-5dfc0924912so13626404137.0 for ; Mon, 05 Jan 2026 06:16:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767622570; x=1768227370; 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=4UGXyFsEyFi5eKZbXvn6VtZJa+dbc0di1+5ox9ledZM=; b=HdGP6Uzkc9ToP8ftqTSRu9eP6ebBVdV866V/PeMObl6wpTUJtenHGsJy3LfSg4gTCV xv5eRwt6UDz4nP2+0lZZrrHln700uobr9CQU/W1TKb1d442kFrYVhHnc8Kkmp3BglLKa tvakT57syApjylxHG9VW9DYDFwXpicnjXVwUbVLoBbzK6Z/rcT9NFwbHrKY7FYQpGg1v RE2e4fTSilklgIcbGEwMzEciMupy7q8WZvn9TSXXrmOa8coDGLJSPzZyCb7O2O08Ux3X bFnymaKVpKFJphQ1TQDAUgL/XLo1RoTc9LvtpIApugbxFJC+sfGDWqB8dqlNd7YQ9enS BzbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767622570; x=1768227370; 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=4UGXyFsEyFi5eKZbXvn6VtZJa+dbc0di1+5ox9ledZM=; b=qzrDmtHEAmkgllqejyzVlhk0iq3rFoS+MOM2CKN8P3y85p4mJ4UJ9fKQGNe/NCz5DN rvIaLlXqv0stDp9TGbEcYCptKIX6aOf6YqGEiZPNiHKVOTlzvqH7viEfy+uq8Ttz4oF0 wALGL0X/uR4i/i1rHyA3yFi3xOVQWU0q9+b5kmUTVXTKHwaSh9Q+rgjSvHUEXuzkmM1N hKwm0jvQEKWo5zbw0Wvx05OZf2ScAsh/+SPs/1ZaZ1uBUJQpDJE60Pvj2dD3L69DluV3 J2kzXjeaqgUBaVL8s/dQqaIrjBhoCw27DuA96ArDOejPgva4X0BdTz+YsjHeEtXBNDCG u8KQ== X-Gm-Message-State: AOJu0YyjVZsyOK2qV64A46yU7XZ9Ruv0PNOP2KhZg2PABgDT9s87A+TA sCaVFPTlHcP58uItjX6/IVvpuZB6w0G93n4Lbf2kZ4NBbzNz7QDPfWNWEuP/oYagMDyRDUTkTEl WkRcW97VqshMhv/HWJQS7KYQthsjbjy9cmERX5M2gl0wxr5uB/b71yuto+oec7PCJuaisgv/bm9 I= X-Gm-Gg: AY/fxX5AAh6ReffQfSi4+SsXhylYetBmtJUz49ZUZGQyFo2MfPESAK0eYAoqXCP7B9m LDFngAwMcCxKP1olaIhuYVvw6leC8ZuHcyrfmdDE435DUiC+X/eo0ThZU/lx7GWNoXa2RDLko7w z3kbSg7MrOHxlM0Z+IV3vI64S6plzau1BYiCVqNsT+k3SesIV1Jz+rgrj/1Rv7qPpLrVKDxRPFY NVbrK6UPmhyuas8vR8ppkUI2DXwvhVwF8bWg7fzfOZkidFKJTaE53It+aHcEBKTn4Up5NVeVSkZ HWz+TbMTJlIgRSRtXP6+Mhw8XPZm5wftIGlkY2aNCq9o4JdmbMzpdDoX9T8khmEYk6Pa6vfdOVy TGtsxYmioIxLgiSOoI1d/Ij68iVPUSvCUhd2/uIc= X-Received: by 2002:a05:6102:5114:b0:5dd:f9c2:5533 with SMTP id ada2fe7eead31-5eb1a802900mr13801607137.30.1767622570464; Mon, 05 Jan 2026 06:16:10 -0800 (PST) X-Google-Smtp-Source: AGHT+IFj2GidG4tnd/CrpHMgO7Xj88RKiWfDiJp6iLQtrxS9O6eUsszAxyZ/YQfrTbrnp+lUPtqOIQ== X-Received: by 2002:a05:6102:5114:b0:5dd:f9c2:5533 with SMTP id ada2fe7eead31-5eb1a802900mr13801584137.30.1767622569874; Mon, 05 Jan 2026 06:16:09 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:dd3b:c635:dd06:9574]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea1aef7sm100774703f8f.7.2026.01.05.06.16.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 Jan 2026 06:16:09 -0800 (PST) From: Bartosz Golaszewski Date: Mon, 05 Jan 2026 15:15:26 +0100 Subject: [PATCH 07/15] 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: <20260105-reset-core-refactor-v1-7-ac443103498d@oss.qualcomm.com> References: <20260105-reset-core-refactor-v1-0-ac443103498d@oss.qualcomm.com> In-Reply-To: <20260105-reset-core-refactor-v1-0-ac443103498d@oss.qualcomm.com> To: Krzysztof Kozlowski , Philipp Zabel Cc: linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4637; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=BrQ/21QZGDQuN7dhDoEHw0H247zcTWTkSd6dSJl8JUE=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpW8eacplxrQpLSpZpUMa7p6xFNfRb3Hr1plRdA YcJzTVFPSiJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaVvHmgAKCRAFnS7L/zaE w/S6EAC0FpwHUJG3pVdDjD1z5CNzgD8d2F9LzcHEfhQjkncENUbgeehYn4LbAy1Qt45uTBcTzba rP3ZewHoU9vxYnbh1tX8yVGeMD5HQVYZWSsu21MadmFU//z749csXMvYySVpDRS50fxJA/zUvyc okSWrfM4Od0EjWHIN7f9r7iBvHwjorQm2m0CpWMbI/1Ta7GsicJ67pn6QFKqSxM+w8H8DBsEYov GmI5hMJKH4irPAJK0Ejf0NoOHJrvvQCZVRXy0boUNraUt9ZUkIOuq33XeKjgjr7lsWA+LY9ap1k w6q7STBshlWL1gmYv2No139YjGvmeLvHn/Xcpih9v7LmGh01vHaaFEibvnF+fWc+okK6XPfzdgy RRRw/oJmB1r3Aux9V3T8BtctBXbma6eXlIWFOYldq9BGp/p6tNaALBU4iI28m1Rp1Oa4UrYJydO wr06kRSEudBUzWNTiF7s9muvpZ/P57c47LbkSS1kYSXig85I77K36+/Y4W1Bi0bj/X3ypOkWgTu xUq7qfM+XuwpJotg+O7VA6zXmEPxhLs72yY6Te3d6wzgmqjpELWCQAGX6wTPqCcDjVJ4xT8CgBW +pL8Z1Swaf51ts1ch0ljhMj81PvgdPmgFs3WBq6r5MXFkhGb97Al7nA/NaQpDxwbZlWf+AcN0rL xoOpJG/7EzyDlJg== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-GUID: CbNZyBZQL_tkH_2Tw-id7uzNx_ClCYaz X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTA1MDEyNSBTYWx0ZWRfX9yRhcUsqd9sp zrV4abZUBWhX5K9Pcfg12nDaTfGqR7TaRuZPnLbscDwvhNq3fDxveRVjVwHrpMv6B72uN1e9cME Asiy5D5knDvONuyfvRbfZnV9VOBqYFAUfYM1z73/bPoQYSwZEMDY7/5RG5pkYhalZdB3EwAXvyX YxRoYY4b8URf3qT8KXeaehK9lMBgLzWIOvbRBfUA3rbGwoNww8pEyoGx/Z6UoT76fd5jxtEesOt E8tZcpqq6TZVXHZk4GjK5yTWQBUGcPgKV4cf2MjqI53hlZnEyByn2ZzIzWaCWpwmsvD9XRf6JVm W5ln2SGl3lgyr4c7vpReuIp3tDs74XjXu4f0x6ZQV4Jngbul4nCorqE5mNIzZRd/Do5vfPehwGA rr0Oou8/dIPNo0aBGTh65X/YMBSmZRPrGCz0sAdrfhVJ4CGjYv5Km3Dx5tEIS3pagkZu7nZHGQc ML49hyH4QkcdCw/94Ew== X-Authority-Analysis: v=2.4 cv=RKK+3oi+ c=1 sm=1 tr=0 ts=695bc7ab cx=c_pps a=P2rfLEam3zuxRRdjJWA2cw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=ABYPN_TNRu3JwaOvJ3UA:9 a=QEXdDO2ut3YA:10 a=ODZdjJIeia2B_SHc_B0f:22 X-Proofpoint-ORIG-GUID: CbNZyBZQL_tkH_2Tw-id7uzNx_ClCYaz X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-05_01,2026-01-05_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 impostorscore=0 malwarescore=0 lowpriorityscore=0 priorityscore=1501 suspectscore=0 bulkscore=0 adultscore=0 clxscore=1015 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2601050125 Simplify the locking code in reset core by using lock guard from linux/cleanup.h. Signed-off-by: Bartosz Golaszewski --- drivers/reset/core.c | 51 +++++++++++++++++++++++-------------------------= --- 1 file changed, 23 insertions(+), 28 deletions(-) diff --git a/drivers/reset/core.c b/drivers/reset/core.c index 39bedf990223212998fa8ed4cda517529f94ee23..ffb811cbc6460b48dd833d3560d= 6538eea2fd5c0 100644 --- a/drivers/reset/core.c +++ b/drivers/reset/core.c @@ -130,9 +130,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; } @@ -144,9 +144,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 @@ -647,25 +647,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); @@ -1069,22 +1064,23 @@ __of_reset_control_get(struct device_node *node, co= nst char *id, int index, } } =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 Sun Feb 8 05:28:27 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 B39DF27FD54 for ; Mon, 5 Jan 2026 14:16:13 +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=1767622575; cv=none; b=aOwqoiwnPIohaqJY1Cbn7zmXKWqOpfdGkll1HcDoEwTEfS/4bjHbCvY+kcTtlM0VYkuB3QNzCe6HF9RsXRuqCZh0tejq2i9i8XF3HYBqI7F52TLEz1qhTKkBuhHZRK3SXjSLaWStP4Ck3Mzm8+a8G7ewOoM5ldx7AGf4AayXw6c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767622575; c=relaxed/simple; bh=8uG5mM65Dn7ojNo2HSPT3S1myvsVimLKbZp63UMZZyw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VhiE4E7lrJ+UbSMfSbWaUJMzFeyDZzPc6UFgy1sC2EYsiQeuUaLdkYYsW+S9YbvXhjUlauwWVFFopVqOPKEBMW9ZiWwMY7ZMF78vY3tAK9phOuFPWar8IqQufK9gkrnJQfcpqcST79YqKbFiz/A3gBxFBSmVXRBph5TlRMfB9aw= 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=hpNcNLeR; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=JHLchYsz; 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="hpNcNLeR"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="JHLchYsz" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 605AYqSh937043 for ; Mon, 5 Jan 2026 14:16:12 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= i8pzGO/WjUIxDg9CQ5qAgwnxkKkFDk24U84VFeCnBY4=; b=hpNcNLeRcoZo0HOr mfIB2SjD7k1rSXR3M48i4PAOwy3rou5rc3WPjBF4r8IZmfp/pyRqHUpAx3viOOrO PdnzybHVTUxE1iRc9gRLBKZygPovO8YNnVqhNcIXoSNtD9EJtxwdzMBeup+PKF0m rpbrr4drIP25c1Se5S4G8MONvHbY8K/T8izKNoVgeRGgj6/x9bB8JnMJm5LUiz9s nJtqTVTQZGJSPdt3AHFa6AYbBCiCTfb0WzHrzSfqEYb7/Hp3Wgh1ymgsUuJywYVD XmxUVCcjySWTKsr3ESjiKlwNu1Da4DXW8MrpycD5Hpq1lruyAukfSkpQw2k+gBmc 74XDcQ== Received: from mail-ua1-f69.google.com (mail-ua1-f69.google.com [209.85.222.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bgbnv8gvp-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 05 Jan 2026 14:16:12 +0000 (GMT) Received: by mail-ua1-f69.google.com with SMTP id a1e0cc1a2514c-93f5f75c1a9so20688617241.0 for ; Mon, 05 Jan 2026 06:16:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767622572; x=1768227372; 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=i8pzGO/WjUIxDg9CQ5qAgwnxkKkFDk24U84VFeCnBY4=; b=JHLchYszkko9LNZ/8lngCNJQOQKqBIZhX7NRTm3Z3piChn5tlkDmHrRpVFV6NIgeDG 1eGO/qXy1TyEBmRVaV7D1PMOLi3ul0pPJprHgdE6i342sckiGTylhs7SZQJB5sr7GEqd xEFPaAnCqTbRKEqssdyFfPR5TXE+t/F6lyA1Qe1BODpxcVldrcLwqSNc/kKMUkkPNc9g UStkf/GrdC274EHjn+prr/TENxi0bTTpyRPVnYhS7xxpj2bdXin1Z2mFa1Xwo2BkXYYh r6YPLUcKhXYt12f0+FbjmeVhfpRmIAPQFihk8IFiaAVW6X4FTebXHNmCSdMPJZVdK9Qv JnXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767622572; x=1768227372; 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=i8pzGO/WjUIxDg9CQ5qAgwnxkKkFDk24U84VFeCnBY4=; b=hqXr+Ql1EDf2TRmgE+fajW8+Xey3dnpUjOc51uEOd7IylOm5mjUx1IkrhAcqIezteH D6387rxzQP0VZs6Fc2Z+SBDBs0J5I74Kxjz9Fe0aQY/skPBi8KpxXEhGoYEbeDCHEsaQ WTOLuv7apgVpXHwUYP4hFkIBNFlTc+/rldJ8YMKFEPLRhGUrlgy57X/D+HulXlmf9Qdh 9yiprcHxwkPmqs2poIwtHHTza/JBtYah6WOT1nGzlt4IuexqIlLO8Dy2NmmuqvRwz1Or v/Z8lovVjPBTGiEew8q/+cIFZ7KXjcSjUeXZBnYE4hIjbLE2C4lC7FskMRcy/fCh03+n ibfA== X-Gm-Message-State: AOJu0YzOX6PJw7G/QodY4wyRccO1BCbUGw261RANPti2gsJJwAsPDfyg p5BBrvOHorPp0lb34ijouwYy4bJ20dTSp6aXUiEai6GCP1P/fzGoiVyJgdO0lQwLrdfw04CRL/5 91SB3bc+T8FPJfbJVyJU4A6Hikqj5uSk9uEolmIFKPfU/LC7kkRLRhFyCbZL6U4AXHbA= X-Gm-Gg: AY/fxX5eX7DuzVa0EMKgTEDIGiRiY0q15gTRg3Lb15AnoJrzpZJJPMiZG2uv0KqklA6 05JiSr4FIPvd6RvF2hNrx/KiknK5lIwdKfeexvkCmadI/D8CyjJ7FDR9X1gX6fWaJeBRL8bRq55 B0llcMPlRqWyhljd/72VR6ZaKh5K5YCUKjXVkeHYbfB7C+YYMnlVSd4qmX36CqqxJmUFU3dqE1F EGWid7o9ewTYiHY23Hp8Z5KKkxrePKvmYUy6FTZCjJtL8kCb6W/jvFVP+3qjERLgMPer7PB5z4g /CkJDpUQViJ08j9dJNacadLgFjBscs7VeGPmOkBEACznXgkFUeIEzRfizPSWo73VZS82QJHrQRl ZnLLWoge1BkVm7no5PkiOB8h13+dx9EW2qdw8CTQ= X-Received: by 2002:a05:6102:5086:b0:5e5:672a:b19 with SMTP id ada2fe7eead31-5eb1a60bademr12771472137.4.1767622571763; Mon, 05 Jan 2026 06:16:11 -0800 (PST) X-Google-Smtp-Source: AGHT+IGWWtCFOtcpWYahR6YZht+vNzGoEos+ex8ywUQTLyP7guZA5kYvD3aGA848OL3LtoP5yFZmhQ== X-Received: by 2002:a05:6102:5086:b0:5e5:672a:b19 with SMTP id ada2fe7eead31-5eb1a60bademr12771462137.4.1767622571240; Mon, 05 Jan 2026 06:16:11 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:dd3b:c635:dd06:9574]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea1aef7sm100774703f8f.7.2026.01.05.06.16.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 Jan 2026 06:16:10 -0800 (PST) From: Bartosz Golaszewski Date: Mon, 05 Jan 2026 15:15:27 +0100 Subject: [PATCH 08/15] reset: remove unneeded include 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: <20260105-reset-core-refactor-v1-8-ac443103498d@oss.qualcomm.com> References: <20260105-reset-core-refactor-v1-0-ac443103498d@oss.qualcomm.com> In-Reply-To: <20260105-reset-core-refactor-v1-0-ac443103498d@oss.qualcomm.com> To: Krzysztof Kozlowski , Philipp Zabel Cc: linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=689; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=8uG5mM65Dn7ojNo2HSPT3S1myvsVimLKbZp63UMZZyw=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpW8ebYuT5wmBH6ljaAFH0vjN2He/Jhu2fRzWB0 yA50nBIZgyJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaVvHmwAKCRAFnS7L/zaE wyEGEACiMCrSBZvWyABA8z380IQakjedk1Xnb3OYLD5WIVn2QYL7zupfn5B+7j8vk9/I5f7ympP 9G2Vpun/waGuRKNk24hmMo4BWhpUaL/xsqNczBPh4l/Jo/VkKeYzCDuhelsHtgdsVl3hNPA/ESg f9TB26YUMpjTKhbHn7lJk9dG3a/cxPbnb80BBqy+YbTbV9iaVacYnI/czVNq0JEQb3l3mcoKjP9 dOH4b1Z7PR6UfcfdfujBRlJxXJ+eWzU4KS3TGBGKTvYhNoxmdk7EL8fLyQwCwEROdysoVrPJHDE JQSJvMCjkwuCngLH0DDjRFNEfYKwiLqE8voOwm7zviquRvFa1KbhKgPfzMhCwxgr/ge1ciPPeuN 5vUFdhbKMDTSPpF6YlLyjNrVhxNTcOVYzjUY69V3gKmmRzrSGYY8kxMVx/3K6FcP7Y1ZcbJPZqU L9G9SskNbgGVmtOsYkt5qNvDKFBBz6HxQlIbycTkF6HWVoRmikOxW6CoLH0lC27K7FC+6NdrqZC KG/rl6fnc2ImJ3KIvoHUt7p4MrAipf9kv9McukeEJecoXxYqbwRVXSHx+rXYgAqg1XXUnrsh159 TLw+XnD+LUoV3VMr2+1z+jMzEcQypPfPgc4VF8iGwPIfYPMUl4mpjFT57X6yiQj/7K1R8CxPpDe 3r33kJ62FYsNizA== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Authority-Analysis: v=2.4 cv=I5Vohdgg c=1 sm=1 tr=0 ts=695bc7ac cx=c_pps a=UbhLPJ621ZpgOD2l3yZY1w==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=ZgykBsehagwEv5oy7VYA:9 a=QEXdDO2ut3YA:10 a=TOPH6uDL9cOC6tEoww4z:22 X-Proofpoint-GUID: 48g_GFjZzAnccDuKf5iPsNyJCj5Z2rLM X-Proofpoint-ORIG-GUID: 48g_GFjZzAnccDuKf5iPsNyJCj5Z2rLM X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTA1MDEyNSBTYWx0ZWRfXwaBjKf53FQAr gTXfM1fncqabs/f6E6pzcgWnA4KiD722nuWR9PIIJNLhilt+DCLm8T+Do+HrkK/6uxwL6q0lzb3 SApGP8KCDt5oNSiOvDGvo4yKqg8DVTMOKJgpbXhhkypKQlVd5UKWVs+KFPHpd5QWfp+w7ema+mI nr2RwHky7ltR3F20O4TenGhBJ/y/KI3WVud1AUnTKc87Qi9C25lyuQgpI4vqggfC58th3bC9Oet DV6LnUTbEgAbSffB1sHycBm6YFGF6TtX9KXx59oQ/6gWXuWz13blbsgyQK0gh/c5kRM7bRjSIMu AE8PvAY+7+esGIMuU6ozr1vpi8U9BjeKPOXQMrvNFWneGCwjvbSEn8RCG3tfPtqKnTYCnJH/Y1A UYB61RtR2juIGnklySs/jPPgunFfegbQKN5a+VU3dfwBm7sH2QQ0NXAT7pP+tlaDwSI6z7HsOM9 NzOHqRHpHOP8OCiUU0A== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-05_01,2026-01-05_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 phishscore=0 priorityscore=1501 bulkscore=0 adultscore=0 suspectscore=0 lowpriorityscore=0 spamscore=0 clxscore=1015 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2601050125 Reset core does not use any symbols from linux/of_platform.h so there's no need to include it. Signed-off-by: Bartosz Golaszewski --- drivers/reset/core.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/reset/core.c b/drivers/reset/core.c index ffb811cbc6460b48dd833d3560d6538eea2fd5c0..48eb64654b6de08030674ce3b99= 4021b5f57060e 100644 --- a/drivers/reset/core.c +++ b/drivers/reset/core.c @@ -20,7 +20,6 @@ #include #include #include -#include #include #include #include --=20 2.47.3 From nobody Sun Feb 8 05:28:27 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 02D67230BCC for ; Mon, 5 Jan 2026 14:16:14 +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=1767622577; cv=none; b=VAzlLqamQit75e68PAz67D05CLMeO0zGXei5wG3NbIU/MnJtEJJYgK3F2mFyNP3P/1V4oGzHisrlgug6O76zFVj7uECumDEE30xTZEzU68709uXpJ9ByQ25LM1vnssBGfGShuQGppMU4WwCEKnwj9JxsH2gdNHlYcJi+4bP04q4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767622577; c=relaxed/simple; bh=Q/9ydyqgWlC7G/Ll1xIXU0tlasgJPO5S9952wX8thhE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=erWlKC0g4/KyMDvvcyJ1MyOBFObBybfvL06jBRkw7jhC92NyfK0ohvc1DBKQXXf5Os28UgwNeM3jNrwjzX2+0ZHGHc0vqZlvrdvGS6fIlTQ3Po0+d44HZG6v57Jnk2cUzWvM+DIgMhsJ/3U7N1LvrXLOitWG0OX4+ICShJaguSU= 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=k/umUtWC; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=S2pZ/ivn; 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="k/umUtWC"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="S2pZ/ivn" 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 6058w84G593923 for ; Mon, 5 Jan 2026 14:16:14 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= x2R65rdVq6O1ohPjRkX9Q9XnBbonnHsuOI4OfPjIU+w=; b=k/umUtWCVX8XeBuI hzt43o3SIcphI33y0oq7m1ku5EM2aRrLVBur8acTTn+GyBV3OTA63RN9IERn+Y5w yckvwTetB2LHo58F0KeIHgukK2jjyjbjRQgg2S0ERSA+bXtNRdlBNL4l7c++QXoC 0b4PNc1wXOXysq08NRMmxjbaDXfhQQKsmN91jD73on9gUv00Va8kyNSZNKZEtmq4 1ZmFm9DOYLhDnJ18j1POpD6wZnT5BFP/G39nPrVIgMhrFsYKlN3OBQfkR6hqhfFr ZlK+h+p06oiN/+SAHOQ7pqY+MFGj5L1qrTrUjG+FeNn8TPstv0w986c4uxUlCnRf fD7/Mw== Received: from mail-vk1-f199.google.com (mail-vk1-f199.google.com [209.85.221.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bga8pgt8f-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 05 Jan 2026 14:16:14 +0000 (GMT) Received: by mail-vk1-f199.google.com with SMTP id 71dfb90a1353d-55b26ece522so14865343e0c.2 for ; Mon, 05 Jan 2026 06:16:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767622573; x=1768227373; 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=x2R65rdVq6O1ohPjRkX9Q9XnBbonnHsuOI4OfPjIU+w=; b=S2pZ/ivnl5ZEJDpwEGef95N/6MXrHfdrjErH8DDsIw8/hCVOR6R3RfDchxXH/9/iG0 Rsy6KDQxQE7PwWR0ceAFjco2NhFxxLCU6U/pHydh+I56Dglkvv11KZ5Qp24njoZM+aya zEUQPhAAwioYXSqXafp7Sw8i0wBeAdsY+6OaqGYgf83ETc5DsH8Zw1dbr9g/iu96r9kT ONVkpi+QNWZDkk2kmAowe0ZX4OhUidFRKtCjmZMwPI5uesyW/hEJnLkdB8v67bxXc5pD S7LacDuk9bfL0+oBnWstZ2xWgl1EFfJU7PFHHjo1cRE2gV2UeiVFlilrPXunoYMdqmCE /8UA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767622573; x=1768227373; 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=x2R65rdVq6O1ohPjRkX9Q9XnBbonnHsuOI4OfPjIU+w=; b=Y3H8w8Oq85W5r1uu2Cyd/Wui7GZSUYathK8I8levZzf5yMYqoR0TOX0qVAl8Wqon2Y 4orTAcTTqQ/zPp06snmHb7FoEw4huXkQTeKNHrNGY9taiX/2mTMSc9z7y83Hpf43fJ7G yXW345iFiX0ub/QsE0VuE1MJtBB7jVlRhfB3MiSNn0VCd64YJvK+wlL0yrGY2mFTqqYX IeeA9pZOdAY9fjz3TNtTxq69ctBxnVtzJBiL90SlQNy43fY1HqtXpbiMjwBViU21yEEf COBeiiWi6A7jPltWZ8ghvOb2XUReFpT0Jq0sjNOMmF6RlwKcaoZu1NU5GJLwpu0mMU9d jgVw== X-Gm-Message-State: AOJu0Yxfz7qjNby2K74BeeTIqo9V5iLucgSqOUzbA3C1aCk6uuakut7U ggdgsSa9aQxs9Gne8vvSXhW9V1/KlET67NiEMnZIW2NMzfdi2E7GXDD09BT+ShVf1f8oOyPwyGB TVVfGA0KlowEJ6lYkYVaRyB0KPbeHQ/M4yTU8s6+2YCnlqevJ3Pn/oTnd1QQoHaLsWEI= X-Gm-Gg: AY/fxX4h3vcwUsNfQLdVKiFCt3RfbJYi2c84npcpWQfZJi7IMg3etB2pSyZJO6fMT8U i5FbASMRCMh+OaPswp9tB3TK/cagcv/rrywBlRhuXLpLuINmf5dzISioXtceIhdeqN7/nHqF6Ig ymrADi+pKjZAgR4QE7ZQlRAgnd+WOeeIF10NQNnVp0nUhA6jQTeRE2zH/do8QZsW5DTetGdfw5A Czzww0ae22A5RWqSnaTpIq6m9EOUMGLeY+l0+CUmu+3kqqanSsBlN7S0/Jt/0xHNWlpI+38sk2o ds218zy7VeCtCP3VP2XlOONhePbomvmPmQYNP8rKXgpl94qHuxEYItVKXNmQAMElrbtgLSq0f8U xNVEocW6i8UaixPFkqXVTWFJy6qRmnvZCyYIODe8= X-Received: by 2002:a05:6122:180d:b0:559:7294:da85 with SMTP id 71dfb90a1353d-5615be31c9fmr13517484e0c.12.1767622572894; Mon, 05 Jan 2026 06:16:12 -0800 (PST) X-Google-Smtp-Source: AGHT+IG+VjPf+qeJFtf3bkoUAR8vN9R0AZ9XejBMxsKRObXJyNKvjXH1SHhnoE0Cl5Ibcuqy0UkL2g== X-Received: by 2002:a05:6122:180d:b0:559:7294:da85 with SMTP id 71dfb90a1353d-5615be31c9fmr13517452e0c.12.1767622572336; Mon, 05 Jan 2026 06:16:12 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:dd3b:c635:dd06:9574]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea1aef7sm100774703f8f.7.2026.01.05.06.16.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 Jan 2026 06:16:11 -0800 (PST) From: Bartosz Golaszewski Date: Mon, 05 Jan 2026 15:15:28 +0100 Subject: [PATCH 09/15] 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: <20260105-reset-core-refactor-v1-9-ac443103498d@oss.qualcomm.com> References: <20260105-reset-core-refactor-v1-0-ac443103498d@oss.qualcomm.com> In-Reply-To: <20260105-reset-core-refactor-v1-0-ac443103498d@oss.qualcomm.com> To: Krzysztof Kozlowski , Philipp Zabel Cc: linux-kernel@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=Q/9ydyqgWlC7G/Ll1xIXU0tlasgJPO5S9952wX8thhE=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpW8ecxkKr08rQDLASMdh1d7wJ/hz7Cs2wauwr6 OGBtG8q6niJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaVvHnAAKCRAFnS7L/zaE w0S6D/9QxNau387zFlvEw2Ohb+8O9wo9jhF3wmd77tSeeTsfEsz2yeRGgQ9JsxQDekJPRLFk6xH +TznCB231Ydo2ZCRQbvfaSjpmGFz029CvOMQeHo1viFiIswAMl3oWs+yxBV1vK5Ph5kMYdOzkYL 336MamA6b/fBSukt14vq1erBJNO1tJUGNmm7RBubyCLAiGr+uTMk2RWzPUHOqy/JPJBcsZ8unWN vuY+UVVk45LYKHZRNV/cPU6YV22rRvql/9jXZe0HqBSvUx9S8WS3v11bDtW8HyxQXVO19Vm0bh9 RzwFsf1/0EF45MyjX9ZR6BIzySscE2wRCNTi62jjaq0TV9QDA3axjTbsTZAxanbkt5/K/yR/2zX VuEcJVp6Q2XcvRmXmRzbaXsjwwOPsI5HGj7MNQS8wvaxpVFn/T228NBIaCWfJMKFHVLIJFfev+i rDforg+GV+OWXOZBbro8LQcfdXPkJoTl81HOZhbHW4VJ6VY4QU65J8t/AhzNFo44EB503V0dGgQ fANadbR49fJx1umtZVbxuG/1htgvjreGlaF7sPStG3FzgxAR095XO4HWnvQXTqMf/C9IGtBJFu2 ViFszFy5B5+7+Z0kiTI+bf1SR46zBWQUcXFnGjnDOJMIOMFsLPmUTgDdLrSKCOBpOeHY1q25l83 1uPuJYqKzVVEJSQ== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTA1MDEyNSBTYWx0ZWRfX2DP9yplsHN/k 8s6tdjjydqsKLa9niNvOjGwq24uLhLSCkHgWhhLDczNGTsvEL3NAXImXTXz/hS9ZKthc+JRLw+U BYm+ITigIZx4Q15cHOReci21Fu1hveWr5Qf6OhRoss/sM5n2vNe9ys5sLX0uqBbVZ1SY4vsl7bV jstr6AN3tp4bYZpNR3tI3IU0lt14xzVClepk4TcRveF2MxIu8u4319SFEYAaQNhyFnvRn4J5f14 HnjCk9fUaQvJGDhuF0lgOh3G/wljodLm0+JMoUsEyxxQCm1cBDIv056cGkHXs/UwSsfwnTI3RRK ep8eiOvpDHTdcMwsUfKGrMGgWAAmspZ8g7JqSNeDqk8jXf2nNCOGZ3JRLFgXG7FbVhygwXD16dE mV/ceSk/PO+qEd0d20NPKjC5696GMNaJhCd3x7O3hqN4sGvO2CcvmhQt3dqdX7AT+s+Ch3BQrhc h8SYLimtafwaDM649yQ== X-Authority-Analysis: v=2.4 cv=JfWxbEKV c=1 sm=1 tr=0 ts=695bc7ae cx=c_pps a=+D9SDfe9YZWTjADjLiQY5g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=GiwafSNXLQ0EgbbDNmMA:9 a=QEXdDO2ut3YA:10 a=vmgOmaN-Xu0dpDh8OwbV:22 X-Proofpoint-ORIG-GUID: 8e3AlkIB6OkdvPbPysymX7TN0V6JYMAl X-Proofpoint-GUID: 8e3AlkIB6OkdvPbPysymX7TN0V6JYMAl X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-05_01,2026-01-05_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 adultscore=0 suspectscore=0 clxscore=1015 priorityscore=1501 malwarescore=0 lowpriorityscore=0 spamscore=0 impostorscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2601050125 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 --- 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 48eb64654b6de08030674ce3b994021b5f57060e..a7992b8ad1c1fbd974d221544da= 00d4ab3938f70 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 Sun Feb 8 05:28:27 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 0D7FC2C21F6 for ; Mon, 5 Jan 2026 14:16:15 +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=1767622578; cv=none; b=PCPjzZraJzyv8HsSZJjpd6q4JUUd3tfeif+7/0S1Ootc5tjIUcbUBF9uyEBUWhi1cv9lace6TSL9aZi8SgWn4KgnsNzvmn9wUPh2+NlpWj6EXzwst9S6T2xcFiDiE7Q9YNarJf3c9Tfh5RZOOClNQf8gbu1pI4SYSG1mNIiKBCQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767622578; c=relaxed/simple; bh=JJk/DuSBK3NlC+tovpjXAEdBF+qG9FHVR2Oq+pgvCt4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=n/dh3TRRyzfnVv53RwP1dBC8wdHu93G+AEXEX1zwXEsakZWobx7skNaWpt1tcovQ+bnEaqfrANpCVLz1Kz9MXk5llGtJMf1OlLo5xNC8BX/6eFrOFr/d4uHPd/LPnA+Oi340UZmfsHWgxkS61kXvX4fz2w9Uj8B/wGZSQ9guadg= 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=AC09yTs8; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=YlcosUlM; 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="AC09yTs8"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="YlcosUlM" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 605AYtao937219 for ; Mon, 5 Jan 2026 14:16:14 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= XkcqGytjnt8e5Fy84JWJc3tUSYAsEqGUrIKqAwrgqFA=; b=AC09yTs8MGypvorz jPjGLWFpXrz2EIDcuvvO7JVmO24UvqbN/ncJ1rx9VOzACnlkqyqqKNaOQ/EK0TpP hn8OMwyQKE9Z0OFqmpDzogSLU3wq6CHPVSuvSSj4vvvnABaIWay8z6CCIYCpwDvO 6f60AdGapCf1rwPj5qiypD8CEWRjq2TCBIHi8l58gJ86mRLOHrUBf1UgPQPTspUh SSjAFjQIEY70SPl0hM3xmVETnAnvgjIRcQzxlC2a2t9HbZgk/+AZTdkAh3QXo8EX GuQ5/iAsfFyusbIYh/ziRczERhq9VodURamxxwaGkXAc1kYt40CMCE4JSn2u+qxY Zi16OQ== Received: from mail-vk1-f198.google.com (mail-vk1-f198.google.com [209.85.221.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bgbnv8gvs-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 05 Jan 2026 14:16:14 +0000 (GMT) Received: by mail-vk1-f198.google.com with SMTP id 71dfb90a1353d-55b2b3ef606so7248516e0c.1 for ; Mon, 05 Jan 2026 06:16:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767622574; x=1768227374; 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=XkcqGytjnt8e5Fy84JWJc3tUSYAsEqGUrIKqAwrgqFA=; b=YlcosUlM0H9kYVu9Bn+XiV58t1Ow1kpTqj+c33rddPASU/KdtHOVUaCkJUOygnwlHd PH6ogXn4y46YqbH8wQpHdBMj5HnNeYNG/DIIdTIWx3Hke2Qc+5knOCIx0liGNbQH+m1E h+zW087NMkMbZKnqMPxFmmSXe+YNI0IRyl0kwe8fqOHQzImKsohbyEo82n6+dgsSKoDu qp0RvM1xKxM8MWc0UznqmYDwsHul5C/d3aM2XGPfn2q0cQupDG6tQ4uh1OciYEz22RrN E17k/Yvcvyx1LfM4h55fEtrE7wHBhlJ6PyUnbw71jmBHtxe0Kh5kwASOUE+RWSUtxnWk 8INA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767622574; x=1768227374; 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=XkcqGytjnt8e5Fy84JWJc3tUSYAsEqGUrIKqAwrgqFA=; b=qGiD5yEjRulhqsXN9tZI3kIckhE3/EeHz/5BCs4l6bteyFrQ9CivpfLAfthnuQqhEz Mtd1OFpWGz5MI9vGpYa8pWa7AnQjHDjQ2ayNiCjmmkZiHht7lFMdKy9WNrJJzfbYMSqy EgpU5dwmo2FCEtpF7FEsFODfLI2hYKjq81xiOluM1PR2ywZrnRAy1/XYQJJHPFy37lQp WLVzz7J1gSIHIuXCW68OyV85lEiUi+DCuL+hRJV6uxnABbH8MkcI0aNV/HBRgOELLN48 uxKXpoW0Tdy8ypksikfLM3yf0s98l3tzoOk6uKS1CIlgTKgo9tJbuDV1O9P5JmmhZUdC HbTA== X-Gm-Message-State: AOJu0YxmjcHwbpJXyMaQ2vHt6SJ6Gpikx06YDpcFmPvMvo9WQiSKxWYK ICpDhdT/EQq9ZBDOv16CCcPXy8Yy91IntbFPTuEaTAI6l89aenV3HhD7TOAdtKFls+BDa20hKZo GgN779cWUgKv4s3QPcQs7LCR8vmbweVR2BOJgihb2sLTwrYvw7DY+Kf75096WdTk12os= X-Gm-Gg: AY/fxX6S+cXNgsF0qjn+uV4Pt5uCaZrePSM2XVLV9cfdpDHWtbSe9iiywZNPmdYMIYZ uYYMMR6nd5vXzaZD8m4EvSYcyMSmLusGHq7UO3te848kw3VyUSpvTlyR18Hrxa/2ZB+xgr30631 BVkhQx5nS/kCo8Xc1SB98Bts8eOABu4+G9XKb7pXCNALQkG17uMU0j0R5/RBU7lgDwjiCKkvs5g LSrxGjAUUQRzrkA6RAguxvTs9Nmu8sQ47Zee7EBLdGIC+Dz/MfYr20ZUjYt3ADgp5slLIr3kwwN WF2WlWMTh7il33J4UXzHDBIwtt1QM8pK/sbvQsSjUD1LwwsM55fR0G8T9xN3EeKc36Sy/OArQ7i cMAAfX+djif+PlKBWCL2owwHDsHX6+oZ1mVyDm6w= X-Received: by 2002:a05:6122:801b:10b0:55e:82c3:e1f9 with SMTP id 71dfb90a1353d-5631911c6e9mr1814630e0c.9.1767622573964; Mon, 05 Jan 2026 06:16:13 -0800 (PST) X-Google-Smtp-Source: AGHT+IEJr3VS5bqizHEtO+YGqBGtSrHQrdZzxmQVh1Bvz/TrtSNvWI8zWUzAvVI34SG0j4Ey73ov6w== X-Received: by 2002:a05:6122:801b:10b0:55e:82c3:e1f9 with SMTP id 71dfb90a1353d-5631911c6e9mr1814614e0c.9.1767622573483; Mon, 05 Jan 2026 06:16:13 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:dd3b:c635:dd06:9574]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea1aef7sm100774703f8f.7.2026.01.05.06.16.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 Jan 2026 06:16:13 -0800 (PST) From: Bartosz Golaszewski Date: Mon, 05 Jan 2026 15:15:29 +0100 Subject: [PATCH 10/15] 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: <20260105-reset-core-refactor-v1-10-ac443103498d@oss.qualcomm.com> References: <20260105-reset-core-refactor-v1-0-ac443103498d@oss.qualcomm.com> In-Reply-To: <20260105-reset-core-refactor-v1-0-ac443103498d@oss.qualcomm.com> To: Krzysztof Kozlowski , Philipp Zabel Cc: linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4635; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=JJk/DuSBK3NlC+tovpjXAEdBF+qG9FHVR2Oq+pgvCt4=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpW8edN+sMJbcER7LtQHw8lq/QIt8btxf2Hiw+7 CARCMu2DgGJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaVvHnQAKCRAFnS7L/zaE w0tuD/9vbft43tMPk4XoSDwUvSnn8HeFfTK+GhJ90TF+VCyHK2cwI2B6lOrP4x4S2lEWtHZ8853 rtbw/iUAiVOyJLtQViwLekDiH2KM/ovcrBae9m8OSOnB8gukvPSlluecEyGbguTUU7epEX7PC0d q3TLSz4qOpzPUB3Uds9V9B9Iu8E4lnv2kDpfI8ge0glQd0zJZ0qxXNg9zGPjd7gMUo9PLy5X4NM MUTnCko1uONPPR+0PmJFvaCr5GHa+Ow6DwOa89uG5N97UVx5MSUkx8pV+4C7DnnomP/ryqgrJ08 oAL1QlnTJZq/sdSJmZjtfgluZYUUq+IgC6EuuBuSKykm96osSUoizSA9exPbzufFcpEBTRUutwb 1NtNM7aWYZqszjX4Sz1XGC9ltbJ3Qx17DSfp/m3uk0xuuAJ8KU80atIEap8CMlVlqFTU+wadI1w XgyXZBhDudU3S2TBI/25UB/ADWNzTKx4NH+uOCZQnoFumYSKI9a6ftpYFvkSAIYOoumIt9PmoB9 8CReXsDg2dJP7gPPikK7Z7LebrFX9jfNJI7JeShrMj6e9gqM4K/I1TaiKPD1sVb7thLQaaNfQb8 e0PRu8/V2Xkzi2VnNp5XZb8+4KOc0HYoHXqTiQQL4CH8xfdeCRIy5M6xAWLXdWFbjci4Ipeg6gl leK6plopiz2TdCg== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Authority-Analysis: v=2.4 cv=I5Vohdgg c=1 sm=1 tr=0 ts=695bc7ae cx=c_pps a=1Os3MKEOqt8YzSjcPV0cFA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=nQ7P6-40-II7rw7jOZoA:9 a=QEXdDO2ut3YA:10 a=hhpmQAJR8DioWGSBphRh:22 X-Proofpoint-GUID: sMKOgGi5GR16CYfI82_LCinFaYLZg2bY X-Proofpoint-ORIG-GUID: sMKOgGi5GR16CYfI82_LCinFaYLZg2bY X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTA1MDEyNSBTYWx0ZWRfXzQBjLQFK1aXx Kw8DRfmi/1tB7TgqP8cdJp71mB8s4aC6QcW1Xf51w4C7coZwxO3p7ZSTbGdMkEqmNBY/9HeBI8K 14N/xzMGxaUNocG4B2CVaCEuDEsE0UBAlJnjnMMoh0nZ8AbC/4C8lbgrTRz42vHjIrJWK/RA7im BusKdXTNgHnaufNsP3N/61pal0weOa5ahYxZrtMx/JkfuA5JktB1mBxRRH1C0WjMBmuoYNdO51K G8oVHk1x7vtJDA/8oyCE/sW0PGejc1JVzjDdo34StPA3PqVqPEyW2TeMu4gRyxUIyVUn5INOs94 YuDvQD4JIEdlAq1l9bwXVAFA7fcbkBSUc/ckxuIL9sb/qwGJBpZjK0dBn7pWWK+nJcDrXbPJK7R Ii3LLLi3EFd9z7uNKBpl7+oHaODX2j1EMUuv8Oso9ycC1hHKiRSVh/RuQdLBlMPgWUtJwyiHh+s Qs+NgQtmm3PEtFn3FRg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-05_01,2026-01-05_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 phishscore=0 priorityscore=1501 bulkscore=0 adultscore=0 suspectscore=0 lowpriorityscore=0 spamscore=0 clxscore=1015 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2601050125 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 --- 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 a7992b8ad1c1fbd974d221544da00d4ab3938f70..a53d445fbbfc4601c062e7e5f17= 278417bd37836 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..2fecb4edeba1a2b1f5f5db2b34c= 867362c5f9c18 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: synchronizes concurrent access to the structure's fields */ 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 Sun Feb 8 05:28:27 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 1D0462D8768 for ; Mon, 5 Jan 2026 14:16:16 +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=1767622579; cv=none; b=XG46YB1nciCdIC9sOcTJqqAWjB3NoRkdZrbTHNdh/8HpLb9TjT/X30moT/b0j9o1N/p37caT/31+zPpGDfZdc7V06+8uRqUt+YldEAQsJAgxBJSrkCugpxm8wi5gmK7+uzdKugwWN9oDU9JOHZtvQJ35QOu7atJPWPmsAh6eO6A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767622579; c=relaxed/simple; bh=vS4dCZ0ew+RZihU4p9KI9IBT58rXDG7WlJOEy1M4W/s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Ws/b1UPCO46NKPQ2+1p2NQHMTy4+gIoKzDKjAhJMdLEP7paI7F4qVjgDMZ0fZjzIizldtqgmODczdxJsMarC3nMsrGNqPDYv7x6P0kSOGbErH/30lLpVy8WggmM4OgvHYaHDvMZnZ8xf7913Sh8QPxL5kJ/FPbApc1S3SMtz2Yo= 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=DsBhEmGh; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=FkPx7d8J; 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="DsBhEmGh"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="FkPx7d8J" 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 6058wZN5594393 for ; Mon, 5 Jan 2026 14:16: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= 5QBvbBiocVB0zbkZIIoPv5mnjV/W5Y0yDBBG+/WOWAs=; b=DsBhEmGhQV+pc/7M pOsoXLPqOymqTo4WIZ7VWIsDX5InaoskLAAWiLrBnSmHnGU794aXmEJpoiAr7qG5 OnoS8Wc2DsxEFe0bUyp3GbmTau2TJrVaVCS688UsIpBXljXfePIXKlNz1Ht4ApN7 YUyfjh9SVliw14TgZ8fiYE6TQFHxNQnUQBWXFAFRx50742+mzPCqdezIE4ns8uf7 Gzm52kDEGogzqANuOfUgj/k8zGOeD8q9m1fyZDJhcpuvH9GdZN6bCLItWs5TJX9J b0QyLE7KP31sQljlxeCApgsZcxMsgIG5n1CRJzf6Au8w7Bxc3aCI+MjFWIBp9zwY LTTdOg== Received: from mail-vk1-f200.google.com (mail-vk1-f200.google.com [209.85.221.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bga8pgt8h-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 05 Jan 2026 14:16:16 +0000 (GMT) Received: by mail-vk1-f200.google.com with SMTP id 71dfb90a1353d-5597ace71e0so33857539e0c.1 for ; Mon, 05 Jan 2026 06:16:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767622575; x=1768227375; 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=5QBvbBiocVB0zbkZIIoPv5mnjV/W5Y0yDBBG+/WOWAs=; b=FkPx7d8J8aG7ZjA8z0pgDXy3Abq1XaSv1oo2qEYA2rIBu5vc5XdTLGMd/VFSRNxnC8 5IVKV3VCt9l9uJ18Z/gOmJ9tKhOK4HDUfYRdQG1sUZZdK8cOmGJZeyNGZ3xZsyJwfEzj mznOqiYck2CNB36fXAHJWhkdcUBZIgyjD9GCwl8yyf+xocXm4gtNSAkg+tvgVjB3q0ku jyNDSOvFo2riEHBTq5lzlxfAeeP2JZDpy7M6gia+H9t6sw/0s4r8ZZp7nPG0OcZNHMiI CVH9KEYU+YSkdkLjqNX3VFhkdSlpL2u3ecW2GDGZ+iUf9WaBT5gJqIOPfg6ei9u+MA89 g70Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767622575; x=1768227375; 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=5QBvbBiocVB0zbkZIIoPv5mnjV/W5Y0yDBBG+/WOWAs=; b=XJElCK8YMR/FLrLoPl7+cR86/X2Gs/W+hkAp3pkNRcR3sOYtxivOZVITKOQ+mS5yNO F/RbumlZExs4kHENAOYn5nu08eyAX6ZJ6tK7RfOlMlYmzp/eqlTDusqYgdqqhnmMI8i4 BbzPQnNqSulBwQjdPGjP66pcrze1PcUiU6eyJN47bdaYKz0VGZaJIxobi/dV78e/jXUV f68sFxGOtAfSsjjwiaRKuD22JkZkb5yXfIKb77CAUOr6I0cGG09SddbfgeXWzidsLVsf n7vJXqTbSanP8UVhGLq22+TaPSPWgzrqhoc41B972yKCvqNKzrilTww5exj6tYWeS+hF itgQ== X-Gm-Message-State: AOJu0Yx+wc7ayRxxo7ZP2m0WMWdzjNj6kkIK2C4fjMiJFfyNV8V8g2IG 7O5N9Pqd/UCZNgcoeJ/7oMVyTHejnIEb85K3B7rOgImPIgI48zGrBCFveObJeTU5kPOaGpRPnNC ICncVvIg+vnL0YIRsvNcdas/xj+4NhifKAWK3YQ9MYXaCAkEVLAI4nzvy/hGrzDXtwtU= X-Gm-Gg: AY/fxX5P8otfyC+e6F4+tjV7N+xHXAlP8kEM8+GRLK8KpvQGEGZftng4v+k4kZxo50M AISYeReOCZMr0yH+VHvcu3/x81XIc2YssiPZ2zXj2w1Tl/dk9RYhwzTDYPcuiVxbLwP0fWqhOcp bN8CYOzssZJKlv6h7EFVacZVKHNbSa9K19JQZOQSLJ3ZpqeKozlGSIdA3XfOwDYZNGu8e+7nXY0 yBVmHqX1zbzQdxSp8iWIjPpX0wE3b42Itjks62Bb4TkcDP62JLcwcK97t527w9b7VXZfk3vwJw0 NlP+2E1V+dsyw9n1FR2BDah8uavM3pxmXAvNMwOnRFppbuTjS8Lst3Ye7YfanMnJyc0VFaasj/a jzgN9hEqnqsWzmU40b7x/HAp6Arxgi1yZ7SIv3X0= X-Received: by 2002:a05:6122:925:b0:55b:305b:51b4 with SMTP id 71dfb90a1353d-5615befdb8amr16226302e0c.17.1767622575138; Mon, 05 Jan 2026 06:16:15 -0800 (PST) X-Google-Smtp-Source: AGHT+IGHu9VlxOWk51Ztjr3ONU8KNlo7HCHvq3VHAVQ+H7q3VLfuM+Zt8pZ+qQLUpv+5Gf9j0g1toA== X-Received: by 2002:a05:6122:925:b0:55b:305b:51b4 with SMTP id 71dfb90a1353d-5615befdb8amr16226262e0c.17.1767622574500; Mon, 05 Jan 2026 06:16:14 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:dd3b:c635:dd06:9574]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea1aef7sm100774703f8f.7.2026.01.05.06.16.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 Jan 2026 06:16:14 -0800 (PST) From: Bartosz Golaszewski Date: Mon, 05 Jan 2026 15:15:30 +0100 Subject: [PATCH 11/15] 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: <20260105-reset-core-refactor-v1-11-ac443103498d@oss.qualcomm.com> References: <20260105-reset-core-refactor-v1-0-ac443103498d@oss.qualcomm.com> In-Reply-To: <20260105-reset-core-refactor-v1-0-ac443103498d@oss.qualcomm.com> To: Krzysztof Kozlowski , Philipp Zabel Cc: linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5041; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=vS4dCZ0ew+RZihU4p9KI9IBT58rXDG7WlJOEy1M4W/s=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpW8eePPDowHGP/lslg3knZuwg+fVR0j7fKIvl1 pciba95fqqJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaVvHngAKCRAFnS7L/zaE w4vPD/9npgCFXizen9y4g+UZChlU9diWHNLEqxd0cohH/lq54sZ6+wX8m0X/2pbU0RXY0+8BMXh 3GlfT/7IYWtfqOWD2s90x5GYtsd9KP1uNuAfa2+As52/1z0c9nJYa7Qbg76xLkxccysxlI1xXnz N+sLkloJcle8pb/mhnInhrpICCU8Xnk8FdxcntQUO8vZXyKgZ/9MlV+5+GWnxLkWu4GSceIJYrS XKmkdqqVUGoOzXOpowSAq3YNncZhdMcNem4Sou83P87uz+K16a2Sjp+ICbinI0TovVhKXVZJiqS ubYMVI3U/oFnZOQvYH2HG+FXFuAS5LabKk0nMM/gpUCdJxWk1lB9Ku6qOFHFntwxpu8muuQSG0r mF5nZBu+UJMizb9ByesWQgPyqj1o/lxv225VgE2/6AK8gAJZwqEYJdhaqoz90zfTwQ4u/jGB/Dr tYP7DvFyqzoSAxhar+nbD2pRyLw9BY2j+FWqjNcpSaPZYGvJt60TXZIAhDx6M3S9HldIY+EiSuz zoyuZULHapCCqqSM+OGBLdGyZb/4tfEJEwUKXhElJqpR1qAGyyg3NkHs0yQvU7uO6jrua0w17Pd C1bR5lzJQVG0/b3GFWygB1o1wNwglfmB2iIglFrWm88aGS2olVb+5JXYPTChkUjdZ6VA6atl1tQ Nrk/FM7j6lF8yvA== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTA1MDEyNSBTYWx0ZWRfXwAx8PDdfC1RP p/R0ogZ6UY1E1a0JO6uyn5Hb9pnybeHSlH97Fs+MzNh+oRjdD0/M4uBtkkHG0JNbBEd+8NiWc60 bZy4bDQ4n+zVGIwRrfw5K6V6gnZYoyoLOirA6zvBSlmV2XwywwmtzMVLUYmxJfese1vCKpARwXu K+w4FJSoqqxX7+dGW+FCHFmknKjTgxnzlFl6JJ4RmAseaPUM5WtQetlr/6HB5+AeBpqujYICz2T ndd6A1TRyaW7zyw/4Wx1CQQZb/QNojq8l33ydFLAe+bEFDVSj3GNMIwNPuOdVzclnxYYfS9S4uq AEpj+0mV4AvRzRh8IEgT+et0FdN59vP6MvGt2izVjCAWrEok8ZoVSicuPofQtmJJgyDXxwNC/tn IfXtngSRMEUMz+heB9abutUEVE6ovOM1S9oyBcyHGFzRPwrF7b3w2m89oOR+oApSvoNx3Vvlh5i TLpF7xapuDi1rqBiD8A== X-Authority-Analysis: v=2.4 cv=JfWxbEKV c=1 sm=1 tr=0 ts=695bc7b0 cx=c_pps a=wuOIiItHwq1biOnFUQQHKA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=dYSpPNroVltAtaK4QdUA:9 a=QEXdDO2ut3YA:10 a=XD7yVLdPMpWraOa8Un9W:22 X-Proofpoint-ORIG-GUID: LDiY5hpeev2yyLjQa86ehnc289Tota8v X-Proofpoint-GUID: LDiY5hpeev2yyLjQa86ehnc289Tota8v X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-05_01,2026-01-05_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 adultscore=0 suspectscore=0 clxscore=1015 priorityscore=1501 malwarescore=0 lowpriorityscore=0 spamscore=0 impostorscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2601050125 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 --- drivers/reset/core.c | 38 ++++++++++++++------------------------ 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/drivers/reset/core.c b/drivers/reset/core.c index a53d445fbbfc4601c062e7e5f17278417bd37836..d712cf4315477ada98ef81975fd= 9b535db477e9a 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 access to other fields of this structure */ 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,8 +875,6 @@ static void __reset_control_release(struct kref *kref) refcnt); struct reset_controller_dev *rcdev; =20 - lockdep_assert_held(&reset_list_mutex); - scoped_guard(srcu, &rstc->srcu) { rcdev =3D rcu_replace_pointer(rstc->rcdev, NULL, true); if (rcdev) { @@ -882,15 +883,14 @@ static void __reset_control_release(struct kref *kref) } } =20 + mutex_destroy(&rstc->lock); synchronize_srcu(&rstc->srcu); cleanup_srcu_struct(&rstc->srcu); kfree(rstc); } =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); - if (IS_ERR_OR_NULL(rstc)) return; =20 @@ -1103,7 +1103,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; @@ -1168,8 +1168,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); @@ -1212,10 +1212,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; } @@ -1225,10 +1223,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 @@ -1246,9 +1242,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 @@ -1259,10 +1253,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 @@ -1481,10 +1473,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 Sun Feb 8 05:28:27 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 339BA17A309 for ; Mon, 5 Jan 2026 14:16:17 +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=1767622580; cv=none; b=PAuuT8AmSITfDsytEJjXorK7mMVQYGWKkIdS2PVsaFNXeGFCYcHzOFjAEdBff0ciBQZdhT48ZBLT6EPqE28TZGV5PeuenNIKg1MNaWQV0EI90I7JT+4nWMW9kjY6Yol+vHt5Dof283g1Fq+hbXq7lJIa9G+r4PKf6Cmt7OxDFPU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767622580; c=relaxed/simple; bh=pgnekJXJV5WSwdMMoVEOHaYHZmaW/aAfhIu0CL4Tmfw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IrzsQ2MWbBZ9CQaNMiI6FgxTMRGakBo0/dljQEJ3k9Vg4lUVd4LkUlxLYoRLerho2D6ikZ3gTvXbrXeFmv4LGm//s086Fbnm+1GqmzrkSOvGyxMloJ4nVlrPVbr3VgcS/4Ec6+cjJB3mB4UHoPXYXj9g9A84L1l7vx4WpXci49c= 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=HRSSpcWT; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=a7VOLvQ3; 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="HRSSpcWT"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="a7VOLvQ3" 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 605C0jfG3521011 for ; Mon, 5 Jan 2026 14:16: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= gQivS5zo1fP8O1RpZfNHxydqarHW4wJFdvy/JhSv8Sc=; b=HRSSpcWTj2dtPXPD RcvRCG14OvZJ2exicoGzsqNppQIMtoMQlsl8uHw0KqyVDD8oV1n5UXZmjKH1TN+A nyMgoohKh4lw+qgSfdOHKYJ1fIObk1y/1Ri0RKvMCJ7s7vIHqcOxZOw4nYCzdr5K 05NyC/YqTW0TOfQUK6NCpBq8r/oqyg2tn4RYPAsPYldRWsmfChEdvUFkgGhWUCwm bHNdO15Xtoy/T+VIFvHLNTEYlwL4OzxzoGdKQ0nb/vEb0eFGglD8oX0m2vFbk55b ZNk1WdkOmIp52lr0KHiMPVy4OsymlRVPGkz98+5HTzV2etZwOcM91J011ZKuooTk ShoTpw== Received: from mail-vk1-f199.google.com (mail-vk1-f199.google.com [209.85.221.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bg6uu9g96-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 05 Jan 2026 14:16:16 +0000 (GMT) Received: by mail-vk1-f199.google.com with SMTP id 71dfb90a1353d-559836d04dfso29850549e0c.0 for ; Mon, 05 Jan 2026 06:16:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767622576; x=1768227376; 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=gQivS5zo1fP8O1RpZfNHxydqarHW4wJFdvy/JhSv8Sc=; b=a7VOLvQ3LFQaRrWyG/dElV4pM2EToX8oRhOYwbokB5vNtE0Ksy/2hhAqcl00HmlLdV i3JlwbQ7AJn6xl3dPMzKgAJDOVNzulwiTZmLjMmRlqs8OAo26m3qNR5fBN2Dq0YBAR5k 8dSz/VlmPzogaYWsWlfhOCGZYE4FpH3Uk7D9DHGgr/ss594F4PCCaKxVbIWLJI24rZxC +vgw9bhutUQSEAy4lIm26bBpIutewREh+NGURkEcwyw2jrZALJPsSSsjSEy39VA84Y8+ P52qtTYQ04L2Ddi/qsCVWLLmB7MkTXi4W50pXN4as8Vpkb4qEuDnAn/oRg9MpfYm5Lpr zwBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767622576; x=1768227376; 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=gQivS5zo1fP8O1RpZfNHxydqarHW4wJFdvy/JhSv8Sc=; b=S3+8nMX+3+eNHo9wdSiqRNp8Kq/PP6bjSGixXN5Wr6eAdgDzSCXaGfS+JhdPQP5jWo TcDz4atrs15P4hWAbgCgZPZedIc2CLsiKkgvswBRccdhqMWfgMgEnXyOeNQzlgONWcZF JFEmx6JZw5mOXCFJJ6BF1GWiq+zqIn5IW3xvxzaHzTOQSCwj5x9OY2RG7unGn917EYzE UO7dqGnmomgVSSBQ9PIPeXo90HoD4BrRg5VTl2rotDQMwKknfiaL2yeYbDxl5ldHOdai 0q7lIeTzX2pI+SZOZcHmQX8y08DGzOcYiA9yb3yqVFTYNX9tJoMgrsuLrhLPySqBIiCi PjTA== X-Gm-Message-State: AOJu0YyI1mVPEUOGGpAL6JZ1hMBtFmUtCkN3nxdRotmSv3thoct+2NCG wPoFe2XsGdlqEFJ6YeBjLY8WGfCgHpVAFAjlEfhqYudKWkOHoAHtv1sgl+s5FlnGEYHHIC8zw2z caJzaafTqTLcdtn+VHRVhn1iuKeTtvq9y0QV0ZdPPnfw6y6EWsnzNprP+ynXwzbQ7AI7YLXfngq E= X-Gm-Gg: AY/fxX5iKgVaKUiDxRKesoTR1mimmM2AwtlL95fxHwd4qFvoUtWDwDvc/lgayakBIbO M+TTu3/C7fzrMwQS1Oq2NxMt4UzTVl0cp43Xog6jOG9wfrrYbNMAymJi649v6ov5K8OHfVQodOd /mbdGFSAjX6YpKJJu3UT545WtOjoq1UNMqYsXuBebWQzh4NHCoho6EIwsRILdM/rp2hRf7WYwGm ykQfNlIwnsOs0OqxiHGWglI1MBxr4D5If3HV2r7Yq4stnCLBn7Oghj8hupvXeGfPS/zTL5HAI0q GKWY2TbQIFHYYo6bOKXHB0/ezxIz1uVqMJ8FYJ9KClZMYtgwOqj3ppzFddnnH0iHCAwdx8gBpzT Wso59OYavYJzKFeiS+uNcAK0wIuEc/ZpGMYaBpLo= X-Received: by 2002:a05:6122:2a42:b0:55b:305b:4e35 with SMTP id 71dfb90a1353d-5615beb20f0mr15738435e0c.21.1767622575750; Mon, 05 Jan 2026 06:16:15 -0800 (PST) X-Google-Smtp-Source: AGHT+IF69nSVFET7CLl1nYUHU6W438djPIzzNvfLMw3dpUg4w+Ubgw+A3MhiTdXagE/3IVuszr19Vg== X-Received: by 2002:a05:6122:2a42:b0:55b:305b:4e35 with SMTP id 71dfb90a1353d-5615beb20f0mr15738407e0c.21.1767622575322; Mon, 05 Jan 2026 06:16:15 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:dd3b:c635:dd06:9574]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea1aef7sm100774703f8f.7.2026.01.05.06.16.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 Jan 2026 06:16:14 -0800 (PST) From: Bartosz Golaszewski Date: Mon, 05 Jan 2026 15:15:31 +0100 Subject: [PATCH 12/15] 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: <20260105-reset-core-refactor-v1-12-ac443103498d@oss.qualcomm.com> References: <20260105-reset-core-refactor-v1-0-ac443103498d@oss.qualcomm.com> In-Reply-To: <20260105-reset-core-refactor-v1-0-ac443103498d@oss.qualcomm.com> To: Krzysztof Kozlowski , Philipp Zabel Cc: linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2871; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=pgnekJXJV5WSwdMMoVEOHaYHZmaW/aAfhIu0CL4Tmfw=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpW8eew2mPqhhx8AUbXcu4ct8xN84Hpbq+fItoa z2Hof4MLjCJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaVvHngAKCRAFnS7L/zaE w0+zD/9Tvzf8dTwaes1I/DSjhlF/mRwPwsPepuR7yspXU4LyEhTNDIMh3KWI+aChCakWh6P8E7A QGaHTl/2YETOqDjLfRNdy2iRJFTfTN2DF+GEEys6NURnOzporMFVQYmrhWG1ufnFAMO6zEpuZYS 6KrLxgQotTKC36p9dUSnKTRq/IaM6F/fEt+qhQ84WI2HoyMgMi6TJwUQmSPFo9UzsoKbsKF4fZ8 NKIzSUE5STMeRhFIVZ/tBVIGgsRxFINik/mwIdW0sIuog2/vxKqczQY/X/GYa4dJDkLWUt5hynE vpaXY93f7MyHKqcxgp4/7T7x1c9MMJhDEJ+HVKDEJj5k55Td04xUWDBsUA2xdOJccvMqihc12hx 5INrBZjHENTbBuK7GN5Eh6adSJfbQFroXUOcltYqi/qf/OMSKGeHPQrZfgLTikORKRaudMRBgpx YQPMpxPEqopvv/+fhHxjy7x1a/v7GxlzATqD2TV6yxkuXnGGcKvqxch8OSss55a9YgpZFISbGAK 1NZXz8AcMEW4ijLs35bJ8ILL8gQgRxscNuFePjromWeEyc5eZzXjWthOmVslI6v19RlDUtb/5MA m2ah2/yLTOPIT96F1+TIueL1GUHTZXQ06ZseuyqIbMNGw3oSjNaEQyQddgwBWlMo78ryQ721sEo dVVzNQvz584PO1g== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTA1MDEyNSBTYWx0ZWRfX4YQHSPE9qEe6 sj0Zr7VhrvenqlN+ByFb+B47iRThwisPI4u6PvpszP9gd4Uju+AogJ5lnlpjg8kUUn9hKcWOZD8 NSDHmpVdM+6trwns1rg6wq7lvnwmVi0w5fQ0lzEVnEq5kCbj9LIASdKNLJlOvTvhDAKMgvjT37F 7uC42ezLmtv+nGu2UoFimnrp4+S1PeqLJxQ6F/CuiZZFtsFVSqGXjffdq22cFIkf8enKzGBkHdg 6aXjF8Ita6ALL5V/EU26taVmhTBs5u/U3/FxBxHZqx5UKsXZHBRhj9nmteUByEylnXe1os1PSpn lSOxoNdHuBhJT4M2Pc3lhW/k67IkSkpQ3qYOWfnXSbKae3fcO+rCa8hIf2bKfKNMAWMWdieNtqB QloHftB+D5ElWlrcOZVsT4ULjAVJM+UYhExC+XaO0nAnqzqJetczs9P5FlIWI2GynMvaqHzahaN UQrZW142Hvbv8cc4jQg== X-Authority-Analysis: v=2.4 cv=eZ8wvrEH c=1 sm=1 tr=0 ts=695bc7b0 cx=c_pps a=+D9SDfe9YZWTjADjLiQY5g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=xt4VrH2ZgDK96Vd3V1EA:9 a=QEXdDO2ut3YA:10 a=vmgOmaN-Xu0dpDh8OwbV:22 X-Proofpoint-GUID: JyMrj8wSNBqEtPslrjbqqas9jLiL7aWD X-Proofpoint-ORIG-GUID: JyMrj8wSNBqEtPslrjbqqas9jLiL7aWD X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-05_01,2026-01-05_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 adultscore=0 phishscore=0 clxscore=1015 impostorscore=0 suspectscore=0 lowpriorityscore=0 priorityscore=1501 spamscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2601050125 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. 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 d712cf4315477ada98ef81975fd9b535db477e9a..e29b305e4f80558e0ea33efd547= ca3f4eed1cfd3 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 @@ -1415,21 +1417,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 @@ -1453,7 +1469,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 @@ -1527,8 +1543,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 Sun Feb 8 05:28:27 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 E3E1E137930 for ; Mon, 5 Jan 2026 14:16:18 +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=1767622581; cv=none; b=Q93yIH5XXYrr4h+MNykSsJKVLKDOItVHLXxMggRQm+f9h+vWNKqTMQR43z6u7WO+G7fg4Ox8QFq3T7dO0MlK3jjCSU+HBPAWx+NJTDS0jV2/+vCOnq7vZGNw6/46JC5gKb4Mg+icCKX1wVREG9BzCgQVuLUXFWQgiaGcGZxE8kY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767622581; c=relaxed/simple; bh=9IphWuAB8jxPLxh5orATNPyne2wf5XYDVDfrxVCS5wg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hup0Aea4iBOcqK05y2tQgSDkuGQhYfsWKxHOVr05pdCt6BV2XLP801BykVIeNQbtfcql+KUyN4Lw5GlY/8Jr1q8NduwXxGTOQS6SQ2NZymlqChopX2sj+gN0X9ITJvqIh0hB4XdujMnblOKOphjcUACT3vmldunfRy1BKQ9d9v0= 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=Uu0Ww3kk; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=YITokqAd; 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="Uu0Ww3kk"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="YITokqAd" Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 6058NV563819432 for ; Mon, 5 Jan 2026 14:16:17 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= aJMlJWojOww2XVpQXBRvybNLvUzPxS+CbbYSA4bVPpc=; b=Uu0Ww3kkck7leIa3 k365kuvSXWkdhRSLldTON9lhX5lE9carIvb3C2JH+jkjcbIsdPsTqjgk21Q1s59I vNUt22mz+bW5CBN6Rnb/BgbJMfqWzsLNHmn/C8JpaRLdJ55FUpzvqxd6ls7dRLcW LRNK+9Bf8+4NF66EV7KU52SkqD0dAZiYZwI31nWipoQIDYhHujVkammhEse5runO aJw9t/2M/9uiRu2TlljIL5Sm0C/Y6rVed0BXAfooMgO6MHqz7fJfz7IAzgl6qO6f ejTtuxHAV0/faZ14gWP1xhmaAj/KRsTpyOuBWUKOXewuWNsEK6LiRwAhD3eiG5Tw SYgkMw== Received: from mail-vs1-f69.google.com (mail-vs1-f69.google.com [209.85.217.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bfyx0j601-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 05 Jan 2026 14:16:17 +0000 (GMT) Received: by mail-vs1-f69.google.com with SMTP id ada2fe7eead31-5e9e12601d1so13656138137.3 for ; Mon, 05 Jan 2026 06:16:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767622577; x=1768227377; 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=aJMlJWojOww2XVpQXBRvybNLvUzPxS+CbbYSA4bVPpc=; b=YITokqAduxIVZ1fmdxg5qqmELLn/nQlMF/GCfzriEyHu6atTjetCsF/Jx5zeb+Yych RwwcWk++UgOzGa9zFJKhe+D6jPEYlYFvE4tuyCfkvsYZgKiUZ2FmbwvngCxWbdY0paYR 76EmV7HJD6RgwLiT/CLanZQdl3d5+jK22IwkSu7hqCFKYmoxPZN9GJzrAZXHNzxfuYSh wuwZ0GPMEQ2Am/zHNTvkAagzouJ6P4x08NNVwLci8GtEbOp7UQ4ZmpGYTqEPiV3AnJYW LLJCK0gMp3smSv4pcW33lAKi8dih129yLu63l/ZCypujrquVX80bxuotnRORRbZuBZYJ VoeQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767622577; x=1768227377; 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=aJMlJWojOww2XVpQXBRvybNLvUzPxS+CbbYSA4bVPpc=; b=fTKyY/dJ4FReS4Mqhrfd24n2eWhUQTACcazW7XmcUcoIAx5GU7VLReyu+AwPgq6NyJ //Yjt79xfH165xdvGe65EkVD+Ays6GdlIN29+2BPlHeLOIOEZ22xn8uRjFeszDy6QXLk 2ncNq8fCRkgyMV0PPvjwwmaLkahSWPldhPGFYsjg3e3c+frkAV9Rrqc9KJMO+Yyt4Bk1 cyvK4MEHOk9FQ2QLo5xN4s9VyRMQxUlP1ZE+nJeydhRGyeP7CNTtLDK1jR9C3c3/ApQX coPKGiuuFRUrGetOdduYqVdygww+mxw2A4CS3eAG5x+8z28mU07g5UStAFbLpz9QYEl5 zi2Q== X-Gm-Message-State: AOJu0YznqYsyCsqUN/bpjwOGVMkJDAMGui1vQ33bwLn5VJ5RBY/ZBKwV 7RdG/56P6YjE6JhSXpBc3FOHfpt0OueRUWhlPgGjld00wyYPIV6+Ne+qbuHlnXtvqsiSLejEi5R eppE6E82nTFkQH84FiPwGvOkXN7Rltubd6QH87bBpHz7XkMcTY5DVzcA9UCQKmYgvjzA= X-Gm-Gg: AY/fxX6ToT179Y9UFFgpb6ixOr0pIw9IqUqGAKuGjOGHzDU37oye/Fmc3B3ZWjYTGHi 5z35QHOfP+inPNabiCJrPUWjuLfx6cRi4fKqajXXaXzQ7xqRptvCl3I9PsVSG2moiG0J/5PLryU JEB4VLeBSiZt0AhM8uzLNtZV/11H8gjlRYtaYf7eChGmqXTOPLQ+JpXJYDNug/k2FuHyLpartVJ e4AxWq43lb8aOBIBVD6Zx4z8SK+mwMN2ABSD/LYE6B5NfotmA9jpzEGwd8Yt+Bp/ZU3a+T9NDOo /n9WaN0fGt1xQJi9SUxpxPMnqn2P5DdqiPAW76lbrG+1+2wIpfC5WeGBaWtDqubVDdyCIidya/c 5Y2Zum9xvX939AxkP3z7cyDG7JGqtqrR02+lN7HY= X-Received: by 2002:a05:6102:c91:b0:5db:e96a:8bfe with SMTP id ada2fe7eead31-5eb1a6436e0mr12382471137.13.1767622576817; Mon, 05 Jan 2026 06:16:16 -0800 (PST) X-Google-Smtp-Source: AGHT+IGLh+TBlfX5NhZG2zYMkKz4F9qjzontEibu7x33xdSM0tRAyAbgo3sDJI2vU9VIAPtynWHVGg== X-Received: by 2002:a05:6102:c91:b0:5db:e96a:8bfe with SMTP id ada2fe7eead31-5eb1a6436e0mr12382445137.13.1767622576308; Mon, 05 Jan 2026 06:16:16 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:dd3b:c635:dd06:9574]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea1aef7sm100774703f8f.7.2026.01.05.06.16.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 Jan 2026 06:16:15 -0800 (PST) From: Bartosz Golaszewski Date: Mon, 05 Jan 2026 15:15:32 +0100 Subject: [PATCH 13/15] 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: <20260105-reset-core-refactor-v1-13-ac443103498d@oss.qualcomm.com> References: <20260105-reset-core-refactor-v1-0-ac443103498d@oss.qualcomm.com> In-Reply-To: <20260105-reset-core-refactor-v1-0-ac443103498d@oss.qualcomm.com> To: Krzysztof Kozlowski , Philipp Zabel Cc: linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=11270; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=9IphWuAB8jxPLxh5orATNPyne2wf5XYDVDfrxVCS5wg=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpW8efp49gTtD5p85DGCMAe8c2eo7n9gHpTciRL SInTYX0AsKJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaVvHnwAKCRAFnS7L/zaE w8YUD/4s6vDLL+TcFbxbwN3RVcYqUxxqQf10Nts1dRIJ8yaRZZnzxKgM9hXmcQ8vWLpw7g3UBG3 IVHGxMwIfdZBqbiCwywaLk6+6BJV9xILtU7oecn0gisMV8ExDTIzrEmRpgHAMOKnUjg9YnZljjM kTAyrW6tx227Vx1QMxiWIgsUQ9aOm/g0MlJEkx0E3mw3Z+ZD8vWPedU5HCgHwUoFWmjjytO9fmN 4C6k6xEYm37gxJhgtITu9YSzuCaFe6cjua9qyTFKmgQ3GPIuoVaWGQWoZT6x+XgA2nsd9Ldvrmm stiWhGCbUkDpkeVCLXPW+AH1q2SSPc55xkqTYet1Dx/AvtVDP5HjxfSARz8VSw2hkIJ0lsv85gJ omKOX6DS7ne4TTkhRToQKzGaPoHt+/EWXZsQoXVDCfE43kwczT+3cFcxR0slgb5YH9nrn+PPCwZ 7t1WVaaGggfrbe18ambHDrrUUHd1u9molvfSYsWqe3/avgNnTLxOiGbWSbxqTdkR6kGyqIrlmQE 6cI3K0thwYC4mwfQTBt58K0b0Kkan3o5xaNAsEGnXLIzhEbOtxZMW38fNgDJao3Y1ZPOyWMkuiw BTrSSVUch4FjLyN+R0HiurH+jwgVH4Xa7+Y7qvbtlyjpPP5GNGpnBM7W+4dcIeAQ8Z5vaF5KriE bjcH5Y2U7KCIKcA== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Authority-Analysis: v=2.4 cv=CZYFJbrl c=1 sm=1 tr=0 ts=695bc7b1 cx=c_pps a=5HAIKLe1ejAbszaTRHs9Ug==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=jmokhBh6uMhyoXQoT5cA:9 a=QEXdDO2ut3YA:10 a=gYDTvv6II1OnSo0itH1n:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTA1MDEyNSBTYWx0ZWRfX/e89ebZngYY5 Asjv8uJvcClgCCivWvL1G4rHtS7/5SBnzuyrMA/zG1PkkL2HYAkjhtfJNly7zTWwrbyKeQOB7Ai I7+Ukhl0FMnQU30b/JHlSlK0F6EHLQ5/rQAB3o20LdCbdMnNjQVij+m6K4tqUycmDZ+6cWoyC27 4KQ5n2YtnAm36fRgv8BgkmpK7x8VMguaMW29t/iTHKvnst665QJKbnUmaONf5iNv826egTyTfOI mq8ta24dIWQkmaA+TBVf6/biMI47Gcz4o2qKWETLvtqmxaJZTNrNwZKGymdJcpor1RBKCB986ZZ eWwSsdlcyia8Fo29HspFSDAfp3Iq5RFnJkqyVcc2sN7BTRzKLDms1+kStwps9Z3Be83o3yboDi2 0hHhk0Vukk36ksXhB3Gd9qyoW/uAgiLTLKs2QcFf7XzsiwbZzTm8993S3l7WgvgaPjZXoloWhTP 7IgGYKGlOb2kfLEXPmw== X-Proofpoint-GUID: wfFBG1dsJfkcgqbBZJrwTm6CTMRUtIkp X-Proofpoint-ORIG-GUID: wfFBG1dsJfkcgqbBZJrwTm6CTMRUtIkp X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-05_01,2026-01-05_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 priorityscore=1501 spamscore=0 bulkscore=0 lowpriorityscore=0 impostorscore=0 suspectscore=0 adultscore=0 phishscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2601050125 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. Signed-off-by: Bartosz Golaszewski --- drivers/reset/core.c | 33 ++++++++++++++++++--------------- include/linux/reset.h | 43 ++++++++++++++++++++++++++++--------------- 2 files changed, 46 insertions(+), 30 deletions(-) diff --git a/drivers/reset/core.c b/drivers/reset/core.c index e29b305e4f80558e0ea33efd547ca3f4eed1cfd3..11c5bd0fe2b23e76db0b4739c5e= 34e478d83608b 100644 --- a/drivers/reset/core.c +++ b/drivers/reset/core.c @@ -1047,7 +1047,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); @@ -1100,18 +1100,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) { @@ -1178,7 +1179,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) @@ -1186,12 +1187,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); } @@ -1453,23 +1455,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 @@ -1479,7 +1482,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; @@ -1496,7 +1499,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 @@ -1520,7 +1523,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 Sun Feb 8 05:28:27 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 DCB322E7179 for ; Mon, 5 Jan 2026 14:16:21 +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=1767622585; cv=none; b=D2paZJ2ebluY2KvHkE6R9CAr4UkT7A0gGw2Q++Ojuoj9eJ3JkjIodrrdCJgM0ZDGwkjDJJYMRqmTogdu73x6/GeglqGbn4tgaXqumuwCO8jUTNYmjuNZoRuzSFv8E61In9GSSWS70yNcSTJkQPvHVhC0umFnQ1OFyMwWfPVAIfE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767622585; c=relaxed/simple; bh=XpQOedqiqilgQAGLdUIy5qGWiwRiz0JVfLqf9eSpIzI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=fNTqtHWaokWCNz+fipkHj1lL6kV+zG6VeX5vdqomsK0ZVFRduhqtkKKFAdqjtf0anPGep/w4AOdOzkyuiDINAoRD35gPRCtgyl0v9GrhthQ8FZjO0sTJ1cKz1SIgYPJIm13GItFiSInmTWevLKJfJUdSD45pQ+754k1SI0b4IFc= 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=KtB1dMds; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=gUsv5aCa; 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="KtB1dMds"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="gUsv5aCa" 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 6059co3u610507 for ; Mon, 5 Jan 2026 14:16:21 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= 97i8zO0OGZluEWL25+YjUnEjd3xeNV0RVa8LxVTiEhQ=; b=KtB1dMdsum2nQCpy W71/BfeUU5il/wQ9D6ewTr/OcpILC40BoiLutfhsKPNGFzSrxPzZvpCUOzVk17FQ wTAifTFIClKHiaFducQ8my1GMgnfSbQD73w4e33u12TocKCOjrx2Owal2RhuxXDo u7LdFOzwQPpfQuCE/ARWoNyZAfJmyLizbSTHj+s439HMROZ2SQ5gi7HGBVTkEMgw Aj2Vu+e229M4Lr0pBAaiBxkN6AAytSSYpk3ZiKW32Onpquse3uPlZsQJO6C1Xhzc iQRStEbGSk/ubA42eR7EZnsV1uRjsu9IRtqimWZ249CiFzJMIee0Ss4bWLyI8vSv CHUHOw== Received: from mail-vk1-f197.google.com (mail-vk1-f197.google.com [209.85.221.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bgaus0p1x-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 05 Jan 2026 14:16:20 +0000 (GMT) Received: by mail-vk1-f197.google.com with SMTP id 71dfb90a1353d-5602cf6f011so12909084e0c.0 for ; Mon, 05 Jan 2026 06:16:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767622580; x=1768227380; 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=97i8zO0OGZluEWL25+YjUnEjd3xeNV0RVa8LxVTiEhQ=; b=gUsv5aCamxHEZjoJ+9WJhavGY/Ev/2rUiaa6iuTpZDoj3gARpbX23Ys57NKFCbkY7K qQPlfaLDigfboRMWTqO8nm7HPHar7/eD9MAbKZdYo+AI2Sca2xb7F7UYYGH6q9k9WSEi Y941rk5h8d2lT9j27Tp/PUv+3DCn/XFhUSLVpLh2E+oC73KN7MNr/ZX9TF9C/UiEVj2U a4YJv7lJl5EKEHUeBGrGBErd7rtY6npmMx7J6x784QWnspf9FD8aJpFMRddyGiHT/W6j zKOqecb9E2wnUdZtWzeGTl+hNn7w/eR3nfqrnKZ1Gz8uUEN21kT51hbtCThHf8H7WhUJ A5fA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767622580; x=1768227380; 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=97i8zO0OGZluEWL25+YjUnEjd3xeNV0RVa8LxVTiEhQ=; b=CjmNQ1QJ0tW9eJwIs2XFMiZkiPf32YjWp7Am5L79iHlkZStShcQWjAIeUHCexHGNsW uPY2zDn303cg71p+ALE0Q2rSdKYDWizpteQ8J+5cxAbzDNxGYNdot1ZVyIpO0k5tntVN dBGu8a0/XU7D3bgJN0Sz30DHHqMYklGHdd+3pPhpqNCfjxE8qSE2k2Nc8xUSpye9/JAb gLVx5t6DXidOuMAtwngfIgpKMdOLrctFBw7xIyV53gx09mXwc20gqGJlpHbEn+/jJd9/ eL4Qubnfovc7Z7mkX3DwOpNnONJphVRjvoXPu532eqzuTQYDTYx9dvJESXyf/BKhvsBB pwqA== X-Gm-Message-State: AOJu0YwUn5W+eokJZKQ3uXJMZWCPrABztKemy+yd3HOJHhPY6teoKS+R O9ivcawo6nf2rwb44EXn1+mNxFEr0QXYQcKMzsDtSbz5hRNHa3LuG4k/yCoFSVmgnSc7NZ1JpRz SviEN7BvjdxrMfJBsAe45aWJWRp8dpoLpsieFhKW1u1YMhgD4qHy9L0HACrUB/rgALdw= X-Gm-Gg: AY/fxX7Ig3IOTFgAf26P6GlmGuYNhLRFOzQ7aN3s6dZTYZzlWqlChJVA6ELDiwrPD7j Ue3rR88HNmSOqEo9OHxZct8axLS7+3OdrsgHnZXlLsCes+yf7lnkECe2XVOJi8ceFRY3ZTw4GhM dCZw79L0VVJVXWrZxNRBK4QMQ/YGlzai0ksxDPakCs9OkVzsyqReSC/4SlGAiJeQtk3wIqK6NWL 8FlEevzoqbaMXVHe8gPzk1KvCeDARI02xn8iibpkJwWtM/27hQCYSRFZYokFy1ILKPJRGv6cDBx T5RKILFUriu+03A2JPBqgq/kwa4jX2PrcXzOiQ0sXvuC5+o+Vk4F3I8TutzwU4qxxCtDGE7NkfT YmlJnfLP0/lisred5SGB3mbxc21hOoDvnq+xrlsA= X-Received: by 2002:a05:6122:2509:b0:54a:a178:3c9f with SMTP id 71dfb90a1353d-5615be82111mr12125181e0c.15.1767622578306; Mon, 05 Jan 2026 06:16:18 -0800 (PST) X-Google-Smtp-Source: AGHT+IGAIQKbta252zaXvoz7jKCpA/SvfITdNs4kmnMVjsvtq3vZEo+X+Pey3kOqwk9FFSutOObqXg== X-Received: by 2002:a05:6122:2509:b0:54a:a178:3c9f with SMTP id 71dfb90a1353d-5615be82111mr12125154e0c.15.1767622577742; Mon, 05 Jan 2026 06:16:17 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:dd3b:c635:dd06:9574]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea1aef7sm100774703f8f.7.2026.01.05.06.16.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 Jan 2026 06:16:17 -0800 (PST) From: Bartosz Golaszewski Date: Mon, 05 Jan 2026 15:15:33 +0100 Subject: [PATCH 14/15] 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: <20260105-reset-core-refactor-v1-14-ac443103498d@oss.qualcomm.com> References: <20260105-reset-core-refactor-v1-0-ac443103498d@oss.qualcomm.com> In-Reply-To: <20260105-reset-core-refactor-v1-0-ac443103498d@oss.qualcomm.com> To: Krzysztof Kozlowski , Philipp Zabel Cc: linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=15260; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=XpQOedqiqilgQAGLdUIy5qGWiwRiz0JVfLqf9eSpIzI=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpW8eg11qNMKTpA/TqqeBAzpodXIFMVk1SO97Fb j4lCAVg3KaJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaVvHoAAKCRAFnS7L/zaE w5ooD/0Y3Gnw59jYUHUb2Byzl+G30FqNOTeKnTTt6k40F27MtlTtX+E6ljtK4Zgtop0ilZUdY8D Si4B3laXFcimteJDX2b+yTxXHWwgiw1B4UBeXYBUOzg8RJhpqN3FCIYJkfV+MPUX0V3h4LEy+94 6PLKXBlAFuk319fIIbjVC4Hv7UquK3atcMHV4E0xCFJQTf0xiUA03Vdux2mJW5BqsIKo8Uw25uG X0A9vMt4QI8NsA7s/cG+fJWO1UYFRd4okAV5Ef337bQ2mP+M8j09q+y937NZ8KknQ0XIeDAVPME cVxT0zmLg/trPjNBvAdIUKzokUh9SBpaEv7HW0kW9dhCXp8k8iEJ2RZrwEcp7M4MzLXWmvmGe5s L89F4jKnziUcOUQSEvk01exEe3YN8xCBNGkOYgrZHc0swCoYuCNRcDsh9f6GE28KIeods5iija+ D1D/sEVaoUFeZ57NuqkGuId6ldIogHw1WeA7uuj9WCU55v7yYxyz2bUuqGxMxEzm+VsH15qr+J3 Qufm0GLaarsfcMl3GrPHkIUt1G1ZG7N3rT+y0PhzayaZf0Yw9Ce4F3ANLFTy4XuVlYD3I8MsjUl 2//QOgqj/sUrP8fIdniXlp5ZODH07OlvDN8iFdlIQogIsAcDB/iV/oxFpv4ObPXhuVMSNbm95V0 arpUnhLEb1hJqYQ== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-ORIG-GUID: FP3PJm3o_9yoxlkp_4beMlvtkkx4rgfi X-Authority-Analysis: v=2.4 cv=DP6CIiNb c=1 sm=1 tr=0 ts=695bc7b4 cx=c_pps a=JIY1xp/sjQ9K5JH4t62bdg==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=EAxQ06SQvwH9g5cYwaQA:9 a=QEXdDO2ut3YA:10 a=tNoRWFLymzeba-QzToBc:22 X-Proofpoint-GUID: FP3PJm3o_9yoxlkp_4beMlvtkkx4rgfi X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTA1MDEyNSBTYWx0ZWRfX+Mf5Jb/HLSSX d/XM2VQ6uxb0gWHunHF+ZnxItVrLex47VTlGRg1zpNajLrDoaqlCe2eiQ5SSM3jxLZSv/q6rYz6 15w07i5u7YVjPhZ3QYIydl97rFhfi2wopkDCThvrSez/D7i47tUAvPj4y4IJ+tY3TygTub04OzD VMHiysQaZZZ0iJHVhLDRcvohoNeFr4rAA+C7W/2kFAjwgSQOkGl9UFvHL57OJ1rB/WDQknPeOdW 0oOzY7qLbhFcNQII7hVimC2vdBl7YGEXf+K7IFalbA5txap+XnmRAgHGPp8O1Pc+5c4QpVi5dnq dMlumgirzVDutvhVw1QqUep0psxUFYVys9S8zMeRGFtQmKWACjAIK2xJY6W1icOze25XdKIwYkX ruOkPcoGmUc9a3rU7YmZ8jDHQyzuiepwR0XhjdSFQ5XmVNUB+/INTujgdwkid/H2wkw1yb9Qi6m lAVT7Oz5ChTOKyk+bTg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-05_01,2026-01-05_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 priorityscore=1501 clxscore=1015 impostorscore=0 malwarescore=0 phishscore=0 adultscore=0 spamscore=0 suspectscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2601050125 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 --- drivers/reset/core.c | 150 +++++++++++++++++++++++------------= ---- include/linux/reset-controller.h | 14 +++- 2 files changed, 101 insertions(+), 63 deletions(-) diff --git a/drivers/reset/core.c b/drivers/reset/core.c index 11c5bd0fe2b23e76db0b4739c5e34e478d83608b..310434ba5caae716a21e4f8ea70= 62dd201fb1f2c 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 + * This static translation function is used by default if fwnode_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. */ -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,17 @@ 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 =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); @@ -917,7 +925,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 @@ -937,18 +945,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)) @@ -968,15 +976,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; @@ -987,7 +1003,7 @@ static int __reset_add_reset_gpio_device(struct device= _node *np, * args[1]: GPIO flags * TODO: Handle other cases. */ - if (args->args_count !=3D 2) + if (args->nargs !=3D 2) return -ENOENT; =20 /* @@ -998,7 +1014,7 @@ static int __reset_add_reset_gpio_device(struct device= _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 @@ -1008,33 +1024,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); @@ -1044,43 +1058,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 reset_controller_dev *rcdev; - struct of_phandle_args *rc_args; + struct fwnode_reference_args *rc_args; =20 lockdep_assert_held(&reset_list_mutex); =20 @@ -1088,10 +1102,10 @@ static struct reset_controller_dev *__reset_find_rc= dev(const struct of_phandle_a if (gpio_fallback && 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; } } @@ -1105,27 +1119,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) { @@ -1136,14 +1149,14 @@ __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) { rstc =3D ERR_PTR(ret); goto out_put; @@ -1158,12 +1171,27 @@ __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; @@ -1175,7 +1203,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 2fecb4edeba1a2b1f5f5db2b34c867362c5f9c18..2f7a1217d0ec6dba4f8831fb8c6= 6308188f7a339 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: synchronizes concurrent access to the structure's fields */ @@ -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 Sun Feb 8 05:28:27 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 7B9B12C0307 for ; Mon, 5 Jan 2026 14:16:21 +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=1767622583; cv=none; b=MVYh09LUYhENQXQAX6e7481hlW6uA/joM67H8sSRV9nSkmYByLdAtcLMFX04HykSLuqMaIjUvxDNoioxJ5NDB3T17XxiiOBP8hbHdlVZZ3wZ1ZLJjyfUpN16wF99k+Jx0QWNPktreEKffiWD7Jl1wJ8ddNB37V4gW/G8IJ14TEk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767622583; c=relaxed/simple; bh=PL8hF+fJA2FJDhOtWM3MapGcJuA5ho1QtaojQ/yJQ8o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=j5uyv9bbiRyuZB1jhqoxmqn/QD+RXOPpHCzNkPLCQmRIAceuGswJsbaeviWDSCof5Zh7X7iN3IWMcY1b8kItFFwuQE4b6UqDH1lLjXshHAkWA6TbkkPLQpygndNpPf17UraD4zA0LykYwE4DkqYNuODceDZ7mYN5PK3nF7N4EbQ= 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=jDubi7Ss; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=dh8Pfyzu; 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="jDubi7Ss"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="dh8Pfyzu" Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 605AJBaC091785 for ; Mon, 5 Jan 2026 14:16: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= EBbNKDXYG1Wgmmz6PIH9NZ6Q6sdXcGyHQXH163SUHYY=; b=jDubi7Ssh2PjZLtb yyUd1GQao7fa2fFerwsmzGTqoX3Dnp+qb192zLUFtQ2kDh6moHF9tER5hDgy2/CU 7IdemNH+D3M6IKkW/n/1AjfMgSBC+M/kRTF8ZRMFnFeEyy9rdCj1k1EfoC9OjNoS mulHEktWmx77KimbIKjzK/sU3QjUgeZKQ8KOtchr4SODbELr8Y+mU0H+/a+0QHWJ 6BVRMO8H3qupVpjFZVVEjRhTlYHpYN/A1bXZBZWedkbrUHKKNHwXCESlaDE5gG9m rCFV/LBlOmqBTczd0NnwPjZAQiVkNNn3eVjSUk5kkUM6f+fgWKmelMdCjpXz87HV +ohZmg== Received: from mail-vk1-f199.google.com (mail-vk1-f199.google.com [209.85.221.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4bg4v61r3x-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 05 Jan 2026 14:16:20 +0000 (GMT) Received: by mail-vk1-f199.google.com with SMTP id 71dfb90a1353d-5597ace71e0so33857689e0c.1 for ; Mon, 05 Jan 2026 06:16:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1767622580; x=1768227380; 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=EBbNKDXYG1Wgmmz6PIH9NZ6Q6sdXcGyHQXH163SUHYY=; b=dh8Pfyzu9oIiCJMFGKoVD347KuuqkQga88azztK2jqGNcAfx8wcP1896ZwjV2kU6f6 QLVbMMr1K1eUY0SYuXjmtt/pnbUEDY2CNXxb/QfP+bX29WFtV0PXCzKcNrmN+8hXmStM v0gHrJOSKu9G5LdiWZg6Nr4k+nHcxRj555VYkYkmUX+wXFkZxsdIE0vCJ8pab/JtyOzb N+TopQgFZmJyuzqxhEMMPYGB2lwDAJLW39mjPefAMgLxjZAX5Z9oVcWV/S9h9tyrUNiv Ir0uAI5dsGl4kzTTaiNmzwua1nFwJyYExXnL+zph9fUjHYLgCLBo10TvI9DclfrVMoqz id+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767622580; x=1768227380; 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=EBbNKDXYG1Wgmmz6PIH9NZ6Q6sdXcGyHQXH163SUHYY=; b=jDCJmJfswe44apWdOb139qxejYrEk+9Qg+//y3mnstMW9J+r6IPOlEBc5Z26cEwMgM bvSjCGrjVjBu9IjRrxDj7XmEhxZdPaZns4MP9AlNWtquiZ8GMn3f+jXSBDmi5GSwfvz1 8G2i3fYoEzVss17hHz4OGrvhDi5+XiKCw4QHo2562teaxuqoXGL1qU/jL2v3wnaGm6eO ZkUYlMFIsv0w4WX16M39DXWUpG/Ak6gAJnpF2MUMTdm25E0V3t47jXCW4vuLVXaLul68 4Xuklu1kv2A6x9WUOJfMqaPk7vqzy8qdwVc07fw886L6Xfjt8holD7RTv1ejVSzREAGY Fz1Q== X-Gm-Message-State: AOJu0Yysmw5ZegeFAUddrQrVFpKLwRPPZ/xHY7ESOsuf9lHW56oGi+mA /9HcCzHhtmsYre1HUAs+EEOLDFu8oBz9qr1ReTPSX28nDfKVj1FRFr4IdnbmEzS6lTKb+ZLsYfY zsrgC5uS3UlcW64Su6LqIBx57q1IjeUm/EwxnnJ9hFpBYF9z5JgdYzaWmF+1617CalZ81J2V36B g= X-Gm-Gg: AY/fxX59xykE6KzN7R4Xr42RiKd4PinEhC99id23IImv3ccnuXcct5BdTaHFDeee49h 7qK6kSEo5IPI+ONJJm/t08bNlk6gpH8SOBPbcteiwmbq9ALygu226grfCDTP/7O/UeGqwAXpQaC ZAAn+WG/8MXKpRAJTUKoyBwfCwa472oFEhpcfnsG5aie9+fvIccJ2T7TVouoPaB+H66M2jRNYvG gWuB6AVB0aQ1xWRo8UN2PipKzsXuJ3+Oab0OTrIChj5pGshZ5YHdPRiJy3aI0MdErziPMj3kFyX PHx8x1smdzoKEimwXTZYLkAsX6EviFtVingBH6Z8Th/loMRmxrPfXUgS1Lq7X1nSqGZdwgtboso NCUuwSeEZnmh63EYnt/p1JuWzfFgclr+k6LGtdtM= X-Received: by 2002:a05:6122:3b8c:b0:55e:7266:bab8 with SMTP id 71dfb90a1353d-5615bd1af91mr17789698e0c.1.1767622579637; Mon, 05 Jan 2026 06:16:19 -0800 (PST) X-Google-Smtp-Source: AGHT+IHR4k57pVJHBtHmd91nEgALv67ns5aScVqgjD9FB+I011xn3hV5prg25wBx2OP+4A9q/gcOHw== X-Received: by 2002:a05:6122:3b8c:b0:55e:7266:bab8 with SMTP id 71dfb90a1353d-5615bd1af91mr17789656e0c.1.1767622578698; Mon, 05 Jan 2026 06:16:18 -0800 (PST) Received: from brgl-qcom.local ([2a01:cb1d:dc:7e00:dd3b:c635:dd06:9574]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea1aef7sm100774703f8f.7.2026.01.05.06.16.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 05 Jan 2026 06:16:18 -0800 (PST) From: Bartosz Golaszewski Date: Mon, 05 Jan 2026 15:15:34 +0100 Subject: [PATCH 15/15] 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: <20260105-reset-core-refactor-v1-15-ac443103498d@oss.qualcomm.com> References: <20260105-reset-core-refactor-v1-0-ac443103498d@oss.qualcomm.com> In-Reply-To: <20260105-reset-core-refactor-v1-0-ac443103498d@oss.qualcomm.com> To: Krzysztof Kozlowski , Philipp Zabel Cc: linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1666; i=bartosz.golaszewski@oss.qualcomm.com; h=from:subject:message-id; bh=PL8hF+fJA2FJDhOtWM3MapGcJuA5ho1QtaojQ/yJQ8o=; b=owEBbQKS/ZANAwAKAQWdLsv/NoTDAcsmYgBpW8egzrDNredEc72wMXU3BsxczJnlMWLLGbON7 OogsT8/zBaJAjMEAAEKAB0WIQSR5RMt5bVGHXuiZfwFnS7L/zaEwwUCaVvHoAAKCRAFnS7L/zaE w/KwD/9bcYfDiAxz5T3kBIaVYb3m8xi4drSp4a0V+Ngrf5ARcfs6/scDIrAwu1iUXtCjlMJA3BK qJwdXZCtzRki/Aa96Vut/x6zbLdcSpOFSTYKtAbeYWXCC7p6p04qMdckdqvIoHOKV+Ut56OcRGg j0hUdtkcWCelfr2Dk4ZJs4YYV//nOPWGuinJb6DPV4sfqvJtOggQ/UBn2JRC8seRuKgucHAhax6 QNGgn8elHhd+/zlLghG2HloYy64mpsx+fFeB3VC9Fe2bh1YOEOSnGAZdjo1VMwQ1B7sImTDRfXY 32BTi2Xf+EsNyGfAYvoqGC9zgWv3ACoKBGMNScM4WXg5fBjunSBnDHtO0JfUHT+tAMST5GVL4zz n3TQkwC0SgMB/dMmyJ7bnFAehgAKhC4KSS16IZ3L9n2+TMcBtAscp/YbiGJyQh5tu8wgH2JFtw5 BGURkHs5U8Rxt1s0ov0I/53+kV3Etjjdx7nX7CyRA6PCKuM8MXfhg/mpTD8eMdTuWz6wFPrMeB0 wXJbGsJWP0Y0vubV6j/Vcbe0irHTrnzHjoTNGVZEORKJg5Y/Tz21/LoNziNRYIxlwi7/1h8lOQb d9b9Ki425dg1Q18hCgrNw2zct5IhpXDf7cZEKygwBXdjZwUZEaqxBlzy9o3yubnj8e09nJGjYUE kn1mOR/lYn66MdA== X-Developer-Key: i=bartosz.golaszewski@oss.qualcomm.com; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTA1MDEyNSBTYWx0ZWRfXzmgVTiMk7taF efTjb5lW40++hHW7hi99HgB+WzZ70jYzxmgIH7+vyt3d8HNC9Su7oyQ3NucKQR6A8/MHtxxePfT eZGj30kBCtfNI9XxgNkjnjKhRX42V+byqzQ4P7OMUzjyjUE5rj0GUGtC5m5AN8uhXXOFpp/x80W Xc+x/xYyhUpheUgqi4LvC0mlgfudPvGoh2vvHzz7yJmehdUs65S750r+XoX6K2V3KJF5JaRSa4E N3EV5ZzhbLkRIeVzweBJKc/H7DGWS2tirDu5CzZSbKhVhuCV7Ldl42wiKVd1FkzzVr8zip+SDmp lxmrVEbxXk89IS9QkEHldiXvKB3nTWACC53lD/v+9xS9cfK2zBiBdwtchfu229nSW4hrlZ6TMad 97nrVBl/Dc1Wg5b6ft3i5akcX2jIk1p5IH1ys2rFJ6YKO/BVIuzmcQPXXHhygfu4/SU1Q7fotbc XKn/iZVQ5JGkyFxLehQ== X-Proofpoint-ORIG-GUID: 1zMdzDhzyfs77aC0kQg3WZdTrlOPmZdL X-Authority-Analysis: v=2.4 cv=c4ymgB9l c=1 sm=1 tr=0 ts=695bc7b4 cx=c_pps a=+D9SDfe9YZWTjADjLiQY5g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=EUspDBNiAAAA:8 a=3hQubXxqK_WyehwcTsYA:9 a=QEXdDO2ut3YA:10 a=vmgOmaN-Xu0dpDh8OwbV:22 X-Proofpoint-GUID: 1zMdzDhzyfs77aC0kQg3WZdTrlOPmZdL X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-05_01,2026-01-05_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 suspectscore=0 adultscore=0 clxscore=1015 bulkscore=0 impostorscore=0 priorityscore=1501 phishscore=0 spamscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2601050125 With reset core now being able to work with firmware nodes, we can make reset-gpio node-agnostic and drop any OF dependencies. 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 6053a458b259f3876a14358cb4797bee8a2ee4de..b4cec1baaffaca20f57a0518fd1= af100585c9dca 100644 --- a/drivers/reset/reset-gpio.c +++ b/drivers/reset/reset-gpio.c @@ -2,9 +2,9 @@ =20 #include #include +#include #include #include -#include #include =20 struct reset_gpio_priv { @@ -50,8 +50,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]; } @@ -76,8 +76,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