[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20241209151830.95723-7-herve.codina@bootlin.com>
Date: Mon, 9 Dec 2024 16:18:24 +0100
From: Herve Codina <herve.codina@...tlin.com>
To: Andrew Davis <afd@...com>,
Ayush Singh <ayush@...gleboard.org>,
Geert Uytterhoeven <geert@...ux-m68k.org>,
Rob Herring <robh@...nel.org>,
Krzysztof Kozlowski <krzk+dt@...nel.org>,
Conor Dooley <conor+dt@...nel.org>,
Herve Codina <herve.codina@...tlin.com>,
Arnd Bergmann <arnd@...db.de>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
Saravana Kannan <saravanak@...gle.com>
Cc: devicetree@...r.kernel.org,
linux-kernel@...r.kernel.org,
Luca Ceresoli <luca.ceresoli@...tlin.com>,
Thomas Petazzoni <thomas.petazzoni@...tlin.com>
Subject: [PATCH 6/7] of: overlay: Add support for the export symbols node
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 <herve.codina@...tlin.com>
---
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 9bceeed45c9f..b69245a50746 100644
--- a/drivers/of/overlay.c
+++ b/drivers/of/overlay.c
@@ -887,6 +887,10 @@ static void free_overlay_changeset(struct overlay_changeset *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.
*
@@ -911,11 +915,24 @@ static void free_overlay_changeset(struct overlay_changeset *ovcs)
*/
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 = NULL;
int ret = 0, ret_revert, ret_tmp;
- ret = of_resolve_phandles(ovcs->overlay_root, NULL);
+ if (base && export_symbols_name) {
+ export_symbols = 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 = -EINVAL;
+ goto out;
+ }
+ }
+
+ ret = of_resolve_phandles(ovcs->overlay_root, export_symbols);
+ of_node_put(export_symbols);
if (ret)
goto out;
@@ -1055,7 +1072,7 @@ int of_overlay_fdt_apply(const void *overlay_fdt, u32 overlay_fdt_size,
}
ovcs->overlay_mem = overlay_mem;
- ret = of_overlay_apply(ovcs, base);
+ ret = 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
--
2.47.0
Powered by blists - more mailing lists