summaryrefslogtreecommitdiffstats
path: root/commands/of_overlay.c
diff options
context:
space:
mode:
Diffstat (limited to 'commands/of_overlay.c')
-rw-r--r--commands/of_overlay.c52
1 files changed, 41 insertions, 11 deletions
diff --git a/commands/of_overlay.c b/commands/of_overlay.c
index b3660b4bf1..2013c4b278 100644
--- a/commands/of_overlay.c
+++ b/commands/of_overlay.c
@@ -10,29 +10,46 @@
#include <getopt.h>
#include <libfile.h>
#include <of.h>
+#include <linux/clk.h>
static int do_of_overlay(int argc, char *argv[])
{
int ret;
- struct fdt_header *fdt;
struct device_node *overlay;
- size_t size;
+ bool live_tree = false;
+ int opt;
- if (argc != 2)
+ while ((opt = getopt(argc, argv, "l")) > 0) {
+ switch (opt) {
+ case 'l':
+ live_tree = true;
+ break;
+ }
+ }
+
+ if (argc != optind + 1)
return COMMAND_ERROR_USAGE;
- fdt = read_file(argv[optind], &size);
- if (!fdt) {
- printf("cannot read %s\n", argv[optind]);
+ if (live_tree && !IS_ENABLED(CONFIG_OF_OVERLAY_LIVE)) {
+ printf("Support for live tree overlays is disabled. Enable CONFIG_OF_OVERLAY_LIVE\n");
return 1;
}
- overlay = of_unflatten_dtb(fdt, size);
- free(fdt);
+ overlay = of_read_file(argv[optind]);
if (IS_ERR(overlay))
return PTR_ERR(overlay);
- ret = of_register_overlay(overlay);
+ if (live_tree) {
+ ret = of_overlay_apply_tree(of_get_root_node(), overlay);
+ if (ret)
+ goto err;
+
+ of_clk_init();
+ of_probe();
+ } else {
+ ret = of_register_overlay(overlay);
+ }
+
if (ret) {
printf("cannot apply oftree overlay: %s\n", strerror(-ret));
goto err;
@@ -45,9 +62,22 @@ err:
return ret;
}
+BAREBOX_CMD_HELP_START(of_overlay)
+BAREBOX_CMD_HELP_TEXT("Register a device tree overlay file (dtbo) with barebox.")
+BAREBOX_CMD_HELP_TEXT("By default the overlay is registered as a fixup and the")
+BAREBOX_CMD_HELP_TEXT("overlay will then be applied to the Linux device tree.")
+BAREBOX_CMD_HELP_TEXT("With -l given the overlay is applied to the barebox live")
+BAREBOX_CMD_HELP_TEXT("tree instead. This involves probing new devices added in")
+BAREBOX_CMD_HELP_TEXT("the overlay file.")
+BAREBOX_CMD_HELP_TEXT("")
+BAREBOX_CMD_HELP_TEXT("Options:")
+BAREBOX_CMD_HELP_OPT("-l", "apply to barebox live tree")
+BAREBOX_CMD_HELP_END
+
BAREBOX_CMD_START(of_overlay)
.cmd = do_of_overlay,
- BAREBOX_CMD_DESC("register device tree overlay as fixup")
- BAREBOX_CMD_OPTS("FILE")
+ BAREBOX_CMD_DESC("register device tree overlay")
+ BAREBOX_CMD_OPTS("[-l] FILE")
BAREBOX_CMD_GROUP(CMD_GRP_MISC)
+ BAREBOX_CMD_HELP(cmd_of_overlay_help)
BAREBOX_CMD_END