Skip to content
Snippets Groups Projects
Commit b710d9d6 authored by Michal Simek's avatar Michal Simek
Browse files

microblaze: Add support for device tree driven board configuration


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: default avatarMichal Simek <monstr@monstr.eu>
Acked-by: default avatarStephan Linz <linz@li-pro.net>
CC: Simon Glass <sjg@chromium.org>
parent 03afad2f
No related branches found
No related tags found
No related merge requests found
...@@ -31,3 +31,5 @@ CONFIG_STANDALONE_LOAD_ADDR ?= 0x80F00000 ...@@ -31,3 +31,5 @@ CONFIG_STANDALONE_LOAD_ADDR ?= 0x80F00000
PLATFORM_CPPFLAGS += -ffixed-r31 -D__microblaze__ PLATFORM_CPPFLAGS += -ffixed-r31 -D__microblaze__
LDSCRIPT ?= $(SRCTREE)/$(CPUDIR)/u-boot.lds LDSCRIPT ?= $(SRCTREE)/$(CPUDIR)/u-boot.lds
CONFIG_ARCH_DEVICE_TREE := microblaze
...@@ -45,6 +45,7 @@ SECTIONS ...@@ -45,6 +45,7 @@ SECTIONS
.data ALIGN(0x4): .data ALIGN(0x4):
{ {
__data_start = .; __data_start = .;
dts/libdts.o (.data)
*(.data) *(.data)
__data_end = .; __data_end = .;
} }
......
...@@ -41,6 +41,7 @@ typedef struct global_data { ...@@ -41,6 +41,7 @@ typedef struct global_data {
unsigned long precon_buf_idx; /* Pre-Console buffer index */ unsigned long precon_buf_idx; /* Pre-Console buffer index */
#endif #endif
unsigned long env_addr; /* Address of Environment struct */ 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 env_valid; /* Checksum of Environment valid? */
unsigned long fb_base; /* base address of frame buffer */ unsigned long fb_base; /* base address of frame buffer */
void **jt; /* jump table */ void **jt; /* jump table */
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include <net.h> #include <net.h>
#include <asm/processor.h> #include <asm/processor.h>
#include <asm/microblaze_intc.h> #include <asm/microblaze_intc.h>
#include <fdtdec.h>
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;
...@@ -63,6 +64,9 @@ typedef int (init_fnc_t) (void); ...@@ -63,6 +64,9 @@ typedef int (init_fnc_t) (void);
init_fnc_t *init_sequence[] = { init_fnc_t *init_sequence[] = {
env_init, env_init,
#ifdef CONFIG_OF_CONTROL
fdtdec_check_fdt,
#endif
serial_init, serial_init,
console_init_f, console_init_f,
#ifdef CONFIG_SYS_GPIO_0 #ifdef CONFIG_SYS_GPIO_0
...@@ -103,6 +107,17 @@ void board_init (void) ...@@ -103,6 +107,17 @@ void board_init (void)
monitor_flash_len = __end - __text_start; 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 * The Malloc area is immediately below the monitor copy in DRAM
* aka CONFIG_SYS_MONITOR_BASE - Note there is no need for reloc_off * aka CONFIG_SYS_MONITOR_BASE - Note there is no need for reloc_off
...@@ -121,6 +136,15 @@ void board_init (void) ...@@ -121,6 +136,15 @@ 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");
} else
printf("DTB: 0x%x\n", (u32)gd->fdt_blob);
#endif
puts ("SDRAM :\n"); puts ("SDRAM :\n");
printf ("\t\tIcache:%s\n", icache_status() ? "ON" : "OFF"); printf ("\t\tIcache:%s\n", icache_status() ? "ON" : "OFF");
printf ("\t\tDcache:%s\n", dcache_status() ? "ON" : "OFF"); printf ("\t\tDcache:%s\n", dcache_status() ? "ON" : "OFF");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment