From nobody Sun Oct 5 21:59:23 2025 Received: from mail-pf1-f180.google.com (mail-pf1-f180.google.com [209.85.210.180]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BB6582882D0 for ; Tue, 29 Jul 2025 09:51:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753782676; cv=none; b=SAp0RLXw6vHWOyxjGEho0fEmiGecXohjv37bDWIWb00sNpmhBDj0jn2RFX2WaUyvWYnIX4ahAomyyW+8gPWracZ8gMeKAWmYSWNqy1uXsdBGiO7McgzbTPs/O2qGi6w0VZ6fJAYQ7OC+lZ431OVZ4OkYJ8MATe+Kp5dqejSg8c0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753782676; c=relaxed/simple; bh=PPTY3EBWf/otaI/DRQ2USIoaVvA+G2t6tbNhqLyGWpk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bKqUHxn1CGuEkwMG8w391AkW6OxI8UTiUJMfohKuOLVF8rYpCMu1Y3YTCdnb6kZInMGsxln3nMKdYOa6OEDRQttC1jmlIPbv+KiakSqgTwyRaz/s9LJYZZJJEWGx9heZ7AGHpuwrcIVWFg32UdwesNy0rzp4WtehCDxgLmxF+cE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=beagleboard.org; spf=fail smtp.mailfrom=beagleboard.org; dkim=pass (2048-bit key) header.d=beagleboard-org.20230601.gappssmtp.com header.i=@beagleboard-org.20230601.gappssmtp.com header.b=Si5zKBPB; arc=none smtp.client-ip=209.85.210.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=beagleboard.org Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=beagleboard.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=beagleboard-org.20230601.gappssmtp.com header.i=@beagleboard-org.20230601.gappssmtp.com header.b="Si5zKBPB" Received: by mail-pf1-f180.google.com with SMTP id d2e1a72fcca58-749068b9b63so3639012b3a.0 for ; Tue, 29 Jul 2025 02:51:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=beagleboard-org.20230601.gappssmtp.com; s=20230601; t=1753782673; x=1754387473; 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=fhMEhDHuJe50c0Y9oEddnTStIZgEJGL8EToCa0MeNLo=; b=Si5zKBPBWkv3QYgz6sM+faPpFEXW7WEzHa8RnsnQ1Z19ByqgKHvUGp+jMwkwwQFSAt hk+LaoB5PIxJ19Uweakx/bB8Z6tQxAULt9Q1K42jDJ6pR5ak4MQeWyNrURNtPQixtR6f ORLxuMbBDUUn+iyNkdW0q4WYEjUljQaL3AhXC9wt3huWwiknbLdE2+eJrXuk41O507/R swA3k71486od3OFt7rO5JgQvyAJhP+IxfQTOQ1scbWvr3C6YLlpIPxYN1IOxVag880NV CscnfqV+zg457XXKmSQgC8V7iWpxV4WyRo6QOnO1ZjpMMnQ0q4Z6FGV2WRhZ2d3diTMk qJnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753782673; x=1754387473; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=fhMEhDHuJe50c0Y9oEddnTStIZgEJGL8EToCa0MeNLo=; b=FX2XZKi/LG/7EhA46C70pq52axXBNgLZDfEibV5KU9g9HicvkcZ46Q2A6fRZecqD4+ uOKvb2tee5dxMeiI0ZLm5fKVzo1ppUBpMtkS9+5Tc8wOtxiyQ/FQYy8XB1Z8F23mh3/5 wVSlJX+XQsLxQ2D5y0814YNxaKyFeNcrOUTRbbVuL6coBjshohgURKbgU2EfjkSiYiuZ nMLMxSzs0WQqWLT5xPfKafAN8QDolvAbBWBfUgn+SrrISiNPsnguZ+mbh1Ipz6JgTVB0 rt2AqZo7trnEBK/LZlOPn4EUHtl37+NwOaKKvydALVT0ertQL8Mta/uXt7C/8nzbqnee L7Nw== X-Forwarded-Encrypted: i=1; AJvYcCUcUoJHlB0K0hMQJkULFILx3JrbtwofiThPPw0rKd3tGbZNkM+n/7l0Jr288Me2gcUMeVQpVbj3gYSsyMA=@vger.kernel.org X-Gm-Message-State: AOJu0Yz7AJ7lvPoaEIO56mJhy0amA9vDWhstyrkaLeJDWjm5CvXwm4QP EbuVW9Qy7P6crSXGXxCZnTEGF2lS7lTmmkzGGjj+VE3HsELQi1CeShVRWIIr7+0+Kw== X-Gm-Gg: ASbGncvyqSNprgwS/29nbRjxcdG2z3oo6kMQqTdRrFJyL7CmxSrr71lxXBh3luzW7NM QPQukFSPEQlGlPhmBmSQ3qjIfAp+Rz87X0Z3WRE49vsBsWbApmX8pOnXSp4JPWFXeveBBEJt1PZ s86AaZYpX/5M0zTPXvHcWAkMcxKusq9Vr1UovFqI39tFvw4Zf65PjcFFk3IVvU9O4j7OWlMGxf0 HoPqTu4hLDw+piiENgZpfmioeU1fvlstgcFFoZKGgZoRa5WHAbkbD6KVY+gm1b7v/Jp+hchGaD4 gJkFhQiaf6BKkS0i5zXW2uU+PeQ2iOkHZ7ZnKeULrj+fNwWJ3cGsVO/3Z9x7QxxogB0RJnb09wE 0uklGHF3WegZ0XWmduIJ/pzScKL/eqlA= X-Google-Smtp-Source: AGHT+IGRuN4bMTuKrqYVdmJqVFT+qoKQgtcZpI2ah8oemY7i1w0uPXl3QS2dGd9gd7nItemsFz9mgw== X-Received: by 2002:a05:6a20:9389:b0:229:1130:7411 with SMTP id adf61e73a8af0-23d701be41bmr27749974637.31.1753782673040; Tue, 29 Jul 2025 02:51:13 -0700 (PDT) Received: from [192.168.1.6] ([2401:4900:8899:25fe:4fe5:6353:8b2b:942c]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7640b4c8762sm7614498b3a.117.2025.07.29.02.51.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Jul 2025 02:51:12 -0700 (PDT) From: Ayush Singh Date: Tue, 29 Jul 2025 15:21:00 +0530 Subject: [PATCH 1/4] spi: Follow spi-parent when retrieving a controller from node 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: <20250729-spi-bus-extension-v1-1-b20c73f2161a@beagleboard.org> References: <20250729-spi-bus-extension-v1-0-b20c73f2161a@beagleboard.org> In-Reply-To: <20250729-spi-bus-extension-v1-0-b20c73f2161a@beagleboard.org> To: Mark Brown , herve.codina@bootlin.com, luca.ceresoli@bootlin.com, conor+dt@kernel.org, Jason Kridner , Deepak Khatri , Dhruva Gole , Robert Nelson , Andrew Davis , Rob Herring , Krzysztof Kozlowski Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Ayush Singh X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3224; i=ayush@beagleboard.org; h=from:subject:message-id; bh=PPTY3EBWf/otaI/DRQ2USIoaVvA+G2t6tbNhqLyGWpk=; b=owEBbQKS/ZANAwAKAQXO9ceJ5Vp0AcsmYgBoiJmG5oK1u3pxCYpL6Jz9P9NBiai5vv4OQcoKS bZqdgUe5LiJAjMEAAEKAB0WIQTfzBMe8k8tZW+lBNYFzvXHieVadAUCaIiZhgAKCRAFzvXHieVa dBMxD/9iSM1YQUhhkrVc5EJX+S0biAoTFOAqBhj3SPxY6UyIhsMbskjA9OdK0Nhc9ZgGTSjW6MI LnogxUC1yOqUnn7B5R3ZW9NFIoahwD6ySrunNRFSHs857hFlJ+ruMvZjVcZncQG7y3Uz5kpVZn7 3B3gWpd/xTcGjF6liaZ/QNF6WicZnkekDp+NtIR7t7FQdf5KEQEuESSiXKR0cDF2GbvdGgUnrNa UlFvSf8N6iCHQJqlvyX7NIBmBlHDBzcYfV6kJY/NU6k5V1USzv5S7lY2gJdxTERIC93fr0pedP2 oGJS2tmkOiGgpqGdX6aHUTBotGWknshtgKh1pUFLvbN9Y0efCkj+WrHMZmWrVsLJVp2p/efcnEZ VUEk3C0ZaBWS6WhFfdKnl/JSBj5cjZ4zY1yqA2GfB7M4c3hrMKA6W5y5ER9EXJvB1Rrn5pjl4UZ uuu4fUpzTf7Htd9pQBzPvKsr/31tNIhQkFvVd3lBmpqVinvlGOUWYzg3aOWlC+vq7BmpmgWT5w6 T/v2YNDd+FftndKZ7eFHH2PBvSbdTCkkftLOv2btA94VhpDC725xzI4fpijPIeOUuWFq4cTmZ7x Q9IPS8UuriWMsfH0oGNJdQvTQ2x9nzrRdWOUOSniqC/OoHeagnojcFM1YTtIxFnNgd1I7wjyy4P kkHtdQUxvOIejvA== X-Developer-Key: i=ayush@beagleboard.org; a=openpgp; fpr=DFCC131EF24F2D656FA504D605CEF5C789E55A74 spi bus extension were introduced to decouple spi busses when they are wired to connectors. Combined with devicetree overlays, they introduce an additional level of indirection, which is needed to decouple the overlay (describing the hardware available on addon baord) and the base tree (describing resources provided to the addon board). For instance, the following devicetree fragment, available once overlays are applied, is legit: ``` spi1: spi@abcd0000 { compatible =3D "xyz,spi-ctrl"; spi-bus-extension@0 { reg =3D <0>; spi-bus =3D <&spi-ctrl>; }; ... }; connector { spi-ctrl { spi-parent =3D <&spi1>; #address-cells =3D <1>; #size-cells =3D <0>; spi-bus-extension@0 { reg =3D <0>; spi-bus =3D <&spi-other-connector>; }; device@1 { compatible =3D "xyz,foo"; reg =3D <1>; }; }; devices { other-connector { spi-at-other-connector { spi-parent =3D <&spi-ctrl>; #address-cells =3D <1>; #size-cells =3D <0>; device@2 { compatible =3D "xyz,bar"; reg =3D <2>; }; }; }; }; }; ``` Current implementation of of_find_spi_controller_by_node() supposes that the node parameter correspond to the adapter. This assumption is no more valid with spi bus extensions. Indeed, the node parameter can reference an spi bus extension node and not the related adapter. In the example, spi-ctrl and spi-at-other-connector nodes are chained bus extensions and those node can be passed to of_find_spi_controller_by_node() in order to get the related adapter (i.e the adapter handling the bus and its extensions: spi@abcd0000). Extend of_find_spi_controller_by_node() to perform the walking from the given node through spi-parent references up to the adapter. Signed-off-by: Ayush Singh --- drivers/spi/spi.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index a388f372b27a7f29d18f1dd5e862902811016fc6..0030e0be0d9b2f9e2b0c4a1d806= b42bdb4ecb5d2 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -4776,11 +4776,18 @@ static struct spi_device *of_find_spi_device_by_nod= e(struct device_node *node) /* The spi controllers are not using spi_bus, so we find it with another w= ay */ static struct spi_controller *of_find_spi_controller_by_node(struct device= _node *node) { + struct device_node *ctlr_node =3D node; struct device *dev; =20 - dev =3D class_find_device_by_of_node(&spi_controller_class, node); + while (of_property_present(ctlr_node, "spi-parent")) { + ctlr_node =3D of_parse_phandle(ctlr_node, "spi-parent", 0); + if (!ctlr_node) + return NULL; + } + + dev =3D class_find_device_by_of_node(&spi_controller_class, ctlr_node); if (!dev && IS_ENABLED(CONFIG_SPI_SLAVE)) - dev =3D class_find_device_by_of_node(&spi_target_class, node); + dev =3D class_find_device_by_of_node(&spi_target_class, ctlr_node); if (!dev) return NULL; =20 --=20 2.50.1 From nobody Sun Oct 5 21:59:23 2025 Received: from mail-pf1-f182.google.com (mail-pf1-f182.google.com [209.85.210.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E5E00288C38 for ; Tue, 29 Jul 2025 09:51:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753782680; cv=none; b=sjUXUQFiu3Wd02ty0mr9l1iR+7l3kv9HoOgnH29HhAoLjP/euwdKPauQu9W8OeHk3UhtNfcOPzEZJj8pmlBQi+QshyA+/iOVwv0v37JJD8qOPVbyR2V45cXV4v+dfIObxOp5+oAy27b9eBtyf/lxOCedePb2JK3TVus7FBx5vAk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753782680; c=relaxed/simple; bh=b/Mksh+F1LXb+8Jny3q81UBRPZONY8Vngy2QwjQfK8U=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZMYkkZA4/QOmjPfxPAZnRK04I3WZUZC7NmwRQMvqE8vXo8GMgzcQqnw7z4eM8di64ad8aPynkxShuV8eIVF5MAm5y+H3LwG1+34q3TMf+4sboC5fLXMnfpqCYAdVIQFB/1DgX7GYSS0dPJ6RNw+Bzvz2RNt6mM5Pk0oWTdbGEVo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=beagleboard.org; spf=fail smtp.mailfrom=beagleboard.org; dkim=pass (2048-bit key) header.d=beagleboard-org.20230601.gappssmtp.com header.i=@beagleboard-org.20230601.gappssmtp.com header.b=NU4g2+NN; arc=none smtp.client-ip=209.85.210.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=beagleboard.org Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=beagleboard.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=beagleboard-org.20230601.gappssmtp.com header.i=@beagleboard-org.20230601.gappssmtp.com header.b="NU4g2+NN" Received: by mail-pf1-f182.google.com with SMTP id d2e1a72fcca58-749248d06faso4605108b3a.2 for ; Tue, 29 Jul 2025 02:51:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=beagleboard-org.20230601.gappssmtp.com; s=20230601; t=1753782678; x=1754387478; 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=307W0kIt+xImUi0edOEACRFJ5jTo6uhrappdUP5dsBM=; b=NU4g2+NNcEi/idyLygqflupNagUOUWUlXn5odeh8PsOqI1yGJhR955WbXyK1w8ujzH 7PtR67xvEgowCSk7FOa5Hi8aqso0zTEQEfuoGQ+JJIveiAw9ZAphQO25FkFu/e8iQJTY ZJ/3DVQJkGl1bZaxiXf10iAMz45FU4pHnGzhsadMfqQMW2jEAe1kfSpGsYqf9ZFQWe+5 VehupuucBSNYgx9FICT2qTFrLoIr6QVMe8vIcxDySJsezuDbSVF5oDs0szta97Ghb5o5 LM/l45tnRDp74tcab2yFQiNvQnks29+Jf1Y1qs8UktV1rY8vZVAUACAt8T43+FNkGKJY D3ew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753782678; x=1754387478; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=307W0kIt+xImUi0edOEACRFJ5jTo6uhrappdUP5dsBM=; b=eXFjRZyr9MY141rA5PVhdKwy+rPcKwYtKgF62atlNhLtX3v5eY/vi/WhJZlDXLAkwP KCM2zfZvEbv8V31A/Gl1Ip4+WwjqvFCAfnLdT2aF8jfKvlQPrvC3iM4ZG4VykDIzvydL 1t8HsNjxWsGVILD0UR7IH3sh3LWkQOXleszfOejgYkUIpWNgj1ZKG2QHMiFiSiAtkGlo PmYrkYjhEl0JPtv2OZ/rdKwBXYQ+9/GcHg9g0TU29JKDU4aVTs/9IjlvBplUUDYQhM9I mkHHRiTWIEvJ1HJXtSPOFuk/MN0dMlJWsg7XU+sm/U94iFLMqyUIsIrr4/bLz1qXEeYp iPxQ== X-Forwarded-Encrypted: i=1; AJvYcCVkI4evgu9wAolQAPb09rG5YhKwDmgYvpVojPBvcfadBZDl201bfC9mxeZJZNoatgm0locAeO5p0vqoABA=@vger.kernel.org X-Gm-Message-State: AOJu0YzI7xuuSlG5mEXdy9wccnQ0jOGCqHdixZKb3XMjOCp0rIg+9jnQ LE0RkVmOn0bBJdoFuUixvKhkqdJnCx/K/NBNBW9X2OGu9f+EEAf+gHLyiQ5km0OjGQ== X-Gm-Gg: ASbGnct6McA3ldLTGkCb5VUC1IZX8nlQyoZpprDb/MyL5YEoV1aDGID9OBE4DlATuMz QLi230HpX6V3ZPpa5AEdGpIA0mpWXr28FWpkOg7IRNpn+q76yXEMZQbq71rArW+tz+iMo/tvCx/ 3k0XVvJ6ace0rJ/oerR11zcL6+bEjQwbZF2l8KxmPDW85iUWPcTNM46p2z7HRGT0ncIdkaf8Wj3 RbwJg0pbrkBT/uM30gDccD5PXuMZ25Kr0CBBW94IOKRCubON9EBQsYJzbEHKeIjFQRVyU6iu8RY B3p9RH2vFqfa1GvmlxbDPBMP5CWDS+JJQLG5o4hz2UPU4EXlzwgvy/JMmqYDN1Sq5rdD3jf9bAz AyDCb9URS8HAkwcjJMUBb26B4ebUrocE= X-Google-Smtp-Source: AGHT+IEjloV/Y1umCKUPUannzloeRYDv5MbEYRcKOlQp0hp38m8s+l0zTYHjRrwtPFRQbz3vBtZLAA== X-Received: by 2002:a05:6a00:92a3:b0:758:72b9:e5da with SMTP id d2e1a72fcca58-763349b9fa3mr17324141b3a.17.1753782678070; Tue, 29 Jul 2025 02:51:18 -0700 (PDT) Received: from [192.168.1.6] ([2401:4900:8899:25fe:4fe5:6353:8b2b:942c]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7640b4c8762sm7614498b3a.117.2025.07.29.02.51.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Jul 2025 02:51:17 -0700 (PDT) From: Ayush Singh Date: Tue, 29 Jul 2025 15:21:01 +0530 Subject: [PATCH 2/4] spi: Move children registration in a dedicated function 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: <20250729-spi-bus-extension-v1-2-b20c73f2161a@beagleboard.org> References: <20250729-spi-bus-extension-v1-0-b20c73f2161a@beagleboard.org> In-Reply-To: <20250729-spi-bus-extension-v1-0-b20c73f2161a@beagleboard.org> To: Mark Brown , herve.codina@bootlin.com, luca.ceresoli@bootlin.com, conor+dt@kernel.org, Jason Kridner , Deepak Khatri , Dhruva Gole , Robert Nelson , Andrew Davis , Rob Herring , Krzysztof Kozlowski Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Ayush Singh X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2045; i=ayush@beagleboard.org; h=from:subject:message-id; bh=b/Mksh+F1LXb+8Jny3q81UBRPZONY8Vngy2QwjQfK8U=; b=owEBbQKS/ZANAwAKAQXO9ceJ5Vp0AcsmYgBoiJmH4RnG9CxVp40e5a/y9pP77YnCAdZPDOVB8 8Qux/IT8xuJAjMEAAEKAB0WIQTfzBMe8k8tZW+lBNYFzvXHieVadAUCaIiZhwAKCRAFzvXHieVa dI7eD/4xJ1nG75U2r89YWYSA/Xl6H/s1Cio4Z2Cqqbc3hSDtU2dNAOQaV12dekx1pULe82n6n63 xu7T2Y95SkzRRyry254+eAwSxfx0h+LhhjcTNROUUjq8WDWM2lgL4Fgiv4Pb9iXa9cT7+qDQmCK 4bNlQbMTjz5HlcYXkHlQcrrPMQckII23F2wcFSpuWZhU9JiY6/h21vJ9hfyzDsUl1q4omgl6eqI GGm46iwbztMHhTgF87qyFm+bAybfwcmUM311FGZ0NZDZaBD2uosibh8OogBK/12avP/RLTnKWBt HPOqXVhVa3uGH6b035iOecnDouylhwTGbDNdkLSODFxYUQDTTzAwTNrD1lb0wc0EIz0uv44Bu1U 5sn+aBXpjQc+WSeBlxlvO3zYixCNqRFT3GTqNasJ3Ul1wXzjxyKD2+cZiWwv6rQLGUMghb5s26p p1Omq41/+0pPVc+/9aYYz1dwx8VFZK393U+5nu/E1C2kVyUW7Sp0+vyIy24WyGn8ZzUm61K34S7 54z6VBdIpzaScAhGFJ/6pBavNBPKraCkFovShBCIajUODRSlo+TYC2FGhmJQRLF6ze4LnKWbZPY ZUs+f9Rh7VFL22X7U1+92h86AomPNBnBwx4CmcYWdWcZSIrb7MlTId4FK+cuLtV4NUcBGXak1OI jytS1hL860ErR9Q== X-Developer-Key: i=ayush@beagleboard.org; a=openpgp; fpr=DFCC131EF24F2D656FA504D605CEF5C789E55A74 of_register_spi_devices() perform the loop for registering child devices. In order to prepare the support for spi bus extensions, extract this registration loop and move it in a dedicated function. Signed-off-by: Ayush Singh --- drivers/spi/spi.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index 0030e0be0d9b2f9e2b0c4a1d806b42bdb4ecb5d2..ea271e37c72d3dc099c5147ec40= 4050ee0bbf046 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -2524,21 +2524,16 @@ of_register_spi_device(struct spi_controller *ctlr,= struct device_node *nc) return ERR_PTR(rc); } =20 -/** - * of_register_spi_devices() - Register child devices onto the SPI bus - * @ctlr: Pointer to spi_controller device - * - * Registers an spi_device for each child node of controller node which - * represents a valid SPI target device. - */ -static void of_register_spi_devices(struct spi_controller *ctlr) +static void of_register_spi_children(struct spi_controller *ctlr, + struct device_node *node) { struct spi_device *spi; struct device_node *nc; =20 - for_each_available_child_of_node(ctlr->dev.of_node, nc) { + for_each_available_child_of_node(node, nc) { if (of_node_test_and_set_flag(nc, OF_POPULATED)) continue; + spi =3D of_register_spi_device(ctlr, nc); if (IS_ERR(spi)) { dev_warn(&ctlr->dev, @@ -2547,6 +2542,18 @@ static void of_register_spi_devices(struct spi_contr= oller *ctlr) } } } + +/** + * of_register_spi_devices() - Register child devices onto the SPI bus + * @ctlr: Pointer to spi_controller device + * + * Registers an spi_device for each child node of controller node which + * represents a valid SPI target device. + */ +static void of_register_spi_devices(struct spi_controller *ctlr) +{ + of_register_spi_children(ctlr, ctlr->dev.of_node); +} #else static void of_register_spi_devices(struct spi_controller *ctlr) { } #endif --=20 2.50.1 From nobody Sun Oct 5 21:59:23 2025 Received: from mail-pf1-f181.google.com (mail-pf1-f181.google.com [209.85.210.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 99D01289350 for ; Tue, 29 Jul 2025 09:51:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753782685; cv=none; b=GKRV2ZTRzpuuf7MQsbvtSmqlJyjVyvxE8OT5VpgzNGDx98aRV3fBu68xQrz64pJ/iPu1eNqQluGoDVqn4d9ImeNYjonI81O0MQPLWOJvuKk6yJNSK3HWWZImbNgaI5mknFkGOHjbJweva/ySmjsXR+t/ge34HvGeWGUrbj1tPjE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753782685; c=relaxed/simple; bh=ZJleRO/tmglmwyTY49Sq9b3ot5hWCGqXz2SxgsKeHM0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=N7E78/yqZKhaRYbBxtkz8VauPxYuW4QhxThKMK2z37Jg4oT+bvYONar9UKRBz74ONiAaEaW4tsRlwlv8uz+fUmQR3OzFGBxd5zNivtZE7vn5GmsZs1sJww3SRedg1wErdov3jOlRj2FAZJ+VaglpFT/OpQOgZR4fmksfl/Spgwg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=beagleboard.org; spf=fail smtp.mailfrom=beagleboard.org; dkim=pass (2048-bit key) header.d=beagleboard-org.20230601.gappssmtp.com header.i=@beagleboard-org.20230601.gappssmtp.com header.b=xbdUqbIA; arc=none smtp.client-ip=209.85.210.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=beagleboard.org Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=beagleboard.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=beagleboard-org.20230601.gappssmtp.com header.i=@beagleboard-org.20230601.gappssmtp.com header.b="xbdUqbIA" Received: by mail-pf1-f181.google.com with SMTP id d2e1a72fcca58-7494999de5cso3700850b3a.3 for ; Tue, 29 Jul 2025 02:51:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=beagleboard-org.20230601.gappssmtp.com; s=20230601; t=1753782683; x=1754387483; 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=raxziZYeCxjaEOuosKAOJnUNwj1BxHTM8ZCk+kqmL9w=; b=xbdUqbIAaQbF13zZPVNCJmcAok0d0UpeKNKK74+70f6F/cDUhZ15iVzht62vg5XNBG xtE4Sw2e5DltFg/GdIITkyCBC7+vjgDoLYZNqNEZ+VBFDA4F9jLT9aKFLGoLStiO7idw j1ts+3hbPjKTOPuGt+et0Kx12r3tELo9to0yVnKQoVFydOlszGIyXMCWAr+nJ1Yc1zQ1 NDVMGrXgpCL9tWV7hQO4akrorSyNqEp3Nyct9Vx7Cn7q6lvNdDcHlxKype4jM2A4VQET nQwNK+QwkXjSLF3qmfSalV2qGQqNSWH50NvXyZcZsBo77aCV1HuPtU9pUqfa0iGzIRot SpCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753782683; x=1754387483; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=raxziZYeCxjaEOuosKAOJnUNwj1BxHTM8ZCk+kqmL9w=; b=qJC2rqmTib0/zXGj8VdPZ1wnFyRhKaNfvys8Q0StXAVhTbyXRFX700q7do/UKhq2Z7 SfA+OAz1Fpg5iOYY66QSB/l2ctBfxxkxAA4ebLII9uad8vScNJqjvJdtBT0nnCEXawzf oEYjbUAbnaP3kNNkBIUQs2sMkSx6gaFTQ5ycnWAa9KbtNuRsAtdp/ljKJIjSIciPrbIW lXgUEOBsbCCG/pyeNsKf77tLOgwgA/nKeszxHVG70yMxq0a5PEk5wMtqUx8shpNddfEH mdCmzc52jSCjn37tS0+n3fBtY6g0GZKSDPUdDx0H4dBrSF+mZE9UQAECS4TnB8xdnRV5 OIkA== X-Forwarded-Encrypted: i=1; AJvYcCXqvkkIoOY3UlpvTGeUWNm+nzcJssj1n5UGPRN4UNHVI/OXu0z4JaiXt6K1Ydi2smbgnjDx6/EQO2QBKvI=@vger.kernel.org X-Gm-Message-State: AOJu0Yx3KUn1YBasfDRYX1sK1uxqv4s7vpiE5exIQUJJgGuCgzbdz+9H tAQN+GKGDCq1b882svM9JC940DCnInM4jGBDl0SrKzEFkXv3RAN8K/JA2f1hTIQn8w== X-Gm-Gg: ASbGncugRS/QdbCUDrkz+ZYp3IBf+ua6dA+LBUlDmAoN713c4D57fGQoo+4373Gmsq+ Vv9dYlw5+gNr+1PXqdwl2CGFatSOy7RpKQMmDndnO1wSKfJcH/6qNIRHT854tjIwQ0Q2MIxbbUQ oAogu6eRFoNl14UjE7op7EP9WaO5w3umT348vTGYGSJxl2jip8kCsXZl1q8lwlmFHE/1/Yah87K NTMjcbijm8QBxfFzED7NY+tY7K3cwYJySZ0ieqRndrqk0r1Iu1derr0y5j10wF9cfKsUJINYAIr uSdeRtVX8BxotcXxlMkqzhPKcbuwNb1+w+3KVIQtbRkFIR09CcjrVaDe+nB3cfSOtAyDekFa6Q6 d/yHGtpntlm8RJQ3hB3BLEW7f4j6wbcQ= X-Google-Smtp-Source: AGHT+IE2RNQrcZCxXmokA9dyXQMFoBXEA0vRnDeOHhDng0bNoTGMD2776/VKoUU8/Hl6rSF49pdk3g== X-Received: by 2002:a05:6a00:1305:b0:748:fb7c:bbe0 with SMTP id d2e1a72fcca58-7633965f00emr22424727b3a.24.1753782682881; Tue, 29 Jul 2025 02:51:22 -0700 (PDT) Received: from [192.168.1.6] ([2401:4900:8899:25fe:4fe5:6353:8b2b:942c]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7640b4c8762sm7614498b3a.117.2025.07.29.02.51.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Jul 2025 02:51:22 -0700 (PDT) From: Ayush Singh Date: Tue, 29 Jul 2025 15:21:02 +0530 Subject: [PATCH 3/4] spi: Handle spi bus extension 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: <20250729-spi-bus-extension-v1-3-b20c73f2161a@beagleboard.org> References: <20250729-spi-bus-extension-v1-0-b20c73f2161a@beagleboard.org> In-Reply-To: <20250729-spi-bus-extension-v1-0-b20c73f2161a@beagleboard.org> To: Mark Brown , herve.codina@bootlin.com, luca.ceresoli@bootlin.com, conor+dt@kernel.org, Jason Kridner , Deepak Khatri , Dhruva Gole , Robert Nelson , Andrew Davis , Rob Herring , Krzysztof Kozlowski Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Ayush Singh X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3211; i=ayush@beagleboard.org; h=from:subject:message-id; bh=ZJleRO/tmglmwyTY49Sq9b3ot5hWCGqXz2SxgsKeHM0=; b=owEBbQKS/ZANAwAKAQXO9ceJ5Vp0AcsmYgBoiJmHEyTSX0+657ez+U7jHg14AHd1oQdKmCcKJ 2DJCbkRHsKJAjMEAAEKAB0WIQTfzBMe8k8tZW+lBNYFzvXHieVadAUCaIiZhwAKCRAFzvXHieVa dL2JD/9w08i6TbVyoTBn8FP0rTkWX1zJK1RaCp4Aj7s+B5GLVwvaaJ+SiTvw6dlA7kycMTwk2BZ Eq0tAmrseYxoEbhu8agaodyi90eNjmDL0kto+R14YpH2biXEgK79z7GlSaDbyp4jL+8y9G0DMBv 5rwpfo0UXUilXMTzJi9tgDsYsl8cYZKdWHPCq/v3qiJkYfTNVkVWEr6CUeaiaoLrykxNyw9vhvQ AwPdyRbuc/M47eVgKf8Yl1qzTAhTsynZy/vkyacpFsaOcPFre8lmyjUme0DozfQcCvaNs+xQ02e mE/jyyS/VtQ8onzYkFjRP7YdQBxjJdLhk6EKra1bQDWtA6c3wFAakuHZzaPY5FEOBdAQukON2j4 2Me4XZguAoyPsJqiZMFFVdDQI9kYltaWawOYAI7w75ONzc0g9fcvfvX057IKVsWpBCYEkPFp+Vw jX6jDWL2qgnYlXo1jlzVJb1t+qa1CYjDaniF/doeWThz7rCsOTbHnFH9ujUM0oj38b/LIdBLOfA y70TW3DeobvIWUcjVkM8H++d9MqEM+XVB77emED1Y/ze74iD6J7pTNwrekAKjFiZ4zI7yV09qkJ 2J3wP11fGNm0Rqfot3wMvx+xT+R7REoU3ozXNRDM9S+uDhn8VAeektMTklQkOppxTt51+NCZ3aM KccXA+vx7DnidJg== X-Developer-Key: i=ayush@beagleboard.org; a=openpgp; fpr=DFCC131EF24F2D656FA504D605CEF5C789E55A74 spi bus extensions were introduced to decouple spi busses when they are wired to connectors. Combined with devicetree overlays, they introduce an additional level of indirection, which is needed to decouple the overlay (describing the hardware available on addon baord) and the base tree (describing resources provided to the addon board). For instance, the following devicetree fragment, available once overlays are applied, is legit: ``` spi1: spi@abcd0000 { compatible =3D "xyz,spi-ctrl"; spi-bus-extension@0 { reg =3D <0>; spi-bus =3D <&spi-ctrl>; }; ... }; connector { spi-ctrl { spi-parent =3D <&spi1>; #address-cells =3D <1>; #size-cells =3D <0>; spi-bus-extension@0 { reg =3D <0>; spi-bus =3D <&spi-other-connector>; }; device@1 { compatible =3D "xyz,foo"; reg =3D <1>; }; }; devices { other-connector { spi-at-other-connector { spi-parent =3D <&spi-ctrl>; #address-cells =3D <1>; #size-cells =3D <0>; device@2 { compatible =3D "xyz,bar"; reg =3D <2>; }; }; }; }; }; ``` Current processing done when a spi adapter is registered registers spi clients described at the adapter node level. With spi bus extensions, the process needs to look also at extensions to register devices described in those extensions and so connected to the adapter. Extend of_spi_register_children() to look recursively at those spi bus extensions. Signed-off-by: Ayush Singh --- drivers/spi/spi.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index ea271e37c72d3dc099c5147ec404050ee0bbf046..015f86c6f3228a8746dc517112d= 466051b50e3db 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -2528,9 +2528,17 @@ static void of_register_spi_children(struct spi_cont= roller *ctlr, struct device_node *node) { struct spi_device *spi; - struct device_node *nc; + struct device_node *nc, *extension; =20 + /* + * Register device directly described in this bus node before looking + * at extensions. + */ for_each_available_child_of_node(node, nc) { + /* Filter out extension node */ + if (of_node_name_eq(nc, "spi-bus-extension")) + continue; + if (of_node_test_and_set_flag(nc, OF_POPULATED)) continue; =20 @@ -2541,6 +2549,23 @@ static void of_register_spi_children(struct spi_cont= roller *ctlr, of_node_clear_flag(nc, OF_POPULATED); } } + + /* Look at extensions */ + for_each_available_child_of_node(node, nc) { + if (!of_node_name_eq(nc, "spi-bus-extension")) + continue; + + extension =3D of_parse_phandle(nc, "spi-bus", 0); + if (!extension) + continue; + + /* + * Register children available at this extension possibly + * walking other chained extensions. + */ + of_register_spi_children(ctlr, extension); + of_node_put(extension); + } } =20 /** --=20 2.50.1 From nobody Sun Oct 5 21:59:23 2025 Received: from mail-pf1-f169.google.com (mail-pf1-f169.google.com [209.85.210.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6DD6C28937C for ; Tue, 29 Jul 2025 09:51:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753782690; cv=none; b=LClujUAc37wEaPYRrzFYBwtAp5BMWf+MwVS7+9z2pwf/p2ggNa2ptjKbx6zSE2DCnPu8X0uMWLd8oAR3CBrVKttGRT4An4r6PUuc/AgzT6zqeqCWEIQkObw6UjGNy6MydQF/4TMMT7dlW5ycZF7HmcnC+YY5gd1hRhzGGCZ4QMI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753782690; c=relaxed/simple; bh=ESeXGOrQ7Jk3sJKdX7eSWtreA2ap3wRm9L80hcxvyls=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gax1SBJ1NYPyWP7hEpdafHcpKdze1bI4WAgw2AWQdMUeCdTEYnN0qVBOYzM2CFlCR4ZDdLBiMXpt3Rx5AX3fdDXmMRCVh6qq5NcQ6JF5WdSSeCa9vSmkESlgds3W+CfDbGxuHlxGD7fgxPq4jrb0u0cazxIlX3k2T2FqByHqI24= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=beagleboard.org; spf=fail smtp.mailfrom=beagleboard.org; dkim=pass (2048-bit key) header.d=beagleboard-org.20230601.gappssmtp.com header.i=@beagleboard-org.20230601.gappssmtp.com header.b=yQK5Hc9G; arc=none smtp.client-ip=209.85.210.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=fail (p=none dis=none) header.from=beagleboard.org Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=beagleboard.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=beagleboard-org.20230601.gappssmtp.com header.i=@beagleboard-org.20230601.gappssmtp.com header.b="yQK5Hc9G" Received: by mail-pf1-f169.google.com with SMTP id d2e1a72fcca58-748e81d37a7so3563597b3a.1 for ; Tue, 29 Jul 2025 02:51:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=beagleboard-org.20230601.gappssmtp.com; s=20230601; t=1753782688; x=1754387488; 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=pbCvGrb5aAa9O95i6t5AjrtpUVmty9ze9Q5MhiAUKr0=; b=yQK5Hc9GZKlz+CqHlOTuW4ntE2Z0q/xO7JbFe1Tr0Q0EwK3S1X0CFyhJMXK+NyCtyR e0Xnv0dVNRIQPw6xgE+c9cEjeTsiHHDK1lMq3xaqRtuJzNqOmqPg3EV0Zremx9SkZEZ9 DImF1yMrEBKU1uKFSYFYQa5vYtpOZju5lCTy+4m/K5TceiH85mkVwNEc9QHOnVrhFfWZ GjrgBuLu/gO60hc+Ly8d6HYfS/1/0SehykblzMFtHmVVqB8JyHs6skxuY02ZuNNP3YjN WDZCt6CpcFO86K9+54tcCCqwnoxuWpVD6nZskhbEMUBXpra2Swe4oQqeW5SF2vymOZAX NIaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753782688; x=1754387488; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=pbCvGrb5aAa9O95i6t5AjrtpUVmty9ze9Q5MhiAUKr0=; b=uMsv6IjNaAP3/ENRzxzDNqm4jukVFvo5CNStuN7Fz9vUnBehoWHsu245BgVc0uVqFp dMnK/aIyohYbYvGF+MbJdoEHRBnhaiYiIDGOWRXddMX/EkHOVPH4aI8Md7MvtF8lS6wQ w30O0xqOc+raOLhGG2UItMkphQ6KSgyBTiMgttsreNM5aO2PQddTPpVdCAmF4JSN2mAl dNJOex3T3G0UihjS04efAvF2i9++12EDy/6LrtY46gh9i3P2aLCf2f9HW9ZxhddnGed2 7L2fxbgqfVDtsj227j9djwWDZv0yAdKZRP+SUcj/0lFp/D7bzJ6nqOjwAxGTPUVi/AJk VFVA== X-Forwarded-Encrypted: i=1; AJvYcCU0w4tKWBy1Sij0yaNBhtHzpiyLfm7t6qahOjwaJmPdX5InzD5wyQ9xqDIMOBsd9rELP7i+QRB/k5DMRIM=@vger.kernel.org X-Gm-Message-State: AOJu0YyHWBP3oKSbYidABFMQxaynJfOlZOGXME0kxVs5PM5rvxEqDUIa W72ndTgD4M7g3Yt0JcbFKpN0a1ULRJ/UtEPNPg1u/+kP+UWL5y2LWR2ppGfm7NocrA== X-Gm-Gg: ASbGnctWJlmr1TQSVJ3+QE4sBmQPsrBUDSFpP6So8mUUHrKFuxiIQppLvitaazlxPTT d2mAz6UZXaFPBAIv/IoQRIBoJW8OQFohvEauOATyoDkGSRHkOlzvJjv0+yl5Gypy2hi3Axjy3qo 4aOxbPWXLm6Q3sYfo8mtNj/FSQs3l//iTANPeSZFmXbrRMazAF1ENhZoaq/4WceC6VhWuuJxeHD 1L1rTCrZJ9GRUokH1DxycbBQHy3Ac7yISCsTx84183zO4aeXMSAH7vQl0vtaId6r2mlZ5GE0tgW yQx1oRaLB4G1Q/Zj7JniqPxkzThk9Ear57gWxRVDaI/TeWT7gShVeKUDzZSW8IxfMNBTHJQXtCf +KxkPTl4We2D6VGJdc3hjgmyE5gmShFs2pTSgChzrsA== X-Google-Smtp-Source: AGHT+IEW3vS6So5bdp5dCCtaao+ndsslJgUa1t4xRenMl39WnvL/VyQ3oTaO1ewKOatupavABkMs4Q== X-Received: by 2002:a05:6a00:1483:b0:749:1c27:bcc5 with SMTP id d2e1a72fcca58-7633907b3b1mr23335028b3a.22.1753782687705; Tue, 29 Jul 2025 02:51:27 -0700 (PDT) Received: from [192.168.1.6] ([2401:4900:8899:25fe:4fe5:6353:8b2b:942c]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7640b4c8762sm7614498b3a.117.2025.07.29.02.51.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 29 Jul 2025 02:51:27 -0700 (PDT) From: Ayush Singh Date: Tue, 29 Jul 2025 15:21:03 +0530 Subject: [PATCH 4/4] devicetree: bindings: spi: Introduce SPI bus extensions 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: <20250729-spi-bus-extension-v1-4-b20c73f2161a@beagleboard.org> References: <20250729-spi-bus-extension-v1-0-b20c73f2161a@beagleboard.org> In-Reply-To: <20250729-spi-bus-extension-v1-0-b20c73f2161a@beagleboard.org> To: Mark Brown , herve.codina@bootlin.com, luca.ceresoli@bootlin.com, conor+dt@kernel.org, Jason Kridner , Deepak Khatri , Dhruva Gole , Robert Nelson , Andrew Davis , Rob Herring , Krzysztof Kozlowski Cc: linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Ayush Singh X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5762; i=ayush@beagleboard.org; h=from:subject:message-id; bh=ESeXGOrQ7Jk3sJKdX7eSWtreA2ap3wRm9L80hcxvyls=; b=owEBbQKS/ZANAwAKAQXO9ceJ5Vp0AcsmYgBoiJmHMynii/fNqaV5wb0NWLzugrDvlxTwshzWO ZBPPNl3g5GJAjMEAAEKAB0WIQTfzBMe8k8tZW+lBNYFzvXHieVadAUCaIiZhwAKCRAFzvXHieVa dAsCEACvuSrQzIHlXfE/7XtmaJyN+QnePqW744FsEhg0roKKvQoQro9gAFzaAn4H9EO8WS0C3zO BLfkQT8sRkSaAQiWG3VlrNz2Ws4bbxSULKUfV90N3IKdANHUG03l8fobBayJ1NvGVhXf/CBQwkh PEDkoWutEH2jI9OIo4u0gQ/1FVD8L+izgrHsnpgRLm9Zq8r2TeUBheqHFw83McMHMFtA7z/mtuw +WP9RyVCWMbVteuPH6kyEzLNlDt7c/XggWfWtOX8OP8AwFs5vw/VtI3DNk7UoPtdkLY6TxPaJNt UFgG+yQVPc6NPBCPKMhFgdNiBeU2I/wI5BuA6L+EDW2k4YbDWIHwcEO6+L9GyK5ZPOswV8gAspz NiogB3QSgLrBh8FZp2/jOyZsUZNrwBLbE8Q5BhO6LXQk1+OHv5PDjsbiOvA22G53XlFthFyAXcw GV5tGcyGqZJ/XkHYdxALgNf4HfydgOh1Uf9MC3NeKbdaVCP5d++rrLo11Q647Z44CsHdiLjnFEG 8XVFMsXe8Zk6xJ7010xfNP/glSUTKsIqv8t9Oikfx9xv1IMr+pDsvhECx9GbjtLo4QWj/+eMkYf uj8yu3dCs/8eS4yixdM9FAvVub0Il9dd20WsHrhiOM2QstfckuB9Pq3uwks8jxkNIkGVyjXEwjC hJo0L0KtV06rBMw== X-Developer-Key: i=ayush@beagleboard.org; a=openpgp; fpr=DFCC131EF24F2D656FA504D605CEF5C789E55A74 An SPI bus can be wired to the connector and allows an add-on board to connect additional SPI devices to this bus. Those additional SPI devices could be described as sub-nodes of the SPI bus controller node however for hotplug connectors described via device tree overlays there is additional level of indirection, which is needed to decouple the overlay and the base tree: --- base device tree --- spi1: spi@abcd0000 { compatible =3D "xyz,foo"; spi-bus-extension@0 { spi-bus =3D <&spi_ctrl>; }; ... }; spi5: spi@cafe0000 { compatible =3D "xyz,bar"; spi-bus-extension@0 { spi-bus =3D <&spi_sensors>; }; ... }; connector { spi_ctrl: spi-ctrl { spi-parent =3D <&spi1>; #address-cells =3D <1>; #size-cells =3D <0>; }; spi_sensors: spi-sensors { spi-parent =3D <&spi5>; #address-cells =3D <1>; #size-cells =3D <0>; }; }; --- device tree overlay --- ... // This node will overlay on the spi-ctrl node of the base tree spi-ctrl { eeprom@50 { compatible =3D "atmel,24c64"; ... }; }; ... --- resulting device tree --- spi1: spi@abcd0000 { compatible =3D "xyz,foo"; spi-bus-extension@0 { spi-bus =3D <&spi_ctrl>; }; ... }; spi5: spi@cafe0000 { compatible =3D "xyz,bar"; spi-bus-extension@0 { spi-bus =3D <&spi_sensors>; }; ... }; connector { spi_ctrl: spi-ctrl { spi-parent =3D <&spi1>; #address-cells =3D <1>; #size-cells =3D <0>; device@1 { compatible =3D "xyz,foo"; ... }; }; spi_sensors: spi-sensors { spi-parent =3D <&spi5>; #address-cells =3D <1>; #size-cells =3D <0>; }; }; Here spi-ctrl (same goes for spi-sensors) represent the part of SPI bus that is on the hot-pluggable add-on. On hot-plugging it will physically connect to the SPI adapter on the base board. Let's call the 'spi-ctrl' node an "extension node". In order to decouple the overlay from the base tree, the SPI adapter (spi@abcd0000) and the extension node (spi-ctrl) are separate nodes. The extension node is linked to the SPI bus controller in two ways. The first one with the spi-bus-extension available in SPI controller sub-node and the second one with the spi-parent property available in the extension node itself. The purpose of those two links is to provide the link in both direction from the SPI controller to the SPI extension and from the SPI extension to the SPI controller. Signed-off-by: Ayush Singh --- .../devicetree/bindings/spi/spi-controller.yaml | 66 ++++++++++++++++++= +++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/spi/spi-controller.yaml b/Do= cumentation/devicetree/bindings/spi/spi-controller.yaml index 82d051f7bd6e09dab9809c85ff13475d2b118efd..9b44ce4542f9552c94cb0658ffe= 3f6d3f29bc434 100644 --- a/Documentation/devicetree/bindings/spi/spi-controller.yaml +++ b/Documentation/devicetree/bindings/spi/spi-controller.yaml @@ -25,6 +25,13 @@ properties: "#size-cells": const: 0 =20 + spi-parent: + $ref: /schemas/types.yaml#/definitions/phandle + description: + In case of an SPI bus extension, reference to the SPI bus controller + this extension is connected to. In other word, reference the SPI bus + controller on the fixed side that drives the bus extension. + cs-gpios: description: | GPIOs used as chip selects. @@ -111,7 +118,26 @@ properties: - compatible =20 patternProperties: - "^.*@[0-9a-f]+$": + 'spi-bus-extension@[0-9a-f]+$': + type: object + description: + An SPI bus extension connected to an SPI bus. Those extensions allow= to + decouple SPI busses when they are wired to connectors. + + properties: + reg: + maxItems: 1 + + spi-bus: + $ref: /schemas/types.yaml#/definitions/phandle + description: + Reference to the extension bus. + + required: + - reg + - spi-bus + + "^(?!spi-bus-extension@).*@[0-9a-f]+$": type: object $ref: spi-peripheral-props.yaml additionalProperties: true @@ -214,3 +240,41 @@ examples: spi-cs-high; }; }; + + # SPI bus extension example involving an SPI bus controller and a connec= tor. + # + # +--------------+ +-------------+ +-------------+ + # | spi@abcd0000 | | Connector | | Addon board | + # | (spi1) +-----+ (spi-addon) +-----+ (device@10) | + # | | | | | | + # +--------------+ +-------------+ +-------------+ + # + # The spi1 SPI bus is wired from a SPI controller to a connector. It is + # identified at connector level as spi-addon bus. + # An addon board can be connected to this connector and connects a device + # (device@10) to this spi-addon extension bus. + - | + spi1: spi@abcd0000 { + compatible =3D "brcm,bcm2835-spi"; + reg =3D <0xabcd0000 0x100>; + #address-cells =3D <1>; + #size-cells =3D <0>; + + spi-bus-extension@0 { + reg =3D <0>; + spi-bus =3D <&spi_addon>; + }; + }; + + connector { + spi_addon: spi-addon { + spi-parent =3D <&spi1>; + #address-cells =3D <1>; + #size-cells =3D <0>; + + device@2 { + compatible =3D "xyz,foo"; + reg =3D <0x02>; + }; + }; + }; --=20 2.50.1