fdt: Introduce helper method fdt_overlay_apply_verbose()
authorPantelis Antoniou <pantelis.antoniou@konsulko.com>
Mon, 4 Sep 2017 20:12:11 +0000 (23:12 +0300)
committerSimon Glass <sjg@chromium.org>
Fri, 15 Sep 2017 11:27:48 +0000 (05:27 -0600)
Introduce fdt_overlay_apply_verbose, a method that applies an
overlay but in the case of an error produces a helpful message.

In addition if a base tree is found to be missing the __symbols__
node the message will point out that the probable reason is that
the base tree was miscompiled without the -@ option.

Signed-off-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
Acked-by: Simon Glass <sjg@chromium.org>
common/fdt_support.c
include/fdt_support.h

index 916a448c11d43a82e25155f001c919cd8b5e9541..f4f9543d5475d804e9059a51ccb199604605fc7b 100644 (file)
@@ -1655,3 +1655,34 @@ int fdt_fixup_display(void *blob, const char *path, const char *display)
        }
        return toff;
 }
+
+#ifdef CONFIG_OF_LIBFDT_OVERLAY
+/**
+ * fdt_overlay_apply_verbose - Apply an overlay with verbose error reporting
+ *
+ * @fdt: ptr to device tree
+ * @fdto: ptr to device tree overlay
+ *
+ * Convenience function to apply an overlay and display helpful messages
+ * in the case of an error
+ */
+int fdt_overlay_apply_verbose(void *fdt, void *fdto)
+{
+       int err;
+       bool has_symbols;
+
+       err = fdt_path_offset(fdt, "/__symbols__");
+       has_symbols = err >= 0;
+
+       err = fdt_overlay_apply(fdt, fdto);
+       if (err < 0) {
+               printf("failed on fdt_overlay_apply(): %s\n",
+                               fdt_strerror(err));
+               if (!has_symbols) {
+                       printf("base fdt does did not have a /__symbols__ node\n");
+                       printf("make sure you've compiled with -@\n");
+               }
+       }
+       return err;
+}
+#endif
index 5ef78cce6e0f2e27fa6f9b1d4b9ed3b45ca7758b..2bca4d7889180936b92e423c16a91740338c3090 100644 (file)
@@ -264,6 +264,8 @@ int arch_fixup_memory_node(void *blob);
 int fdt_setup_simplefb_node(void *fdt, int node, u64 base_address, u32 width,
                            u32 height, u32 stride, const char *format);
 
+int fdt_overlay_apply_verbose(void *fdt, void *fdto);
+
 #endif /* ifdef CONFIG_OF_LIBFDT */
 
 #ifdef USE_HOSTCC