Message ID | 1340955478-22251-3-git-send-email-monstr@monstr.eu |
---|---|
State | Accepted |
Delegated to: | Michal Simek |
Headers | show |
2012/6/29 Michal Simek <monstr@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@monstr.eu> > CC: Simon Glass <sjg@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
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");
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@monstr.eu> CC: Simon Glass <sjg@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(-)