dm: util: Add a livetree equivalent API of dm_fdt_pre_reloc()
authorBin Meng <bmeng.cn@gmail.com>
Thu, 11 Oct 2018 05:06:57 +0000 (22:06 -0700)
committerSimon Glass <sjg@chromium.org>
Wed, 14 Nov 2018 17:16:27 +0000 (09:16 -0800)
This adds a new API dm_ofnode_pre_reloc(), a livetree equivalent
API of dm_fdt_pre_reloc().

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
drivers/core/util.c
include/dm/util.h

index 451d4766d08c7a9db25da13f54f9fa6af52ede1d..27a68487034e182331ece2ed2244ebf685bd5a79 100644 (file)
@@ -4,6 +4,7 @@
  */
 
 #include <common.h>
+#include <dm/ofnode.h>
 #include <dm/util.h>
 #include <linux/libfdt.h>
 #include <vsprintf.h>
@@ -53,3 +54,27 @@ bool dm_fdt_pre_reloc(const void *blob, int offset)
 
        return false;
 }
+
+bool dm_ofnode_pre_reloc(ofnode node)
+{
+       if (ofnode_read_bool(node, "u-boot,dm-pre-reloc"))
+               return true;
+
+#ifdef CONFIG_TPL_BUILD
+       if (ofnode_read_bool(node, "u-boot,dm-tpl"))
+               return true;
+#elif defined(CONFIG_SPL_BUILD)
+       if (ofnode_read_bool(node, "u-boot,dm-spl"))
+               return true;
+#else
+       /*
+        * In regular builds individual spl and tpl handling both
+        * count as handled pre-relocation for later second init.
+        */
+       if (ofnode_read_bool(node, "u-boot,dm-spl") ||
+           ofnode_read_bool(node, "u-boot,dm-tpl"))
+               return true;
+#endif
+
+       return false;
+}
index 898822e4459f548de5257d6a14a72339001e5abd..9ff6531d1b25f3380ed35bdb9c21ec620086f027 100644 (file)
@@ -55,7 +55,7 @@ static inline void dm_dump_devres(void)
  * There are 3 settings currently in use
  * -
  * - u-boot,dm-pre-reloc: legacy and indicates any of TPL or SPL
- *   Existing platforms only use it to indicate nodes needee in
+ *   Existing platforms only use it to indicate nodes needed in
  *   SPL. Should probably be replaced by u-boot,dm-spl for
  *   existing platforms.
  * @blob: devicetree
@@ -65,4 +65,29 @@ static inline void dm_dump_devres(void)
  */
 bool dm_fdt_pre_reloc(const void *blob, int offset);
 
+/**
+ * Check if an of node should be or was bound before relocation.
+ *
+ * Devicetree nodes can be marked as needed to be bound
+ * in the loader stages via special devicetree properties.
+ *
+ * Before relocation this function can be used to check if nodes
+ * are required in either SPL or TPL stages.
+ *
+ * After relocation and jumping into the real U-Boot binary
+ * it is possible to determine if a node was bound in one of
+ * SPL/TPL stages.
+ *
+ * There are 3 settings currently in use
+ * -
+ * - u-boot,dm-pre-reloc: legacy and indicates any of TPL or SPL
+ *   Existing platforms only use it to indicate nodes needed in
+ *   SPL. Should probably be replaced by u-boot,dm-spl for
+ *   existing platforms.
+ * @node: of node
+ *
+ * Returns true if node is needed in SPL/TL, false otherwise.
+ */
+bool dm_ofnode_pre_reloc(ofnode node);
+
 #endif