[U-Boot] [PATCH v4 4/6] fdt: ARM: Implement and verify embedded and separate device tree

Kumar Gala galak at kernel.crashing.org
Fri Oct 21 07:13:17 CEST 2011


On Oct 15, 2011, at 10:48 AM, Simon Glass wrote:

> This locates the device tree either embedded within U-Boot or attached to the
> end as a separate binary.
> 
> When CONFIG_OF_CONTROL is defined, U-Boot requires a valid fdt. A check is
> provided for this early in initialisation.
> 
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
> arch/arm/lib/board.c |   22 ++++++++++++++++++++++
> 1 files changed, 22 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/arm/lib/board.c b/arch/arm/lib/board.c
> index 1fe3751..b0f3162 100644
> --- a/arch/arm/lib/board.c
> +++ b/arch/arm/lib/board.c
> @@ -48,6 +48,7 @@
> #include <nand.h>
> #include <onenand_uboot.h>
> #include <mmc.h>
> +#include <libfdt.h>
> #include <post.h>
> #include <logbuff.h>
> 
> @@ -197,6 +198,17 @@ static int arm_pci_init(void)
> }
> #endif /* CONFIG_CMD_PCI || CONFIG_PCI */
> 
> +#ifdef CONFIG_OF_CONTROL
> +static int check_fdt(void)
> +{
> +	/* We must have an fdt */
> +	if (fdt_check_header(gd->fdt_blob))
> +		panic("No valid fdt found - please append one to U-Boot\n"
> +			"binary or define CONFIG_OF_EMBED\n");
> +	return 0;
> +}
> +#endif
> +

this isn't arm specific, maybe put in fdt_support.c

> /*
>  * Breathe some life into the board...
>  *
> @@ -239,6 +251,9 @@ init_fnc_t *init_sequence[] = {
> #if defined(CONFIG_BOARD_EARLY_INIT_F)
> 	board_early_init_f,
> #endif
> +#ifdef CONFIG_OF_CONTROL
> +	check_fdt,
> +#endif
> 	timer_init,		/* initialize timer */
> #ifdef CONFIG_FSL_ESDHC
> 	get_clocks,
> @@ -276,6 +291,13 @@ void board_init_f(ulong bootflag)
> 	memset((void *)gd, 0, sizeof(gd_t));
> 
> 	gd->mon_len = _bss_end_ofs;
> +#ifdef CONFIG_OF_EMBED
> +	/* Get a pointer to the FDT */
> +	gd->fdt_blob = _binary_dt_dtb_start;
> +#elif defined CONFIG_OF_SEPARATE
> +	/* FDT is at end of image */
> +	gd->fdt_blob = (void *)(_end_ofs + _TEXT_BASE);
> +#endif
> 
> 	for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
> 		if ((*init_fnc_ptr)() != 0) {
> -- 
> 1.7.3.1



More information about the U-Boot mailing list