Add generic function to extend/fixup machine compatible. Signed-off-by: Oleksij Rempel <o.rempel@xxxxxxxxxxxxxx> --- common/oftree.c | 30 ++++++++++++++++++++++++++++++ include/of.h | 6 ++++++ 2 files changed, 36 insertions(+) diff --git a/common/oftree.c b/common/oftree.c index c6d75055cc..0a66882946 100644 --- a/common/oftree.c +++ b/common/oftree.c @@ -487,3 +487,33 @@ int of_autoenable_i2c_by_component(char *path) return ret; } + +int of_fixup_machine_compatible(struct device_node *root, const char *compat) +{ + int cclen = 0, clen = strlen(compat) + 1; + const char *curcompat; + void *buf; + + if (!root) { + root = of_get_root_node(); + if (!root) + return -ENODEV; + } + + curcompat = of_get_property(root, "compatible", &cclen); + + buf = xzalloc(cclen + clen); + + memcpy(buf, compat, clen); + memcpy(buf + clen, curcompat, cclen); + + /* + * Prepend the compatible from board entry to the machine compatible. + * Used to match bootspec entries against it. + */ + of_set_property(root, "compatible", buf, cclen + clen, true); + + free(buf); + + return 0; +} diff --git a/include/of.h b/include/of.h index cf9950e9b3..9f514c5ec2 100644 --- a/include/of.h +++ b/include/of.h @@ -316,6 +316,7 @@ struct device_node *of_find_node_by_path_or_alias(struct device_node *root, const char *str); int of_autoenable_device_by_path(char *path); int of_autoenable_i2c_by_component(char *path); +int of_fixup_machine_compatible(struct device_node *root, const char *compat); #else static inline bool of_node_name_eq(const struct device_node *np, const char *name) { @@ -834,6 +835,11 @@ static inline int of_autoenable_i2c_by_component(char *path) return -ENODEV; } +static int of_fixup_machine_compatible(struct device_node *root, + const char *compat) +{ + return -ENODEV; +} #endif -- 2.30.2 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox