diff options
| -rw-r--r-- | arch/microblaze/config.mk | 2 | ||||
| -rw-r--r-- | arch/microblaze/cpu/u-boot.lds | 1 | ||||
| -rw-r--r-- | arch/microblaze/include/asm/global_data.h | 1 | ||||
| -rw-r--r-- | arch/microblaze/lib/board.c | 24 | 
4 files changed, 28 insertions, 0 deletions
| diff --git a/arch/microblaze/config.mk b/arch/microblaze/config.mk index aca79e261..b4935f0a5 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 ee41145bb..d033a2835 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 0dc4ce9ee..de3b8dbe9 100644 --- a/arch/microblaze/include/asm/global_data.h +++ b/arch/microblaze/include/asm/global_data.h @@ -41,6 +41,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 b80250a6b..942e18c2c 100644 --- a/arch/microblaze/lib/board.c +++ b/arch/microblaze/lib/board.c @@ -34,6 +34,7 @@  #include <net.h>  #include <asm/processor.h>  #include <asm/microblaze_intc.h> +#include <fdtdec.h>  DECLARE_GLOBAL_DATA_PTR; @@ -63,6 +64,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 @@ -103,6 +107,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 @@ -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");  	printf ("\t\tIcache:%s\n", icache_status() ? "ON" : "OFF");  	printf ("\t\tDcache:%s\n", dcache_status() ? "ON" : "OFF"); |