[U-Boot] [PATCH 3/5] microblaze: Add support for device tree driven board configuration

Michal Simek monstr at monstr.eu
Mon Jul 9 10:41:04 CEST 2012


2012/6/29 Michal Simek <monstr at monstr.eu>:
> This is minimum code required to be able to use device-tree
> for u-boot initialization.
> Currently only for device driver initialization.
>
> Linker script change ensures DTB to be aligned
> for both options CONFIG_OF_EMBED and CONFIG_OF_SEPARATE.
>
> Signed-off-by: Michal Simek <monstr at monstr.eu>
> CC: Simon Glass <sjg at chromium.org>
> ---
>  arch/microblaze/config.mk                 |    2 ++
>  arch/microblaze/cpu/u-boot.lds            |    1 +
>  arch/microblaze/include/asm/global_data.h |    1 +
>  arch/microblaze/lib/board.c               |   23 +++++++++++++++++++++++
>  4 files changed, 27 insertions(+), 0 deletions(-)
>
> diff --git a/arch/microblaze/config.mk b/arch/microblaze/config.mk
> index aca79e2..b4935f0 100644
> --- a/arch/microblaze/config.mk
> +++ b/arch/microblaze/config.mk
> @@ -31,3 +31,5 @@ CONFIG_STANDALONE_LOAD_ADDR ?= 0x80F00000
>  PLATFORM_CPPFLAGS += -ffixed-r31 -D__microblaze__
>
>  LDSCRIPT ?= $(SRCTREE)/$(CPUDIR)/u-boot.lds
> +
> +CONFIG_ARCH_DEVICE_TREE := microblaze
> diff --git a/arch/microblaze/cpu/u-boot.lds b/arch/microblaze/cpu/u-boot.lds
> index ee41145..d033a28 100644
> --- a/arch/microblaze/cpu/u-boot.lds
> +++ b/arch/microblaze/cpu/u-boot.lds
> @@ -45,6 +45,7 @@ SECTIONS
>         .data ALIGN(0x4):
>         {
>                 __data_start = .;
> +               dts/libdts.o (.data)
>                 *(.data)
>                 __data_end = .;
>         }
> diff --git a/arch/microblaze/include/asm/global_data.h b/arch/microblaze/include/asm/global_data.h
> index 6e8537c..e802e4e 100644
> --- a/arch/microblaze/include/asm/global_data.h
> +++ b/arch/microblaze/include/asm/global_data.h
> @@ -43,6 +43,7 @@ typedef       struct  global_data {
>         unsigned long   precon_buf_idx; /* Pre-Console buffer index */
>  #endif
>         unsigned long   env_addr;       /* Address  of Environment struct */
> +       const void      *fdt_blob;      /* Our device tree, NULL if none */
>         unsigned long   env_valid;      /* Checksum of Environment valid? */
>         unsigned long   fb_base;        /* base address of frame buffer */
>         void            **jt;           /* jump table */
> diff --git a/arch/microblaze/lib/board.c b/arch/microblaze/lib/board.c
> index f3679d5..59d39a0 100644
> --- a/arch/microblaze/lib/board.c
> +++ b/arch/microblaze/lib/board.c
> @@ -32,6 +32,7 @@
>  #include <stdio_dev.h>
>  #include <net.h>
>  #include <asm/processor.h>
> +#include <fdtdec.h>
>
>  DECLARE_GLOBAL_DATA_PTR;
>
> @@ -68,6 +69,9 @@ typedef int (init_fnc_t) (void);
>
>  init_fnc_t *init_sequence[] = {
>         env_init,
> +#ifdef CONFIG_OF_CONTROL
> +       fdtdec_check_fdt,
> +#endif
>         serial_init,
>         console_init_f,
>  #ifdef CONFIG_SYS_GPIO_0
> @@ -110,6 +114,17 @@ void board_init (void)
>
>         monitor_flash_len = __end - __text_start;
>
> +#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;
> +#endif
> +       /* Allow the early environment to override the fdt address */
> +       gd->fdt_blob = (void *)getenv_ulong("fdtcontroladdr", 16,
> +                                               (uintptr_t)gd->fdt_blob);
> +
>         /*
>          * The Malloc area is immediately below the monitor copy in DRAM
>          * aka CONFIG_SYS_MONITOR_BASE - Note there is no need for reloc_off
> @@ -124,6 +139,14 @@ void board_init (void)
>                 }
>         }
>
> +#ifdef CONFIG_OF_CONTROL
> +       /* For now, put this check after the console is ready */
> +       if (fdtdec_prepare_fdt()) {
> +               panic("** CONFIG_OF_CONTROL defined but no FDT - please see "
> +                       "doc/README.fdt-control");
> +       }
> +#endif
> +
>         puts ("SDRAM :\n");
>         printf ("\t\tIcache:%s\n", icache_status() ? "ON" : "OFF");
>         printf ("\t\tDcache:%s\n", dcache_status() ? "ON" : "OFF");
> --
> 1.7.0.4
>

Reject. v2 will add one more puts.

Michal

-- 
Michal Simek, Ing. (M.Eng)
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel 2.6 Microblaze Linux - http://www.monstr.eu/fdt/
Microblaze U-BOOT custodian


More information about the U-Boot mailing list