From nobody Wed Dec 17 15:51:19 2025 Received: from relay2-d.mail.gandi.net (relay2-d.mail.gandi.net [217.70.183.194]) (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 B014520E338; Wed, 30 Apr 2025 12:52:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.194 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746017530; cv=none; b=nN5fiLrWYFg1lmzjtuwSt0Bk1bNxLrHlLGvg1uaHRqySBm2csRicT4POYsOg9H8BM7UQGDMC3sPav9C+Cips13+KeOJ9TFpkYU8fV4O+vgZL7FC5YeElJuNIfMPVvRl3c+lyfTg0orIWAVkLyHDK/CuyMKXWhxSPb3iXmHdiOaw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746017530; c=relaxed/simple; bh=HEvTwRzxmeE2NAfpgz9SSxXMD/XmjgIztjzYO9Oa8xY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=T7NmmKNZrh79FXCvF69C9sKe+31UFD96tflUVkqU15gr3ZE14hSf2lUNIPgPQ4XJ6b/ETSkOqC9s5UMY4mFP3MRbCbqrOhp9AJB/CvkbkX278Balo3COMjNheLpr0nfSs6pfzu/Gvj/zZ6uYvcb911/9LPmDk3hu+AyYNKdMKrE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=Pl0vRy2h; arc=none smtp.client-ip=217.70.183.194 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="Pl0vRy2h" Received: by mail.gandi.net (Postfix) with ESMTPA id 21148438A7; Wed, 30 Apr 2025 12:52:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1746017527; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=PksiWeDnJhw5poQ866xXWaCAoSzsYk7jz7dyOJiWxTo=; b=Pl0vRy2hzfhpjCruTH94XFBt4AN8DIMQbsvBnNsyiEbSSXOklYtNCpt3kQ2/78i2VIeBDm aOjaeq+0eu4DNyE2MFi+aKT6flJCBvvRkDTWcJY/fAVZhDMOQZEQqgDrRtFFY9e0PQi5gc +xtn66L8FQc2lCRgumLQmUfGbTEguF2SDDoS7InnU62qXigs80Q4+3EHC5m5V4LqgaH6bC LnkTy4B0YQ2ID0xODKaUF86WzcvTk/ityrdIMfcnccPCAj4YfZlLN77sTA1d3u8CgEnRfe 3UQBSpbkMy+8kmDZyUGvC//mLGgipdRqoGZqGq9w/uMptcDhvBe6m0+rixn94w== From: Herve Codina To: David Gibson , Andrew Davis , Ayush Singh , Geert Uytterhoeven , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Herve Codina , Arnd Bergmann , Greg Kroah-Hartman , Saravana Kannan Cc: devicetree@vger.kernel.org, devicetree-compiler@vger.kernel.org, linux-kernel@vger.kernel.org, Luca Ceresoli , Thomas Petazzoni Subject: [PATCH v2 1/7] dt-bindings: Add support for export-symbols node Date: Wed, 30 Apr 2025 14:51:45 +0200 Message-ID: <20250430125154.195498-2-herve.codina@bootlin.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250430125154.195498-1-herve.codina@bootlin.com> References: <20250430125154.195498-1-herve.codina@bootlin.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-GND-State: clean X-GND-Score: -100 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgddvieeijeehucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuifetpfffkfdpucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddunecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpefhvfevufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefjvghrvhgvucevohguihhnrgcuoehhvghrvhgvrdgtohguihhnrgessghoohhtlhhinhdrtghomheqnecuggftrfgrthhtvghrnhepfefhhfefveduvedutdetfedvvedufeetieetfeejtefgteeigefgkeejgfegtddunecuffhomhgrihhnpeguvghvihgtvghtrhgvvgdrohhrghenucfkphepledtrdekledrudeifedruddvjeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepihhnvghtpeeltddrkeelrdduieefrdduvdejpdhhvghloheplhhotggrlhhhohhsthdrlhhotggrlhguohhmrghinhdpmhgrihhlfhhrohhmpehhvghrvhgvrdgtohguihhnrgessghoohhtlhhinhdrtghomhdpnhgspghrtghpthhtohepudeipdhrtghpthhtohepuggrvhhiugesghhisghsohhnrdgurhhophgsvggrrhdrihgurdgruhdprhgtphhtthhopegrfhgusehtihdrtghomhdprhgtphhtthhopegrhihushhhsegsvggrghhlvggsohgrrhgurdhorhhgpdhrtghpthhtohepghgvvghrtheslhhinhhugidqmheikehkrdhorhhgpdhrtghpthhtohepr hhosghhsehkvghrnhgvlhdrohhrghdprhgtphhtthhopehkrhiikhdoughtsehkvghrnhgvlhdrohhrghdprhgtphhtthhopegtohhnohhrodgutheskhgvrhhnvghlrdhorhhgpdhrtghpthhtohephhgvrhhvvgdrtghoughinhgrsegsohhothhlihhnrdgtohhm X-GND-Sasl: herve.codina@bootlin.com Content-Type: text/plain; charset="utf-8" An export-symbols node allows to export symbols for symbols resolution performed when applying a device tree overlay. When a device tree overlay is applied on a node having an export-symbols node, symbols listed in the export-symbols node are used to resolve undefined symbols referenced from the overlay. This allows: - Referencing symbols from an device tree overlay without the need to know the full base board. Only the connector definition is needed. - Using the exact same overlay on several connectors available on a given board. For instance, the following description is supported with the export-symbols node: - Base device tree board A: ... foo_connector: connector1 { export-symbols { connector =3D <&foo_connector>; }; }; bar_connector: connector2 { export-symbols { connector =3D <&bar_connector>; }; }; ... - Base device tree board B: ... front_connector: addon-connector { export-symbols { connector =3D <&front_connector>; }; }; ... - Overlay describing an addon board the can be connected on connectors: ... node { ... connector =3D <&connector>; ... }; ... Thanks to the export-symbols node, the overlay can be applied on connector1 or connector2 available on board A but also on addon-connector available on board B. Signed-off-by: Herve Codina Tested-by: Ayush Singh Reviewed-by: Luca Ceresoli --- .../devicetree/bindings/export-symbols.yaml | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 Documentation/devicetree/bindings/export-symbols.yaml diff --git a/Documentation/devicetree/bindings/export-symbols.yaml b/Docume= ntation/devicetree/bindings/export-symbols.yaml new file mode 100644 index 000000000000..0e404eff8937 --- /dev/null +++ b/Documentation/devicetree/bindings/export-symbols.yaml @@ -0,0 +1,43 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/export-symbols.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Export symbols + +maintainers: + - Herve Codina + +description: | + An export-symbols node allows to export symbols for symbols resolution + performed when applying a device tree overlay. + + When a device tree overlay is applied on a node having an export-symbols + node, symbols listed in the export-symbols node are used to resolve unde= fined + symbols referenced from the overlay. + +properties: + $nodename: + const: export-symbols + +patternProperties: + "^[a-zA-Z_]?[a-zA-Z0-9_]*$": + $ref: /schemas/types.yaml#/definitions/phandle + description: + A symbol exported in the form =3D. + +additionalProperties: false + +examples: + - | + /* + * Allows 'connector' symbol used in a device-tree overlay to be resol= ved to + * connector0 when the device-tree overlay is applied on connector0 no= de. + */ + connector0: connector0 { + export-symbols { + connector =3D <&connector0>; + }; + }; +... --=20 2.49.0 From nobody Wed Dec 17 15:51:19 2025 Received: from relay2-d.mail.gandi.net (relay2-d.mail.gandi.net [217.70.183.194]) (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 9976525A65B; Wed, 30 Apr 2025 12:52:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.194 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746017531; cv=none; b=HryDafu5dBPVkZE9/2dYDqvs0wR23LNXHAnYhF73KAFAi4duN6jLZIY+xZwHXBD7lytjhIy1J8PIJ6hi0HL8jspxl08mAKe+scsIcMZkPxUD/17fOUMoiwhpGjAJ0GBS72Pzn2XjTX3P44lGoN7j5CJfaNFlC2rmQUAiRtGFMTA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746017531; c=relaxed/simple; bh=04Lgsevk075WoZNcBOi6TghRMwt8xkLiKvl4P7+VTdQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JSPC9o2KeVYdjT57urSBjX2rF1CESWl1WYZy2Njt0zqg6VCpor6pAd1Oum3P57AuGr0B6gOjJfzCb3zOhHivCnq36GHinxgzfeaDG3J0Rh3w38RcFoOeCVVqzNbrgJdWaBgxFS99/8h63x6+dNi47qvK2dq7Z7W6YuX9aoBr08I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=pMX7HqAH; arc=none smtp.client-ip=217.70.183.194 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="pMX7HqAH" Received: by mail.gandi.net (Postfix) with ESMTPA id 18F8E438AF; Wed, 30 Apr 2025 12:52:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1746017527; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=MeC3Blleg5ID5FjARVSQZ7w0x3ZCmA8mRG7YjX82K+A=; b=pMX7HqAHsWNh3AUjTppEwZBlIfYDPUbcEzKyp40WRB5bJu6IVHACeqrzwIaV6xij6m4UUq 7GcxYuWK2SbRO0M/SKyJx+Upfsv1OAMXsqIXX9t/tn4My/tXBfoPijO82jd7EB8jNYhW0h 10aFPTyNvM8a+3ZWBY/2xPNAl0xFSy2HP3QnzPpQCU01ZgcEZ4quJaf6XC55NWYFBqBuN1 w8Y67nuDbXoZeOcTf07JRSL33cquJ2NZU/RUaZz8kZ5dTw76AtXsN1erD/ZARLMZGgOPjR eCARbQOmiT3529bz7Y/aZdp1zJvdQgtr5tF3GS/BxAM6SWk9SC6GzWgqTRw6Sw== From: Herve Codina To: David Gibson , Andrew Davis , Ayush Singh , Geert Uytterhoeven , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Herve Codina , Arnd Bergmann , Greg Kroah-Hartman , Saravana Kannan Cc: devicetree@vger.kernel.org, devicetree-compiler@vger.kernel.org, linux-kernel@vger.kernel.org, Luca Ceresoli , Thomas Petazzoni Subject: [PATCH v2 2/7] of: resolver: Introduce get_phandle_from_symbols_node() Date: Wed, 30 Apr 2025 14:51:46 +0200 Message-ID: <20250430125154.195498-3-herve.codina@bootlin.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250430125154.195498-1-herve.codina@bootlin.com> References: <20250430125154.195498-1-herve.codina@bootlin.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-GND-State: clean X-GND-Score: -100 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgddvieeijeehucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuifetpfffkfdpucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddunecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpefhvfevufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefjvghrvhgvucevohguihhnrgcuoehhvghrvhgvrdgtohguihhnrgessghoohhtlhhinhdrtghomheqnecuggftrfgrthhtvghrnhepheffiefgjeeuleeuueffleeufefglefhjefhheeigedukeetieeltddthfffkeffnecukfhppeeltddrkeelrdduieefrdduvdejnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepledtrdekledrudeifedruddvjedphhgvlhhopehlohgtrghlhhhoshhtrdhlohgtrghlughomhgrihhnpdhmrghilhhfrhhomhephhgvrhhvvgdrtghoughinhgrsegsohhothhlihhnrdgtohhmpdhnsggprhgtphhtthhopeduiedprhgtphhtthhopegurghvihgusehgihgsshhonhdrughrohhpsggvrghrrdhiugdrrghupdhrtghpthhtoheprghfugesthhirdgtohhmpdhrtghpthhtoheprgihuhhshhessggvrghglhgvsghorghrugdrohhrghdprhgtphhtthhopehgvggvrhhtsehlihhnuhigqdhmieekkhdrohhrghdprhgtphhtthhopehrohgshheskhgvrhhnvghlrdhorhhgpdhrtghpthhtohepk hhriihkodgutheskhgvrhhnvghlrdhorhhgpdhrtghpthhtoheptghonhhorhdoughtsehkvghrnhgvlhdrohhrghdprhgtphhtthhopehhvghrvhgvrdgtohguihhnrgessghoohhtlhhinhdrtghomh X-GND-Sasl: herve.codina@bootlin.com Content-Type: text/plain; charset="utf-8" In order to simplify the introduction of the export symbols node handling, group necessary operations done to get a phandle from the __symbols__ node in this dedicated get_phandle_from_symbols_node() function. Signed-off-by: Herve Codina Tested-by: Ayush Singh --- drivers/of/resolver.c | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/drivers/of/resolver.c b/drivers/of/resolver.c index 86424e145919..2c7a3b479b15 100644 --- a/drivers/of/resolver.c +++ b/drivers/of/resolver.c @@ -212,6 +212,28 @@ static int adjust_local_phandle_references(const struc= t device_node *local_fixup return 0; } =20 +static int get_phandle_from_symbols_node(const struct device_node *tree_sy= mbols, + const char *symbol_name, + phandle *phandle) +{ + struct device_node *refnode; + const char *refpath; + int err; + + err =3D of_property_read_string(tree_symbols, symbol_name, &refpath); + if (err) + return err; + + refnode =3D of_find_node_by_path(refpath); + if (!refnode) + return -ENOENT; + + *phandle =3D refnode->phandle; + of_node_put(refnode); + + return 0; +} + /** * of_resolve_phandles - Relocate and resolve overlay against live tree * @@ -247,11 +269,9 @@ static int adjust_local_phandle_references(const struc= t device_node *local_fixup */ int of_resolve_phandles(struct device_node *overlay) { - struct device_node *child, *refnode; - struct device_node *overlay_fixups; + struct device_node *child, *overlay_fixups; struct device_node __free(device_node) *local_fixups =3D NULL; struct property *prop; - const char *refpath; phandle phandle, phandle_delta; int err; =20 @@ -298,21 +318,14 @@ int of_resolve_phandles(struct device_node *overlay) if (!of_prop_cmp(prop->name, "name")) continue; =20 - err =3D of_property_read_string(tree_symbols, - prop->name, &refpath); + err =3D get_phandle_from_symbols_node(tree_symbols, prop->name, + &phandle); if (err) { - pr_err("node label '%s' not found in live devicetree symbols table\n", + pr_err("node label '%s' not found or invalid in live devicetree symbols= table\n", prop->name); return err; } =20 - refnode =3D of_find_node_by_path(refpath); - if (!refnode) - return -ENOENT; - - phandle =3D refnode->phandle; - of_node_put(refnode); - err =3D update_usages_of_a_phandle_reference(overlay, prop, phandle); if (err) break; --=20 2.49.0 From nobody Wed Dec 17 15:51:19 2025 Received: from relay2-d.mail.gandi.net (relay2-d.mail.gandi.net [217.70.183.194]) (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 913AB25B669; Wed, 30 Apr 2025 12:52:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.194 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746017532; cv=none; b=YWQlnbAfGXSJ5eBS8DVUDdP9xAba+aR4W/v58cnlijxBeRkwLp+bZ23B6YLqOXbUYY64ObolgnBwJyGrxXBelBVhU1BkYTMMQQ2LEU9vPHWd/xWC+MAM+LdbWolU2KXXetTqycXUJx8g7vWNebRy7EWlI5ixY7LWPPg2FZY42+Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746017532; c=relaxed/simple; bh=Y7Zm8w9wG8YslhOw/WDwwhycO9VpWrlfhSRsBRFKNw8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YUQaYK9SRabQ7CV3/kzpzojUA9m01e60l51mwc88pNTzSIJ2oJkYMXkwqpKShw8VVUCpvZO00gN2+PwJrglDc1u5OE5hPFy4raR9EbTGzLEieYSVXWI8LfmZ6jMnIN+yjneyl+q4lk6YovpDLLK0qFb2Mz2EUaXJ8rQOQXenoeI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=bWZWa5JZ; arc=none smtp.client-ip=217.70.183.194 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="bWZWa5JZ" Received: by mail.gandi.net (Postfix) with ESMTPA id F0D16438B2; Wed, 30 Apr 2025 12:52:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1746017528; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=zc5KU+vZ9ltSWyx9XaPn8D3Abm11V5SwRuQjnQVNZsw=; b=bWZWa5JZu7pPk819ten7Bf9cByfk+GTG0w4rTl6SSaXUz3EzDYrHuQ7K8uV884/mCmC9w7 1xnaVnwp2WRnLnTel1+amjqqJY/mCTqofiEyJuMF7mB4EGb8HLEH8+0r7k/ZxDovuyrU6j PPb1kHzSwSAHHcXLLkdSSkvQZ6RvuZrjgIEnzAOlV8d4DY7VKnhg9gc4fKGtkbvFOjJpuq XPO6wLVc9fTUh9kxs2ZQMioJgZnScTUuhFSDvOdBMvJX1JWQoxQHH64ZE3dWKKG4ngcrEX saWkUZDn35AjUUgrKWPvheRwvRgjbgemqjIJRRAaOmKoMbRzqaDlLpRmADDE9g== From: Herve Codina To: David Gibson , Andrew Davis , Ayush Singh , Geert Uytterhoeven , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Herve Codina , Arnd Bergmann , Greg Kroah-Hartman , Saravana Kannan Cc: devicetree@vger.kernel.org, devicetree-compiler@vger.kernel.org, linux-kernel@vger.kernel.org, Luca Ceresoli , Thomas Petazzoni Subject: [PATCH v2 3/7] of: resolver: Add export_symbols in of_resolve_phandles() parameters Date: Wed, 30 Apr 2025 14:51:47 +0200 Message-ID: <20250430125154.195498-4-herve.codina@bootlin.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250430125154.195498-1-herve.codina@bootlin.com> References: <20250430125154.195498-1-herve.codina@bootlin.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-GND-State: clean X-GND-Score: -100 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgddvieeijeehucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuifetpfffkfdpucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddunecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpefhvfevufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefjvghrvhgvucevohguihhnrgcuoehhvghrvhgvrdgtohguihhnrgessghoohhtlhhinhdrtghomheqnecuggftrfgrthhtvghrnhepheffiefgjeeuleeuueffleeufefglefhjefhheeigedukeetieeltddthfffkeffnecukfhppeeltddrkeelrdduieefrdduvdejnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepledtrdekledrudeifedruddvjedphhgvlhhopehlohgtrghlhhhoshhtrdhlohgtrghlughomhgrihhnpdhmrghilhhfrhhomhephhgvrhhvvgdrtghoughinhgrsegsohhothhlihhnrdgtohhmpdhnsggprhgtphhtthhopeduiedprhgtphhtthhopegurghvihgusehgihgsshhonhdrughrohhpsggvrghrrdhiugdrrghupdhrtghpthhtoheprghfugesthhirdgtohhmpdhrtghpthhtoheprgihuhhshhessggvrghglhgvsghorghrugdrohhrghdprhgtphhtthhopehgvggvrhhtsehlihhnuhigqdhmieekkhdrohhrghdprhgtphhtthhopehrohgshheskhgvrhhnvghlrdhorhhgpdhrtghpthhtohepk hhriihkodgutheskhgvrhhnvghlrdhorhhgpdhrtghpthhtoheptghonhhorhdoughtsehkvghrnhgvlhdrohhrghdprhgtphhtthhopehhvghrvhgvrdgtohguihhnrgessghoohhtlhhinhdrtghomh X-GND-Sasl: herve.codina@bootlin.com Content-Type: text/plain; charset="utf-8" In order to prepare the introduction of the export symbols node handling, add a export_symbols parameter in of_resolve_phandles(). The export_symbols is the export symbols device tree node the resolver will use for the overlay symbols resolution. Signed-off-by: Herve Codina Tested-by: Ayush Singh --- drivers/of/of_private.h | 2 +- drivers/of/overlay.c | 2 +- drivers/of/resolver.c | 9 +++++++-- drivers/of/unittest.c | 4 ++-- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/drivers/of/of_private.h b/drivers/of/of_private.h index df0bb00349e0..cf68edb873ab 100644 --- a/drivers/of/of_private.h +++ b/drivers/of/of_private.h @@ -94,7 +94,7 @@ static inline void __of_detach_node_sysfs(struct device_n= ode *np) {} #endif =20 #if defined(CONFIG_OF_RESOLVE) -int of_resolve_phandles(struct device_node *tree); +int of_resolve_phandles(struct device_node *tree, const struct device_node= *export_symbols); #endif =20 void __of_phandle_cache_inv_entry(phandle handle); diff --git a/drivers/of/overlay.c b/drivers/of/overlay.c index 1af6f52d0708..aa1b97e634aa 100644 --- a/drivers/of/overlay.c +++ b/drivers/of/overlay.c @@ -919,7 +919,7 @@ static int of_overlay_apply(struct overlay_changeset *o= vcs, { int ret =3D 0, ret_revert, ret_tmp; =20 - ret =3D of_resolve_phandles(ovcs->overlay_root); + ret =3D of_resolve_phandles(ovcs->overlay_root, NULL); if (ret) goto out; =20 diff --git a/drivers/of/resolver.c b/drivers/of/resolver.c index 2c7a3b479b15..5c492711b21f 100644 --- a/drivers/of/resolver.c +++ b/drivers/of/resolver.c @@ -237,7 +237,8 @@ static int get_phandle_from_symbols_node(const struct d= evice_node *tree_symbols, /** * of_resolve_phandles - Relocate and resolve overlay against live tree * - * @overlay: Pointer to devicetree overlay to relocate and resolve + * @overlay: Pointer to devicetree overlay to relocate and resolve + * @export_symbols: Pointer to devicetree export symbols node. * * Modify (relocate) values of local phandles in @overlay to a range that * does not conflict with the live expanded devicetree. Update references @@ -257,6 +258,10 @@ static int get_phandle_from_symbols_node(const struct = device_node *tree_symbols, * corresponding to that symbol in the live tree. Update the references in * the overlay with the phandle values in the live tree. * + * @export_symbols can be use in this references update. The resolver tries + * first to find a match in the @export_symbols. If not found, it uses the + * "__symbol__" node in the live tree. + * * @overlay must be detached. * * Resolving and applying @overlay to the live expanded devicetree must be @@ -267,7 +272,7 @@ static int get_phandle_from_symbols_node(const struct d= evice_node *tree_symbols, * * Return: %0 on success or a negative error value on error. */ -int of_resolve_phandles(struct device_node *overlay) +int of_resolve_phandles(struct device_node *overlay, const struct device_n= ode *export_symbols) { struct device_node *child, *overlay_fixups; struct device_node __free(device_node) *local_fixups =3D NULL; diff --git a/drivers/of/unittest.c b/drivers/of/unittest.c index 64d301893af7..620237365566 100644 --- a/drivers/of/unittest.c +++ b/drivers/of/unittest.c @@ -2026,7 +2026,7 @@ static int __init unittest_data_add(void) */ of_overlay_mutex_lock(); =20 - rc =3D of_resolve_phandles(unittest_data_node); + rc =3D of_resolve_phandles(unittest_data_node, NULL); if (rc) { pr_err("%s: Failed to resolve phandles (rc=3D%i)\n", __func__, rc); of_overlay_mutex_unlock(); @@ -3915,7 +3915,7 @@ static __init void of_unittest_overlay_high_level(voi= d) * because kmalloc() was not yet available. */ of_overlay_mutex_lock(); - of_resolve_phandles(overlay_base_root); + of_resolve_phandles(overlay_base_root, NULL); of_overlay_mutex_unlock(); =20 =20 --=20 2.49.0 From nobody Wed Dec 17 15:51:19 2025 Received: from relay2-d.mail.gandi.net (relay2-d.mail.gandi.net [217.70.183.194]) (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 507AC25C708; Wed, 30 Apr 2025 12:52:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.194 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746017533; cv=none; b=k6oAR2QQUierMfrGryo1Khxjw5jW5hqbeL+1W+dLmnr52H4DnSUbd6nNn0XY4oxcvpW/KhMI6W80xvBYSMoKXgaxGY9ZbUcRAS0Hq4UCQ36KZdXZh/wdeidfDNrEgU1Ga5XQ7mNu/JTtf4sFk5gMnrTYOK7XOW5dwrqEMeIZECo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746017533; c=relaxed/simple; bh=MLKFKlOcqD3JrCWLLX9Qo1rkuxqN8kw5WpQ7AXVTpbc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=m5AxiNRe0jZP54wIkDENRkji73iDgCeG5AVi2ttz6Q6ZjFKYzjQulF1L42u2AsNQ7obm5EGnk7mjYUDqVvvwjOlOCKCsE29rwegif0czpAm0BMbTyhQ3aL7dDzXlfD9ANTd1Hy2QGBCzvVWTc1YxYi4KoWL4epZL6MYb1C6p3xE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=pMc4nRAz; arc=none smtp.client-ip=217.70.183.194 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="pMc4nRAz" Received: by mail.gandi.net (Postfix) with ESMTPA id D2A61438B0; Wed, 30 Apr 2025 12:52:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1746017529; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=iuXqI1mGwNYFzjUQZRY2v46st1QeOvBPHRc4DlxvEp4=; b=pMc4nRAzepJbhk2GQKrbP/vE4gAQMmmdeHbbMW9ZtELHNwv+UjFEu/uyBWGtf9ITdf2x1m tqOnX5kKPfgTgTWdCbqrtMBT0RVJHEreAHGtxTEZpb4egKVOp70HNlCxTn/trGbjr4YHgM NUPOBwwouWGbQGdtkuMr2vsxWrI7ADUyBWbE0hePLaU7x1eUgfeZ2NWfjnxRIzJzgnQ3HX ED/Ja8+aok4Sg9Cz0qo5NKCRXQOZmmr0L45xdJ/cYioR/Y978Lpe9iPKM4gXjrruz0NDvB t+x+GJj1mBNpgjtJLB0qtGFVSWnz3YvVjMSVZL3yxfwYYJz3hMyzkrY/HgDbKA== From: Herve Codina To: David Gibson , Andrew Davis , Ayush Singh , Geert Uytterhoeven , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Herve Codina , Arnd Bergmann , Greg Kroah-Hartman , Saravana Kannan Cc: devicetree@vger.kernel.org, devicetree-compiler@vger.kernel.org, linux-kernel@vger.kernel.org, Luca Ceresoli , Thomas Petazzoni Subject: [PATCH v2 4/7] of: resolver: Add support for the export symbols node Date: Wed, 30 Apr 2025 14:51:48 +0200 Message-ID: <20250430125154.195498-5-herve.codina@bootlin.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250430125154.195498-1-herve.codina@bootlin.com> References: <20250430125154.195498-1-herve.codina@bootlin.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-GND-State: clean X-GND-Score: -100 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgddvieeijeehucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuifetpfffkfdpucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddunecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpefhvfevufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefjvghrvhgvucevohguihhnrgcuoehhvghrvhgvrdgtohguihhnrgessghoohhtlhhinhdrtghomheqnecuggftrfgrthhtvghrnhepheffiefgjeeuleeuueffleeufefglefhjefhheeigedukeetieeltddthfffkeffnecukfhppeeltddrkeelrdduieefrdduvdejnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepledtrdekledrudeifedruddvjedphhgvlhhopehlohgtrghlhhhoshhtrdhlohgtrghlughomhgrihhnpdhmrghilhhfrhhomhephhgvrhhvvgdrtghoughinhgrsegsohhothhlihhnrdgtohhmpdhnsggprhgtphhtthhopeduiedprhgtphhtthhopegurghvihgusehgihgsshhonhdrughrohhpsggvrghrrdhiugdrrghupdhrtghpthhtoheprghfugesthhirdgtohhmpdhrtghpthhtoheprgihuhhshhessggvrghglhgvsghorghrugdrohhrghdprhgtphhtthhopehgvggvrhhtsehlihhnuhigqdhmieekkhdrohhrghdprhgtphhtthhopehrohgshheskhgvrhhnvghlrdhorhhgpdhrtghpthhtohepk hhriihkodgutheskhgvrhhnvghlrdhorhhgpdhrtghpthhtoheptghonhhorhdoughtsehkvghrnhgvlhdrohhrghdprhgtphhtthhopehhvghrvhgvrdgtohguihhnrgessghoohhtlhhinhdrtghomh X-GND-Sasl: herve.codina@bootlin.com Content-Type: text/plain; charset="utf-8" Symbols resolution done when an overlay is applied looks only at the global __symbol__ node to resolve unknown symbols from the overlay (i.e symbols listed in the overlay __fixups__ node). In order to provide flexibilities and allow to define some additional symbols visible only when an overlay is applied to a specific node, introduce the export symbols node. The export symbols node adds some additional symbols that can be used in the symbols resolution. The resolver tries to match unresolved symbols first using the export symbols node and, if a match is not found, it tries to match using the global __symbol__ node. Contrary to symbols available in the global __symbols__ node, symbols listed in the export symbols node can be considered as local symbols. Indeed, they can be changed depending on the node the overlay is going to be applied to and are only visibible from the current recolver call. Handle those additional symbols given by the export symbols node in the symbols resolution. Signed-off-by: Herve Codina Tested-by: Ayush Singh --- drivers/of/resolver.c | 33 +++++++++++++++++++++++++++++---- drivers/of/unittest.c | 4 ++-- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/drivers/of/resolver.c b/drivers/of/resolver.c index 5c492711b21f..c2b63cec1865 100644 --- a/drivers/of/resolver.c +++ b/drivers/of/resolver.c @@ -220,6 +220,9 @@ static int get_phandle_from_symbols_node(const struct d= evice_node *tree_symbols, const char *refpath; int err; =20 + if (!tree_symbols) + return -ENOENT; + err =3D of_property_read_string(tree_symbols, symbol_name, &refpath); if (err) return err; @@ -234,6 +237,25 @@ static int get_phandle_from_symbols_node(const struct = device_node *tree_symbols, return 0; } =20 +static int get_phandle_from_export_node(const struct device_node *export_s= ymbols, + const char *symbol_name, + phandle *phandle) +{ + struct device_node *refnode; + + if (!export_symbols) + return -ENOENT; + + refnode =3D of_parse_phandle(export_symbols, symbol_name, 0); + if (!refnode) + return -ENOENT; + + *phandle =3D refnode->phandle; + of_node_put(refnode); + + return 0; +} + /** * of_resolve_phandles - Relocate and resolve overlay against live tree * @@ -312,7 +334,7 @@ int of_resolve_phandles(struct device_node *overlay, co= nst struct device_node *e return 0; =20 struct device_node __free(device_node) *tree_symbols =3D of_find_node_by_= path("/__symbols__"); - if (!tree_symbols) { + if (!tree_symbols && !export_symbols) { pr_err("no symbols in root of device tree.\n"); return -EINVAL; } @@ -323,10 +345,13 @@ int of_resolve_phandles(struct device_node *overlay, = const struct device_node *e if (!of_prop_cmp(prop->name, "name")) continue; =20 - err =3D get_phandle_from_symbols_node(tree_symbols, prop->name, - &phandle); + err =3D get_phandle_from_export_node(export_symbols, prop->name, + &phandle); + if (err) + err =3D get_phandle_from_symbols_node(tree_symbols, prop->name, + &phandle); if (err) { - pr_err("node label '%s' not found or invalid in live devicetree symbols= table\n", + pr_err("node label '%s' not found or invalid in live devicetree symbols= or export tables\n", prop->name); return err; } diff --git a/drivers/of/unittest.c b/drivers/of/unittest.c index 620237365566..658690fd6980 100644 --- a/drivers/of/unittest.c +++ b/drivers/of/unittest.c @@ -4146,7 +4146,7 @@ static __init void of_unittest_overlay_high_level(voi= d) /* --- overlay_bad_unresolved --- */ =20 EXPECT_BEGIN(KERN_ERR, - "OF: resolver: node label 'this_label_does_not_exist' not found in = live devicetree symbols table"); + "OF: resolver: node label 'this_label_does_not_exist' not found or = invalid in live devicetree symbols or export tables"); EXPECT_BEGIN(KERN_ERR, "OF: resolver: overlay phandle fixup failed: -22"); =20 @@ -4156,7 +4156,7 @@ static __init void of_unittest_overlay_high_level(voi= d) EXPECT_END(KERN_ERR, "OF: resolver: overlay phandle fixup failed: -22"); EXPECT_END(KERN_ERR, - "OF: resolver: node label 'this_label_does_not_exist' not found in li= ve devicetree symbols table"); + "OF: resolver: node label 'this_label_does_not_exist' not found or in= valid in live devicetree symbols or export tables"); =20 return; =20 --=20 2.49.0 From nobody Wed Dec 17 15:51:19 2025 Received: from relay2-d.mail.gandi.net (relay2-d.mail.gandi.net [217.70.183.194]) (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 0762B25CC4A; Wed, 30 Apr 2025 12:52:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.194 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746017534; cv=none; b=ndLQqLUaQgWvuwu+Cq7CaeGmDcev5drJQW+ZRJRPSE0pNgorruUhHzcQyby4+OI8JvgnOzhahf4u8xOWUYBk7+g+Hb9WOgOCwKTTZ91ULoxQWpp/mhscbDjCjTCD+OrXOlgwij0TeLP06EHM7r9N+n36zMI+Eef5C2j93VBXAL0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746017534; c=relaxed/simple; bh=GJIUO/LfuuEyx2C59Bql/hQ7zaQ2Afe6Myf8SeIhfEA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=byv9xBkLD7Ae58Nz71RPb6aYm9XhjafoJKzd2RmH/oURdbZl3o9rP5jKWreNUjlA5cSwdoIyDoqcBhi+CcxL3NzsFCqWIYXyJHi6xaJ5zdZHF1AOpvxGCk2NoBpxG3BlZqaLGMVY/dxdtfIWdZKPJLcYWN+Pg//wi7+IhbKIv+4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=d0QMZ7Kq; arc=none smtp.client-ip=217.70.183.194 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="d0QMZ7Kq" Received: by mail.gandi.net (Postfix) with ESMTPA id 9CE5D438B5; Wed, 30 Apr 2025 12:52:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1746017530; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=JCHiV2KgzmFR5ylUD36LT9XNI75ngLRnaSotflKdIX8=; b=d0QMZ7KqKE3cw9oLBOYt32bSUFzSYQhazzFElPcTHZbP/HMAbfvUR/S5/9BuSyH/m0kY0v s25KcT97Dq2H/qHYXO1itChK9bELiFr2HKOBsGd9QfkCqPs+gBtNmtd5gq6EXICssPV4tv 8zxXs1xLQtW/HVfHUBgt5/+9YPWecWWrCdNKAK3i/hSbuEDvByUr3L6hbesxqs6fNtB3GO vF940UFt5hJLpoEZ3moIsL0SWB7tYH4vbbmmHhMUZe7i0muG+4JfffMqHJva9VPa+C1erD V9KTfMduirbSCB+3brtJKK+wls7WTf5nPL2kpeviyxefVdmPhCXhf4kks7jjjg== From: Herve Codina To: David Gibson , Andrew Davis , Ayush Singh , Geert Uytterhoeven , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Herve Codina , Arnd Bergmann , Greg Kroah-Hartman , Saravana Kannan Cc: devicetree@vger.kernel.org, devicetree-compiler@vger.kernel.org, linux-kernel@vger.kernel.org, Luca Ceresoli , Thomas Petazzoni Subject: [PATCH v2 5/7] of: overlay: Add export_symbols_name in of_overlay_fdt_apply() parameters Date: Wed, 30 Apr 2025 14:51:49 +0200 Message-ID: <20250430125154.195498-6-herve.codina@bootlin.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250430125154.195498-1-herve.codina@bootlin.com> References: <20250430125154.195498-1-herve.codina@bootlin.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-GND-State: clean X-GND-Score: -100 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgddvieeijeehucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuifetpfffkfdpucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddunecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpefhvfevufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefjvghrvhgvucevohguihhnrgcuoehhvghrvhgvrdgtohguihhnrgessghoohhtlhhinhdrtghomheqnecuggftrfgrthhtvghrnhepheffiefgjeeuleeuueffleeufefglefhjefhheeigedukeetieeltddthfffkeffnecukfhppeeltddrkeelrdduieefrdduvdejnecuvehluhhsthgvrhfuihiivgepfeenucfrrghrrghmpehinhgvthepledtrdekledrudeifedruddvjedphhgvlhhopehlohgtrghlhhhoshhtrdhlohgtrghlughomhgrihhnpdhmrghilhhfrhhomhephhgvrhhvvgdrtghoughinhgrsegsohhothhlihhnrdgtohhmpdhnsggprhgtphhtthhopeduiedprhgtphhtthhopegurghvihgusehgihgsshhonhdrughrohhpsggvrghrrdhiugdrrghupdhrtghpthhtoheprghfugesthhirdgtohhmpdhrtghpthhtoheprgihuhhshhessggvrghglhgvsghorghrugdrohhrghdprhgtphhtthhopehgvggvrhhtsehlihhnuhigqdhmieekkhdrohhrghdprhgtphhtthhopehrohgshheskhgvrhhnvghlrdhorhhgpdhrtghpthhtohepk hhriihkodgutheskhgvrhhnvghlrdhorhhgpdhrtghpthhtoheptghonhhorhdoughtsehkvghrnhgvlhdrohhrghdprhgtphhtthhopehhvghrvhgvrdgtohguihhnrgessghoohhtlhhinhdrtghomh X-GND-Sasl: herve.codina@bootlin.com Content-Type: text/plain; charset="utf-8" In order to prepare the introduction of the export symbols node handling, add a export_symbols_name parameter in of_overlay_fdt_apply(). The export_symbols_name is the name of the export symbols subnode available in the base node that will be used by the resolver to handle export symbols resolution. Having the name of the subnode in parameters instead of the subnode itself avoids the use of an export symbol node that is not directly related to the base node. Signed-off-by: Herve Codina Tested-by: Ayush Singh --- drivers/misc/lan966x_pci.c | 3 ++- drivers/of/of_kunit_helpers.c | 2 +- drivers/of/overlay.c | 7 ++++++- drivers/of/unittest.c | 4 ++-- include/linux/of.h | 6 ++++-- 5 files changed, 15 insertions(+), 7 deletions(-) diff --git a/drivers/misc/lan966x_pci.c b/drivers/misc/lan966x_pci.c index 9c79b58137e5..f05cb040ec69 100644 --- a/drivers/misc/lan966x_pci.c +++ b/drivers/misc/lan966x_pci.c @@ -128,7 +128,8 @@ static int lan966x_pci_load_overlay(struct lan966x_pci = *data) u32 dtbo_size =3D __dtbo_lan966x_pci_end - __dtbo_lan966x_pci_begin; void *dtbo_start =3D __dtbo_lan966x_pci_begin; =20 - return of_overlay_fdt_apply(dtbo_start, dtbo_size, &data->ovcs_id, dev_of= _node(data->dev)); + return of_overlay_fdt_apply(dtbo_start, dtbo_size, &data->ovcs_id, + dev_of_node(data->dev), NULL); } =20 static void lan966x_pci_unload_overlay(struct lan966x_pci *data) diff --git a/drivers/of/of_kunit_helpers.c b/drivers/of/of_kunit_helpers.c index 7b3ed5a382aa..476b43474168 100644 --- a/drivers/of/of_kunit_helpers.c +++ b/drivers/of/of_kunit_helpers.c @@ -56,7 +56,7 @@ int of_overlay_fdt_apply_kunit(struct kunit *test, void *= overlay_fdt, return -ENOMEM; =20 ret =3D of_overlay_fdt_apply(overlay_fdt, overlay_fdt_size, - ovcs_id, NULL); + ovcs_id, NULL, NULL); if (ret) return ret; =20 diff --git a/drivers/of/overlay.c b/drivers/of/overlay.c index aa1b97e634aa..73ff38c41de2 100644 --- a/drivers/of/overlay.c +++ b/drivers/of/overlay.c @@ -968,6 +968,10 @@ static int of_overlay_apply(struct overlay_changeset *= ovcs, * @overlay_fdt_size: number of bytes in @overlay_fdt * @ret_ovcs_id: pointer for returning created changeset id * @base: pointer for the target node to apply overlay + * @export_symbols_name: + * Name of the export symbol subnode of the @base node to + * provide extra symbols. Those extra symbols are used in + * the overlay symbols resolution. * * Creates and applies an overlay changeset. * @@ -983,7 +987,8 @@ static int of_overlay_apply(struct overlay_changeset *o= vcs, */ =20 int of_overlay_fdt_apply(const void *overlay_fdt, u32 overlay_fdt_size, - int *ret_ovcs_id, const struct device_node *base) + int *ret_ovcs_id, const struct device_node *base, + const char *export_symbols_name) { void *new_fdt; void *new_fdt_align; diff --git a/drivers/of/unittest.c b/drivers/of/unittest.c index 658690fd6980..11091b0176e0 100644 --- a/drivers/of/unittest.c +++ b/drivers/of/unittest.c @@ -3858,7 +3858,7 @@ static int __init overlay_data_apply(const char *over= lay_name, int *ovcs_id) pr_err("no overlay data for %s\n", overlay_name); =20 ret =3D of_overlay_fdt_apply(info->dtbo_begin, size, &info->ovcs_id, - NULL); + NULL, NULL); if (ovcs_id) *ovcs_id =3D info->ovcs_id; if (ret < 0) @@ -4198,7 +4198,7 @@ static int testdrv_probe(struct pci_dev *pdev, const = struct pci_device_id *id) } =20 size =3D info->dtbo_end - info->dtbo_begin; - ret =3D of_overlay_fdt_apply(info->dtbo_begin, size, &ovcs_id, dn); + ret =3D of_overlay_fdt_apply(info->dtbo_begin, size, &ovcs_id, dn, NULL); of_node_put(dn); if (ret) return ret; diff --git a/include/linux/of.h b/include/linux/of.h index a62154aeda1b..d8e0dd210e09 100644 --- a/include/linux/of.h +++ b/include/linux/of.h @@ -1749,7 +1749,8 @@ struct of_overlay_notify_data { #ifdef CONFIG_OF_OVERLAY =20 int of_overlay_fdt_apply(const void *overlay_fdt, u32 overlay_fdt_size, - int *ovcs_id, const struct device_node *target_base); + int *ovcs_id, const struct device_node *target_base, + const char *export_symbols_name); int of_overlay_remove(int *ovcs_id); int of_overlay_remove_all(void); =20 @@ -1759,7 +1760,8 @@ int of_overlay_notifier_unregister(struct notifier_bl= ock *nb); #else =20 static inline int of_overlay_fdt_apply(const void *overlay_fdt, u32 overla= y_fdt_size, - int *ovcs_id, const struct device_node *target_base) + int *ovcs_id, const struct device_node *target_base, + const char *export_symbols_name) { return -ENOTSUPP; } --=20 2.49.0 From nobody Wed Dec 17 15:51:19 2025 Received: from relay2-d.mail.gandi.net (relay2-d.mail.gandi.net [217.70.183.194]) (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 4D43A25D8F6; Wed, 30 Apr 2025 12:52:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.194 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746017535; cv=none; b=Km5hxMQXeqVBy6AW3yGbIrcIDx0pIbr1sd8NJPBMx8GWJyK1zlryY0vv0meHHzVGqi3O8Z6uqxfQIaztxUDsAb2yKfb6yuFAOJxG7Nf55lfAY42+ieSrp8NgpDazfzBrDaNZ0ueg6PTRmPwdsJ+xE1bghO0I3dQ08kJWorvEDWY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746017535; c=relaxed/simple; bh=Zlo0JIAVBhVcxhoeRxFpnpqdS1ScVVuHOETJuuNopRY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=H8yNtKb7ThpsLHTNpcFNsMRGc+8i3yD6xQqdDQjR4X0yXkUCDqUfrZrnReBUU26oCEa/vjAYRwMGy6gC97I+FZXJX4ZfatOmWdASzO371r1MKFlFv76xryc2tl/ygDhD0R82CEN+xdLOlqw2qgzuFWYOQTBT8M7QPn4AQz/hf0k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=RHgV4Lqd; arc=none smtp.client-ip=217.70.183.194 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="RHgV4Lqd" Received: by mail.gandi.net (Postfix) with ESMTPA id 75148438B6; Wed, 30 Apr 2025 12:52:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1746017531; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=nLx+9dvUsBPx0JucbrUMlWbWrTUIqTh5/5kioAg10L8=; b=RHgV4LqdLorrR6xJm4/uLjDusLIrre5bEQL+2OF5f1XHVd+XyTQ0Kq1AyDUzz4v9OLD5sp aJyGhhGNCzzWdP5rbLc/UQT3VXWMTaNFdOQh8mM9Y/pixP4S41SjEnMwuIcQUw0+MzKsK7 xWm40X91jIFmWEZo6RBwhjOTVYZtEPS01QBuuw1P1qZYvTFiuRyZvc6ZNue4way7Nty/9k ZseoqTURf5y4jP1WiVqzdl4fwMdeG5DeIp1Vh4Q+hYr6R1VEq86Q3Y6p25OaNipfdxZTuN IIJM3RYF4wUeC7yZZ+ntmbwbIUXGnEWBYWszyQoo5AHavMdHZk9SG5L2IECmeA== From: Herve Codina To: David Gibson , Andrew Davis , Ayush Singh , Geert Uytterhoeven , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Herve Codina , Arnd Bergmann , Greg Kroah-Hartman , Saravana Kannan Cc: devicetree@vger.kernel.org, devicetree-compiler@vger.kernel.org, linux-kernel@vger.kernel.org, Luca Ceresoli , Thomas Petazzoni Subject: [PATCH v2 6/7] of: overlay: Add support for the export symbols node Date: Wed, 30 Apr 2025 14:51:50 +0200 Message-ID: <20250430125154.195498-7-herve.codina@bootlin.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250430125154.195498-1-herve.codina@bootlin.com> References: <20250430125154.195498-1-herve.codina@bootlin.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-GND-State: clean X-GND-Score: -100 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgddvieeijeehucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuifetpfffkfdpucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddunecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpefhvfevufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefjvghrvhgvucevohguihhnrgcuoehhvghrvhgvrdgtohguihhnrgessghoohhtlhhinhdrtghomheqnecuggftrfgrthhtvghrnhepheffiefgjeeuleeuueffleeufefglefhjefhheeigedukeetieeltddthfffkeffnecukfhppeeltddrkeelrdduieefrdduvdejnecuvehluhhsthgvrhfuihiivgepfeenucfrrghrrghmpehinhgvthepledtrdekledrudeifedruddvjedphhgvlhhopehlohgtrghlhhhoshhtrdhlohgtrghlughomhgrihhnpdhmrghilhhfrhhomhephhgvrhhvvgdrtghoughinhgrsegsohhothhlihhnrdgtohhmpdhnsggprhgtphhtthhopeduiedprhgtphhtthhopegurghvihgusehgihgsshhonhdrughrohhpsggvrghrrdhiugdrrghupdhrtghpthhtoheprghfugesthhirdgtohhmpdhrtghpthhtoheprgihuhhshhessggvrghglhgvsghorghrugdrohhrghdprhgtphhtthhopehgvggvrhhtsehlihhnuhigqdhmieekkhdrohhrghdprhgtphhtthhopehrohgshheskhgvrhhnvghlrdhorhhgpdhrtghpthhtohepk hhriihkodgutheskhgvrhhnvghlrdhorhhgpdhrtghpthhtoheptghonhhorhdoughtsehkvghrnhgvlhdrohhrghdprhgtphhtthhopehhvghrvhgvrdgtohguihhnrgessghoohhtlhhinhdrtghomh X-GND-Sasl: herve.codina@bootlin.com Content-Type: text/plain; charset="utf-8" The resolver already supports the use of the export symbol node. Add support of the export symbol node feature in of_overlay_fdt_apply() simply getting the export node from its name and passing it to the resolver. Signed-off-by: Herve Codina Tested-by: Ayush Singh --- drivers/of/overlay.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/drivers/of/overlay.c b/drivers/of/overlay.c index 73ff38c41de2..7c55d39f89af 100644 --- a/drivers/of/overlay.c +++ b/drivers/of/overlay.c @@ -891,6 +891,10 @@ static void free_overlay_changeset(struct overlay_chan= geset *ovcs) * of_overlay_apply() - Create and apply an overlay changeset * @ovcs: overlay changeset * @base: point to the target node to apply overlay + * @export_symbols_name: + * Name of the export symbol subnode of the @base node to + * provide extra symbols. Those extra symbols are used in + * the overlay symbols resolution. * * Creates and applies an overlay changeset. * @@ -915,11 +919,24 @@ static void free_overlay_changeset(struct overlay_cha= ngeset *ovcs) */ =20 static int of_overlay_apply(struct overlay_changeset *ovcs, - const struct device_node *base) + const struct device_node *base, + const char *export_symbols_name) { + struct device_node *export_symbols =3D NULL; int ret =3D 0, ret_revert, ret_tmp; =20 - ret =3D of_resolve_phandles(ovcs->overlay_root, NULL); + if (base && export_symbols_name) { + export_symbols =3D of_get_child_by_name(base, export_symbols_name); + if (!export_symbols) { + pr_err("overlay get export symbols '%s' from %pOF failed\n", + export_symbols_name, base); + ret =3D -EINVAL; + goto out; + } + } + + ret =3D of_resolve_phandles(ovcs->overlay_root, export_symbols); + of_node_put(export_symbols); if (ret) goto out; =20 @@ -1059,7 +1076,7 @@ int of_overlay_fdt_apply(const void *overlay_fdt, u32= overlay_fdt_size, } ovcs->overlay_mem =3D overlay_mem; =20 - ret =3D of_overlay_apply(ovcs, base); + ret =3D of_overlay_apply(ovcs, base, export_symbols_name); /* * If of_overlay_apply() error, calling free_overlay_changeset() may * result in a memory leak if the apply partly succeeded, so do NOT --=20 2.49.0 From nobody Wed Dec 17 15:51:19 2025 Received: from relay2-d.mail.gandi.net (relay2-d.mail.gandi.net [217.70.183.194]) (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 B7A2A25DB0C; Wed, 30 Apr 2025 12:52:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.194 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746017536; cv=none; b=GfGGAUXOi546yEBnfTzlOSF/TmWW2h1u6CuJkzjpcBMldb0W1uY/dxH1ppQ32NxBM6VrflhX4Y+Tz/uCEG4Je28BezU/jR2sw7W0bK/+qHapIqtE6+8q3cDhsRekOogGVgrG5kVhGRi004XtGvHffd3ID49QW/5IqRC5RrfCbaY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746017536; c=relaxed/simple; bh=lhY3UhDu5nx+O1Fi44z/mcLChAzZrf0RUHIYCmu8iL8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kOtcAK7qp54GpxIX3KTr+i9ORRIJm4CAqtcr1yzbuTlB/gIN+xQFRp5CYX1MP28X0vukr1DC3VmYbDmj5X81IFYRpwE6JQZ1LAbcDbu/4YckhKA6VUxwHSwfcnZ2hbTOA9dPLkIW6ZT+8c/EUmUd1bL7CnEmvGVxf/j2kICjm5o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=LjHwqNIL; arc=none smtp.client-ip=217.70.183.194 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="LjHwqNIL" Received: by mail.gandi.net (Postfix) with ESMTPA id 56F8D438BA; Wed, 30 Apr 2025 12:52:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1746017532; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=H/OUpl+c2QHHtmrmXPqlciNY816qMvdz6fKciUiS4VQ=; b=LjHwqNIL2CefS4lVhWarqgROkJvi4jPWBM7szCY7rQBoQx0xkZsV0ZJGho+FGJfJuoqNoH +CZFeTVHSBppgkygX+vWaIxu/6gU9FZeagZuX7rRv9btnvcgmFY/7X1fJ3HrbqLQandada EVz+kRUASNMZ+SUFWRWoVgdRoHOoqZryp8raE/t3dk2zgAhIXS1n/bbHcPsc0uY0Osn5KN FVuRmfIx5QjtqPuKfVoIeo5MeHYHq3/mTgOgN0tJtGgAICv6ajB1adcjhCUoXm8mJNS9Yb MCCqavyVtREE00a4gE/xUrnYlCbFlmUMIGBzoX3a/9ro7BJC5vRHbjJFJXj/uQ== From: Herve Codina To: David Gibson , Andrew Davis , Ayush Singh , Geert Uytterhoeven , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Herve Codina , Arnd Bergmann , Greg Kroah-Hartman , Saravana Kannan Cc: devicetree@vger.kernel.org, devicetree-compiler@vger.kernel.org, linux-kernel@vger.kernel.org, Luca Ceresoli , Thomas Petazzoni Subject: [PATCH v2 7/7] of: unittest: Add tests for export symbols Date: Wed, 30 Apr 2025 14:51:51 +0200 Message-ID: <20250430125154.195498-8-herve.codina@bootlin.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250430125154.195498-1-herve.codina@bootlin.com> References: <20250430125154.195498-1-herve.codina@bootlin.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-GND-State: clean X-GND-Score: -100 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgddvieeijeehucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuifetpfffkfdpucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddunecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpefhvfevufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefjvghrvhgvucevohguihhnrgcuoehhvghrvhgvrdgtohguihhnrgessghoohhtlhhinhdrtghomheqnecuggftrfgrthhtvghrnhepheffiefgjeeuleeuueffleeufefglefhjefhheeigedukeetieeltddthfffkeffnecukfhppeeltddrkeelrdduieefrdduvdejnecuvehluhhsthgvrhfuihiivgepfeenucfrrghrrghmpehinhgvthepledtrdekledrudeifedruddvjedphhgvlhhopehlohgtrghlhhhoshhtrdhlohgtrghlughomhgrihhnpdhmrghilhhfrhhomhephhgvrhhvvgdrtghoughinhgrsegsohhothhlihhnrdgtohhmpdhnsggprhgtphhtthhopeduiedprhgtphhtthhopegurghvihgusehgihgsshhonhdrughrohhpsggvrghrrdhiugdrrghupdhrtghpthhtoheprghfugesthhirdgtohhmpdhrtghpthhtoheprgihuhhshhessggvrghglhgvsghorghrugdrohhrghdprhgtphhtthhopehgvggvrhhtsehlihhnuhigqdhmieekkhdrohhrghdprhgtphhtthhopehrohgshheskhgvrhhnvghlrdhorhhgpdhrtghpthhtohepk hhriihkodgutheskhgvrhhnvghlrdhorhhgpdhrtghpthhtoheptghonhhorhdoughtsehkvghrnhgvlhdrohhrghdprhgtphhtthhopehhvghrvhgvrdgtohguihhnrgessghoohhtlhhinhdrtghomh X-GND-Sasl: herve.codina@bootlin.com Content-Type: text/plain; charset="utf-8" The export symbols feature allows to use some additional symbols provided in an export symbols node to resolve overlay symbols. Add tests to exercise the export symbols feature. Signed-off-by: Herve Codina Tested-by: Ayush Singh --- drivers/of/unittest-data/Makefile | 5 ++ .../unittest-data/overlay_export_symbols.dtso | 15 +++++ .../of/unittest-data/testcases_common.dtsi | 1 + .../unittest-data/tests-export-symbols.dtsi | 30 +++++++++ drivers/of/unittest.c | 65 +++++++++++++++++++ 5 files changed, 116 insertions(+) create mode 100644 drivers/of/unittest-data/overlay_export_symbols.dtso create mode 100644 drivers/of/unittest-data/tests-export-symbols.dtsi diff --git a/drivers/of/unittest-data/Makefile b/drivers/of/unittest-data/M= akefile index 01a966e39f23..b51be046749a 100644 --- a/drivers/of/unittest-data/Makefile +++ b/drivers/of/unittest-data/Makefile @@ -34,6 +34,7 @@ obj-$(CONFIG_OF_OVERLAY) +=3D overlay.dtbo.o \ overlay_gpio_04a.dtbo.o \ overlay_gpio_04b.dtbo.o \ overlay_pci_node.dtbo.o \ + overlay_export_symbols.dtbo.o \ overlay_bad_unresolved.dtbo.o =20 # enable creation of __symbols__ node @@ -66,6 +67,10 @@ DTC_FLAGS_testcases +=3D -Wno-interrupts_property \ # overlay_bad_add_dup_prop.dtbo \ # overlay_bad_phandle.dtbo \ # overlay_bad_symbol.dtbo \ +# +# Also overlay_export_symbols_ovl.dtbo is designed to be applied to a spec= ific +# node and cannot be applied statically with fdtoverlay + =20 apply_static_overlay_1 :=3D overlay_0.dtbo \ overlay_1.dtbo \ diff --git a/drivers/of/unittest-data/overlay_export_symbols.dtso b/drivers= /of/unittest-data/overlay_export_symbols.dtso new file mode 100644 index 000000000000..89c9df4ef89b --- /dev/null +++ b/drivers/of/unittest-data/overlay_export_symbols.dtso @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: GPL-2.0 +/dts-v1/; +/plugin/; + +/ { + fragment@0 { + target-path=3D""; + __overlay__ { + ovl_node { + ref-base =3D <&test_export_base>; + ref-node =3D <&test_export_node>; + }; + }; + }; +}; diff --git a/drivers/of/unittest-data/testcases_common.dtsi b/drivers/of/un= ittest-data/testcases_common.dtsi index 1c2cdf353ae3..21ffe0fb03ef 100644 --- a/drivers/of/unittest-data/testcases_common.dtsi +++ b/drivers/of/unittest-data/testcases_common.dtsi @@ -18,4 +18,5 @@ node-remove { #include "tests-address.dtsi" #include "tests-platform.dtsi" #include "tests-overlay.dtsi" +#include "tests-export-symbols.dtsi" #include "tests-lifecycle.dtsi" diff --git a/drivers/of/unittest-data/tests-export-symbols.dtsi b/drivers/o= f/unittest-data/tests-export-symbols.dtsi new file mode 100644 index 000000000000..1650289b34cd --- /dev/null +++ b/drivers/of/unittest-data/tests-export-symbols.dtsi @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: GPL-2.0 + +/ { + testcase-data { + test-export-symbols { + test_export_symbols_b0: base0 { + test_export_symbols_n0: node { + dummy; + }; + + export-symbols { + test_export_base =3D <&test_export_symbols_b0>; + test_export_node =3D <&test_export_symbols_n0>; + }; + }; + + test_export_symbols_b1: base1 { + + test_export_symbols_n1: node { + dummy; + }; + + export-symbols { + test_export_base =3D <&test_export_symbols_b1>; + test_export_node =3D <&test_export_symbols_n1>; + }; + }; + }; + }; +}; diff --git a/drivers/of/unittest.c b/drivers/of/unittest.c index 11091b0176e0..bf286902c65b 100644 --- a/drivers/of/unittest.c +++ b/drivers/of/unittest.c @@ -4164,6 +4164,69 @@ static __init void of_unittest_overlay_high_level(vo= id) mutex_unlock(&of_mutex); } =20 +OVERLAY_INFO_EXTERN(overlay_export_symbols); + +static __init void of_unittest_export_symbols(const char *prefix, + const char *base_full_path) +{ + const struct overlay_info ovl =3D OVERLAY_INFO(overlay_export_symbols, 0,= 0); + struct device_node *ovl_node; + struct device_node *base; + struct device_node *node; + struct device_node *ref; + int ovcs_id; + u32 size; + int ret; + + base =3D of_find_node_by_path(base_full_path); + if (unittest(base, "%s: Get base (%s) failed\n", prefix, base_full_path)) + return; + + node =3D of_get_child_by_name(base, "node"); + if (unittest(base, "%s: Get node from %pOF failed\n", prefix, base)) + goto end_put_base; + + size =3D ovl.dtbo_end - ovl.dtbo_begin; + ret =3D of_overlay_fdt_apply(ovl.dtbo_begin, size, &ovcs_id, base, "expor= t-symbols"); + if (unittest(!ret, "%s: Apply '%s' failed (%d)\n", prefix, ovl.name, ret)) + goto end_put_node; + + ovl_node =3D of_get_child_by_name(base, "ovl_node"); + if (unittest(ovl_node, "%s: Get ovl_node from %pOF failed\n", prefix, bas= e)) + goto end_remove_overlay; + + ref =3D of_parse_phandle(ovl_node, "ref-base", 0); + if (unittest(ref, "%s: Parse 'ref-base' from %pOF failed\n", prefix, ovl_= node)) + goto end_put_ovl_node; + unittest(ref =3D=3D base, + "%s: Node from 'ref-base' phandle mismatches (got %pOF, expected %pOF)\= n", + prefix, ref, base); + of_node_put(ref); + + ref =3D of_parse_phandle(ovl_node, "ref-node", 0); + if (unittest(ref, "%s: Parse 'ref-node' from %pOF failed\n", prefix, ovl_= node)) + goto end_put_ovl_node; + unittest(ref =3D=3D node, + "%s: Node from 'ref-node' phandle mismatches (got %pOF, expected %pOF)\= n", + prefix, ref, node); + of_node_put(ref); + +end_put_ovl_node: + of_node_put(ovl_node); +end_remove_overlay: + of_overlay_remove(&ovcs_id); +end_put_node: + of_node_put(node); +end_put_base: + of_node_put(base); +} + +static __init void of_unittest_overlay_export_symbols(void) +{ + of_unittest_export_symbols("base0", "/testcase-data/test-export-symbols/b= ase0"); + of_unittest_export_symbols("base1", "/testcase-data/test-export-symbols/b= ase1"); +} + static int of_unittest_pci_dev_num; static int of_unittest_pci_child_num; =20 @@ -4349,6 +4412,7 @@ static void __init of_unittest_pci_node(void) #else =20 static inline __init void of_unittest_overlay_high_level(void) {} +static inline __init void of_unittest_overlay_export_symbols(void) {} static inline __init void of_unittest_pci_node(void) { } =20 #endif @@ -4404,6 +4468,7 @@ static int __init of_unittest(void) of_unittest_overlay(); of_unittest_lifecycle(); of_unittest_pci_node(); + of_unittest_overlay_export_symbols(); =20 /* Double check linkage after removing testcase data */ of_unittest_check_tree_linkage(); --=20 2.49.0