On 03/12/24 09:47, David Gibson wrote:
On Sat, Nov 16, 2024 at 08:30:19PM +0530, Ayush Singh wrote:
Enable generating fixups entries for path references. These are the same
as the entries for phandles.
Path properties have empty value in generated overlay. This allows easy
differentiation between path references (size > 0) and path references
(size == 0).
Signed-off-by: Ayush Singh <ayush@xxxxxxxxxxxxxxx>
---
checks.c | 6 ++++--
livetree.c | 19 +++++++++++++++++--
2 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/checks.c b/checks.c
index 6e06aeab5503f78c8a969f8d1d0e96be7b91749e..1ec59c6a1be375e1695b68203a0782cf23ee33fa 100644
--- a/checks.c
+++ b/checks.c
@@ -651,8 +651,10 @@ static void fixup_path_references(struct check *c, struct dt_info *dti,
refnode = get_node_by_ref(dt, m->ref);
if (!refnode) {
- FAIL(c, dti, node, "Reference to non-existent node or label \"%s\"\n",
- m->ref);
+ if (!(dti->dtsflags & DTSF_PLUGIN))
+ FAIL(c, dti, node,
+ "Reference to non-existent node or label \"%s\"\n",
+ m->ref);
continue;
}
diff --git a/livetree.c b/livetree.c
index 49f723002f855764452b30b5a979b6096730a33b..4e26d378e09407d6a395c2f1bbd73c1874de4ae0 100644
--- a/livetree.c
+++ b/livetree.c
@@ -908,6 +908,13 @@ static bool any_fixup_tree(struct dt_info *dti, struct node *node)
if (!get_node_by_ref(dti->dt, m->ref))
return true;
}
+ m = prop->val.markers;
+ for_each_marker_of_type(m, REF_PATH)
+ {
Opening brace goes on the same line as the for_each()
+ if (m->ref) {
As for phandle references, you don't need to emit a fixup if the
reference can be resolved within the current tree, so you want a
get_node_by_ref() before returning true.
+ return true;
+ }
No braces around single statements in dtc style.
Is there any clang-format config or something for dtc? I am currently
using the format config from Linux kernel.
+ }
}
for_each_child(node, c) {
@@ -924,8 +931,8 @@ static void add_fixup_entry(struct dt_info *dti, struct node *fn,
{
char *entry;
- /* m->ref can only be a REF_PHANDLE, but check anyway */
- assert(m->type == REF_PHANDLE);
+ /* m->ref can only be a REF_PHANDLE or REF_PATH, but check anyway */
+ assert(m->type == REF_PHANDLE || m->type == REF_PATH);
/* The format only permits fixups for references to label, not
* references to path */
@@ -961,6 +968,14 @@ static void generate_fixups_tree_internal(struct dt_info *dti,
if (!refnode)
add_fixup_entry(dti, fn, node, prop, m);
}
+
+ m = prop->val.markers;
+ for_each_marker_of_type(m, REF_PATH)
+ {
+ refnode = get_node_by_ref(dt, m->ref);
+ if (!refnode)
+ add_fixup_entry(dti, fn, node, prop, m);
+ }
I don't see how phandle fixups are distinguished from path fixups.
}
for_each_child(node, c)
Ayush Singh