[U-Boot] [PATCH 02/29] fdt: Allow the device tree to be set up by board init code

Simon Glass sjg at chromium.org
Thu Dec 15 04:27:33 CET 2016


On blackfin we need to relocate the device tree early on during boot
because it breaks the rules of not accessing BSS before relocation. To
accommodate this, add a check to see if the device tree pointer is already
set up. If it is, leave it alone.

Signed-off-by: Simon Glass <sjg at chromium.org>
---

 lib/fdtdec.c | 31 ++++++++++++++++++-------------
 1 file changed, 18 insertions(+), 13 deletions(-)

diff --git a/lib/fdtdec.c b/lib/fdtdec.c
index 4e619c4..c484950 100644
--- a/lib/fdtdec.c
+++ b/lib/fdtdec.c
@@ -1177,26 +1177,31 @@ int fdtdec_decode_display_timing(const void *blob, int parent, int index,
 int fdtdec_setup(void)
 {
 #if CONFIG_IS_ENABLED(OF_CONTROL)
+	if (!gd->fdt_blob) {
 # ifdef CONFIG_OF_EMBED
-	/* Get a pointer to the FDT */
-	gd->fdt_blob = __dtb_dt_begin;
+		/* Get a pointer to the FDT */
+		gd->fdt_blob = __dtb_dt_begin;
 # elif defined CONFIG_OF_SEPARATE
 #  ifdef CONFIG_SPL_BUILD
-	/* FDT is at end of BSS unless it is in a different memory region */
-	if (IS_ENABLED(CONFIG_SPL_SEPARATE_BSS))
-		gd->fdt_blob = (ulong *)&_image_binary_end;
-	else
-		gd->fdt_blob = (ulong *)&__bss_end;
+		/*
+		 * FDT is at end of BSS unless it is in a different memory
+		 * region
+		 */
+		if (IS_ENABLED(CONFIG_SPL_SEPARATE_BSS))
+			gd->fdt_blob = (ulong *)&_image_binary_end;
+		else
+			gd->fdt_blob = (ulong *)&__bss_end;
 #  else
-	/* FDT is at end of image */
-	gd->fdt_blob = (ulong *)&_end;
+		/* FDT is at end of image */
+		gd->fdt_blob = (ulong *)&_end;
 #  endif
 # elif defined(CONFIG_OF_HOSTFILE)
-	if (sandbox_read_fdt_from_file()) {
-		puts("Failed to read control FDT\n");
-		return -1;
-	}
+		if (sandbox_read_fdt_from_file()) {
+			puts("Failed to read control FDT\n");
+			return -1;
+		}
 # endif
+	}
 # ifndef CONFIG_SPL_BUILD
 	/* Allow the early environment to override the fdt address */
 	gd->fdt_blob = (void *)getenv_ulong("fdtcontroladdr", 16,
-- 
2.8.0.rc3.226.g39d4020



More information about the U-Boot mailing list