From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kumar Gala Date: Fri, 21 Oct 2011 00:13:17 -0500 Subject: [U-Boot] [PATCH v4 4/6] fdt: ARM: Implement and verify embedded and separate device tree In-Reply-To: <1318693706-3381-5-git-send-email-sjg@chromium.org> References: <1318693706-3381-1-git-send-email-sjg@chromium.org> <1318693706-3381-5-git-send-email-sjg@chromium.org> Message-ID: <182DD822-1B5D-4AC0-B512-367DDB38B949@kernel.crashing.org> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 > --- > 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 > #include > #include > +#include > #include > #include > > @@ -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