Pass barebox-detected bootsource to Linux to make it availible to Linux userspace. That information is passed as full path to the node corresponding to the bootsource and is placed under /chosen/bootsource and it can be read under Linux in /sys/firmware/devicetree/base/chosen/bootsource Signed-off-by: Andrey Smirnov <andrew.smirnov@xxxxxxxxx> --- common/oftree.c | 46 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/common/oftree.c b/common/oftree.c index 8a2ede4c6..5ab6bf089 100644 --- a/common/oftree.c +++ b/common/oftree.c @@ -11,6 +11,7 @@ #include <getopt.h> #include <init.h> #include <boot.h> +#include <bootsource.h> #include <i2c/i2c.h> #define MAX_LEVEL 32 /* how deeply nested we will go */ @@ -114,6 +115,47 @@ void of_print_cmdline(struct device_node *root) printf("commandline: %s\n", cmdline); } +static int of_fixup_bootargs_bootsource(struct device_node *root, + struct device_node *chosen) +{ + char *alias_name = bootsource_get_alias_name(); + struct device_node *bootsource; + struct device_node *aliasnp; + struct property *p; + int ret; + + if (!alias_name) + return 0; + + bootsource = of_find_node_by_alias(root, alias_name); + /* + * If kerenel DTB doesn't have the appropriate alias set up, + * give up and exit early. No error is reported. + */ + if (!bootsource) { + ret = 0; + goto exit; + } + + aliasnp = of_find_node_by_path_from(root, "/aliases"); + if (!aliasnp) { + ret = -ENOENT; + goto exit; + } + + p = of_find_property(aliasnp, alias_name, NULL); + if (!p) { + ret = -ENOENT; + goto exit; + } + + ret = of_set_property(chosen, "bootsource", of_property_get_value(p), + p->length, true); +exit: + free(alias_name); + return ret; +} + static int of_fixup_bootargs(struct device_node *root, void *unused) { struct device_node *node; @@ -131,8 +173,10 @@ static int of_fixup_bootargs(struct device_node *root, void *unused) of_property_write_string(node, "barebox-version", release_string); err = of_property_write_string(node, "bootargs", str); + if (err) + return err; - return err; + return of_fixup_bootargs_bootsource(root, node); } static int of_register_bootargs_fixup(void) -- 2.17.0 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox