From patchwork Fri Jun 29 07:37:56 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Simek X-Patchwork-Id: 168010 X-Patchwork-Delegate: monstr@monstr.eu Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 654721007D4 for ; Fri, 29 Jun 2012 17:38:51 +1000 (EST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 059E1280B4; Fri, 29 Jun 2012 09:38:33 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id b64SSeLwLEcz; Fri, 29 Jun 2012 09:38:32 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 974352809B; Fri, 29 Jun 2012 09:38:24 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 4F08928093 for ; Fri, 29 Jun 2012 09:38:15 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id eNzeyy8NqeK1 for ; Fri, 29 Jun 2012 09:38:14 +0200 (CEST) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from mail-ey0-f172.google.com (mail-ey0-f172.google.com [209.85.215.172]) by theia.denx.de (Postfix) with ESMTPS id A920328090 for ; Fri, 29 Jun 2012 09:38:08 +0200 (CEST) Received: by eaaq13 with SMTP id q13so1276171eaa.3 for ; Fri, 29 Jun 2012 00:38:06 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:subject:date:message-id:x-mailer:in-reply-to:references :x-gm-message-state; bh=2/+dixamb0xsxAKY2Qau6Nbg3MQRskbQHSsLEj72Dws=; b=VpGUNcNquTse/vDoKdK5QzVx7ZXWRENTJthHTPzAvNrLgkRpxpCcGGAkyd0/sWIFry NV4+PwksWlcj2y+xwMSoEIe/ae4pHz0Y1LWgyzZ/7Fca/bXj2iPGyXeWq9+azxJrcduY qn4M48QDZSUFU46xQ/Drr8jGmnAAWPymRslCibFJ24zGH8C6td8aj5jOP4lvhGGGexUz yUs/SV+p4LhcJKvpw2nqwDSvd44r+qRkANqHMP4onq2S+R1asYWuLOfsGQVCaxVUkahn ZhT22OpUB0z9tyTgUNf29NdctdZGr3/hji+mLY/nXZ6rrkt8XSBC4PdQxgYmvugZ1TZc GTNg== Received: by 10.216.196.147 with SMTP id r19mr227019wen.87.1340955486005; Fri, 29 Jun 2012 00:38:06 -0700 (PDT) Received: from localhost (11.161.broadband5.iol.cz. [88.100.161.11]) by mx.google.com with ESMTPS id bc2sm7016009wib.0.2012.06.29.00.38.04 (version=TLSv1/SSLv3 cipher=OTHER); Fri, 29 Jun 2012 00:38:05 -0700 (PDT) From: Michal Simek To: u-boot@lists.denx.de Date: Fri, 29 Jun 2012 09:37:56 +0200 Message-Id: <1340955478-22251-3-git-send-email-monstr@monstr.eu> X-Mailer: git-send-email 1.7.0.4 In-Reply-To: <1340955478-22251-1-git-send-email-monstr@monstr.eu> References: <1340955478-22251-1-git-send-email-monstr@monstr.eu> X-Gm-Message-State: ALoCoQnLxk4DFKbbhBtmQ/396TbFPwz78aeyZE0ombOCzWnWSJPD5/bycIn4yK6oCElAGhZRumP+ Subject: [U-Boot] [PATCH 3/5] microblaze: Add support for device tree driven board configuration X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.11 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: u-boot-bounces@lists.denx.de Errors-To: u-boot-bounces@lists.denx.de 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 CC: Simon Glass --- 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 #include #include +#include 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");