[PATCH 1/2] fdtdec: encapsulate dtb_dt_embedded() within

Evgeny Bachinin EABachinin at salutedevices.com
Tue Dec 10 23:39:57 CET 2024


  Patch keeps the access to dtb_dt_embedded() within fdtdec API,
by means of new API function introduction. This new function is a
common place for updating appropriate global_data fields for
OF_EMBED case.

  Also, the consequence of the patch is movement of '___dtb_dt_*begin'
symbols' declaration from header file, because nobody used symbols
outside the lib/fdtdec.c.

Signed-off-by: Evgeny Bachinin <EABachinin at salutedevices.com>
Suggested-by: Simon Glass <sjg at chromium.org>
---
 common/board_r.c |  4 ++--
 include/fdtdec.h | 24 +++++++-----------------
 lib/fdtdec.c     | 26 ++++++++++++++++++++++++--
 3 files changed, 33 insertions(+), 21 deletions(-)

diff --git a/common/board_r.c b/common/board_r.c
index 88dc756b2a5e5a44f55f9b0fd012adc798a8afdb..3c6a4c1f5df80d5f5bf86ed4047fccf981dbc244 100644
--- a/common/board_r.c
+++ b/common/board_r.c
@@ -155,11 +155,11 @@ static int initr_reloc_global_data(void)
 
 	/*
 	 * For CONFIG_OF_EMBED case the FDT is embedded into ELF, available by
-	 * __dtb_dt_begin. After U-boot ELF self-relocation to RAM top address
+	 * __dtb_dt_begin. After U-Boot ELF self-relocation to RAM top address
 	 * it is worth to update fdt_blob in global_data
 	 */
 	if (IS_ENABLED(CONFIG_OF_EMBED))
-		gd->fdt_blob = dtb_dt_embedded();
+		fdtdec_setup_embed();
 
 #ifdef CONFIG_EFI_LOADER
 	/*
diff --git a/include/fdtdec.h b/include/fdtdec.h
index 555c952037964e6b1d9419156171f7ef4b35f448..88eeb5129780878a6fa4ac7a357e4e704347ab43 100644
--- a/include/fdtdec.h
+++ b/include/fdtdec.h
@@ -136,23 +136,6 @@ struct fdt_pci_addr {
 	u32	phys_lo;
 };
 
-extern u8 __dtb_dt_begin[];	/* embedded device tree blob */
-extern u8 __dtb_dt_spl_begin[];	/* embedded device tree blob for SPL/TPL */
-
-/* Get a pointer to the embedded devicetree, if there is one, else NULL */
-static inline u8 *dtb_dt_embedded(void)
-{
-#ifdef CONFIG_OF_EMBED
-# ifdef CONFIG_XPL_BUILD
-	return __dtb_dt_spl_begin;
-# else
-	return __dtb_dt_begin;
-# endif
-#else
-	return NULL;
-#endif
-}
-
 /**
  * Compute the size of a resource.
  *
@@ -1155,6 +1138,13 @@ int fdtdec_set_carveout(void *blob, const char *node, const char *prop_name,
 			const char *name, const char **compatibles,
 			unsigned int count, unsigned long flags);
 
+/**
+ * fdtdec_setup_embed - pick up embedded DTS
+ *
+ * Should be invoked under CONFIG_OF_EMBED guard.
+ */
+void fdtdec_setup_embed(void);
+
 /**
  * Set up the device tree ready for use
  */
diff --git a/lib/fdtdec.c b/lib/fdtdec.c
index b06559880296276bebd434e9d1de6d2fa923fa98..9cb94a158441cfd291a0f173c321a722e896bcb2 100644
--- a/lib/fdtdec.c
+++ b/lib/fdtdec.c
@@ -93,6 +93,23 @@ static const char *const fdt_src_name[] = {
 	[FDTSRC_BLOBLIST] = "bloblist",
 };
 
+extern u8 __dtb_dt_begin[];	/* embedded device tree blob */
+extern u8 __dtb_dt_spl_begin[];	/* embedded device tree blob for SPL/TPL */
+
+/* Get a pointer to the embedded devicetree, if there is one, else NULL */
+static u8 *dtb_dt_embedded(void)
+{
+#ifdef CONFIG_OF_EMBED
+# ifdef CONFIG_XPL_BUILD
+	return __dtb_dt_spl_begin;
+# else
+	return __dtb_dt_begin;
+# endif
+#else
+	return NULL;
+#endif
+}
+
 const char *fdtdec_get_srcname(void)
 {
 	return fdt_src_name[gd->fdt_src];
@@ -1664,6 +1681,12 @@ static void setup_multi_dtb_fit(void)
 	}
 }
 
+void fdtdec_setup_embed(void)
+{
+	gd->fdt_blob = dtb_dt_embedded();
+	gd->fdt_src = FDTSRC_EMBED;
+}
+
 int fdtdec_setup(void)
 {
 	int ret = -ENOENT;
@@ -1699,8 +1722,7 @@ int fdtdec_setup(void)
 			gd->fdt_blob = fdt_find_separate();
 			gd->fdt_src = FDTSRC_SEPARATE;
 		} else { /* embed dtb in ELF file for testing / development */
-			gd->fdt_blob = dtb_dt_embedded();
-			gd->fdt_src = FDTSRC_EMBED;
+			fdtdec_setup_embed();
 		}
 	}
 

-- 
2.34.1



More information about the U-Boot mailing list