of: unittest: allow base devicetree to have symbol metadata
The overlay metadata nodes in the FDT created from testcases.dts are not handled properly. The __fixups__ and __local_fixups__ node were added to the live devicetree, but should not be. Only the first property in the /__symbols__ node was added to the live devicetree if the live devicetree already contained a /__symbols node. All of the node's properties must be added. Tested-by: Alan Tull <atull@kernel.org> Signed-off-by: Frank Rowand <frank.rowand@sony.com>
This commit is contained in:
parent
f962788101
commit
5babefb7f7
|
@ -1071,20 +1071,44 @@ static void __init of_unittest_platform_populate(void)
|
||||||
* of np into dup node (present in live tree) and
|
* of np into dup node (present in live tree) and
|
||||||
* updates parent of children of np to dup.
|
* updates parent of children of np to dup.
|
||||||
*
|
*
|
||||||
* @np: node already present in live tree
|
* @np: node whose properties are being added to the live tree
|
||||||
* @dup: node present in live tree to be updated
|
* @dup: node present in live tree to be updated
|
||||||
*/
|
*/
|
||||||
static void update_node_properties(struct device_node *np,
|
static void update_node_properties(struct device_node *np,
|
||||||
struct device_node *dup)
|
struct device_node *dup)
|
||||||
{
|
{
|
||||||
struct property *prop;
|
struct property *prop;
|
||||||
|
struct property *save_next;
|
||||||
struct device_node *child;
|
struct device_node *child;
|
||||||
|
int ret;
|
||||||
for_each_property_of_node(np, prop)
|
|
||||||
of_add_property(dup, prop);
|
|
||||||
|
|
||||||
for_each_child_of_node(np, child)
|
for_each_child_of_node(np, child)
|
||||||
child->parent = dup;
|
child->parent = dup;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* "unittest internal error: unable to add testdata property"
|
||||||
|
*
|
||||||
|
* If this message reports a property in node '/__symbols__' then
|
||||||
|
* the respective unittest overlay contains a label that has the
|
||||||
|
* same name as a label in the live devicetree. The label will
|
||||||
|
* be in the live devicetree only if the devicetree source was
|
||||||
|
* compiled with the '-@' option. If you encounter this error,
|
||||||
|
* please consider renaming __all__ of the labels in the unittest
|
||||||
|
* overlay dts files with an odd prefix that is unlikely to be
|
||||||
|
* used in a real devicetree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* open code for_each_property_of_node() because of_add_property()
|
||||||
|
* sets prop->next to NULL
|
||||||
|
*/
|
||||||
|
for (prop = np->properties; prop != NULL; prop = save_next) {
|
||||||
|
save_next = prop->next;
|
||||||
|
ret = of_add_property(dup, prop);
|
||||||
|
if (ret)
|
||||||
|
pr_err("unittest internal error: unable to add testdata property %pOF/%s",
|
||||||
|
np, prop->name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1093,18 +1117,23 @@ static void update_node_properties(struct device_node *np,
|
||||||
*
|
*
|
||||||
* @np: Node to attach to live tree
|
* @np: Node to attach to live tree
|
||||||
*/
|
*/
|
||||||
static int attach_node_and_children(struct device_node *np)
|
static void attach_node_and_children(struct device_node *np)
|
||||||
{
|
{
|
||||||
struct device_node *next, *dup, *child;
|
struct device_node *next, *dup, *child;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
const char *full_name;
|
const char *full_name;
|
||||||
|
|
||||||
full_name = kasprintf(GFP_KERNEL, "%pOF", np);
|
full_name = kasprintf(GFP_KERNEL, "%pOF", np);
|
||||||
|
|
||||||
|
if (!strcmp(full_name, "/__local_fixups__") ||
|
||||||
|
!strcmp(full_name, "/__fixups__"))
|
||||||
|
return;
|
||||||
|
|
||||||
dup = of_find_node_by_path(full_name);
|
dup = of_find_node_by_path(full_name);
|
||||||
kfree(full_name);
|
kfree(full_name);
|
||||||
if (dup) {
|
if (dup) {
|
||||||
update_node_properties(np, dup);
|
update_node_properties(np, dup);
|
||||||
return 0;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
child = np->child;
|
child = np->child;
|
||||||
|
@ -1125,8 +1154,6 @@ static int attach_node_and_children(struct device_node *np)
|
||||||
attach_node_and_children(child);
|
attach_node_and_children(child);
|
||||||
child = next;
|
child = next;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue