mirror of
https://github.com/Stichting-MINIX-Research-Foundation/u-boot.git
synced 2025-09-09 20:18:54 -04:00
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: Michal Simek <monstr@monstr.eu> Acked-by: Stephan Linz <linz@li-pro.net> CC: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
03afad2fc9
commit
b710d9d6c2
@ -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
|
|||||||
.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 {
|
|||||||
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 @@
|
|||||||
#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);
|
|||||||
|
|
||||||
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)
|
|||||||
|
|
||||||
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)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#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");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user