From patchwork Thu Jan 29 23:07:15 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Andreas_Bie=C3=9Fmann?= X-Patchwork-Id: 434668 X-Patchwork-Delegate: andreas.biessmann@googlemail.com 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 2C24D1402AC for ; Fri, 30 Jan 2015 10:16:33 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 31DA94B14B; Fri, 30 Jan 2015 00:16:22 +0100 (CET) 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 L9y3p78zymk0; Fri, 30 Jan 2015 00:16:22 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 949584B654; Fri, 30 Jan 2015 00:15:56 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 2F9A64B372 for ; Fri, 30 Jan 2015 00:08:14 +0100 (CET) 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 LwDySTngU2Tg for ; Fri, 30 Jan 2015 00:08:14 +0100 (CET) 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-wi0-f174.google.com (mail-wi0-f174.google.com [209.85.212.174]) by theia.denx.de (Postfix) with ESMTPS id B4EE54A02C for ; Fri, 30 Jan 2015 00:08:13 +0100 (CET) Received: by mail-wi0-f174.google.com with SMTP id n3so33717786wiv.1 for ; Thu, 29 Jan 2015 15:08:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-type:content-transfer-encoding; bh=PnPGuE89eY/buBWbocKqwAd/w3oyDUjK9CwFXnvDruQ=; b=afSCoSiYN9RKaamlLJcx6CwpA5GCVDz8eK8+6OieXhC5P8MpMyAeQr0ACfDuiiA7eL z+rtXDq1zNuap801zNCSMyJKpzLHr2tH046iMJuUperlbYExnvTikyg5N5oMVIiLYYmh qgXxsDa35daIsRExx05Yb2ml9dYCZ8RQZWGtTUn3pcnRfqOyjxNkEM4og1mKQrWH0ez+ IymBCre5W5dF0q1+BhfVZgV88gRhKAHS91GZXPtsivVkYbz41itTUFx0MIadixBNDQ8C p4sF18n8AgOYCtn245LR/Mh/bHbEd3qUwG65Yz0vMNdM/6j08iQbQKWFJOc2hPCmuYm7 RCWw== X-Received: by 10.194.23.39 with SMTP id j7mr6108300wjf.9.1422572893439; Thu, 29 Jan 2015 15:08:13 -0800 (PST) Received: from localhost (dockstar.er.biessmann.org. [2a01:198:47b:1::10]) by mx.google.com with ESMTPSA id lk2sm4333055wic.22.2015.01.29.15.08.12 (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Thu, 29 Jan 2015 15:08:12 -0800 (PST) From: =?UTF-8?q?Andreas=20Bie=C3=9Fmann?= To: U-Boot List Date: Fri, 30 Jan 2015 00:07:15 +0100 Message-Id: <1422572838-30381-10-git-send-email-andreas.devel@googlemail.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1422572838-30381-1-git-send-email-andreas.devel@googlemail.com> References: <1422572838-30381-1-git-send-email-andreas.devel@googlemail.com> MIME-Version: 1.0 X-Mailman-Approved-At: Fri, 30 Jan 2015 00:15:41 +0100 Cc: Marek Vasut , Kim Phillips , Jeroen Hofstee , Kumar Gala , Thierry Reding , Ian Campbell , Andy Fleming , Stefan Roese , Sonic Zhang , York Sun Subject: [U-Boot] [PATCH v2 09/11] avr32: add generic board support X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Signed-off-by: Andreas Bießmann --- This version still has the mmu_init_r() in common/board_r. Removing this now is not that easy ... I'd love to get it in as is and change it later to the board_init_f_r() sequence. Changes in v2: - remove bootparams allocation, provide as extra patch - use the else path in setup_mon_len() - provide arch_reserve_stacks() for avr32 - use the newly introduced dram_init() Changes in v1: - add timer_init in board_r - remove extern declaration of mmu_init_r() arch/avr32/config.mk | 3 +++ arch/avr32/cpu/u-boot.lds | 2 ++ arch/avr32/include/asm/config.h | 1 + arch/avr32/include/asm/u-boot.h | 7 +++++++ arch/avr32/lib/Makefile | 3 +++ arch/avr32/lib/interrupts.c | 5 +++++ arch/avr32/lib/stack.c | 23 +++++++++++++++++++++++ common/board_f.c | 2 +- common/board_r.c | 13 ++++++++++--- include/asm-generic/u-boot.h | 4 ++++ 10 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 arch/avr32/lib/stack.c diff --git a/arch/avr32/config.mk b/arch/avr32/config.mk index 469185e..8252f59 100644 --- a/arch/avr32/config.mk +++ b/arch/avr32/config.mk @@ -9,6 +9,9 @@ ifeq ($(CROSS_COMPILE),) CROSS_COMPILE := avr32-linux- endif +# avr32 has generic board support +__HAVE_ARCH_GENERIC_BOARD := y + CONFIG_STANDALONE_LOAD_ADDR ?= 0x00000000 PLATFORM_RELFLAGS += -ffixed-r5 -fPIC -mno-init-got -mrelax diff --git a/arch/avr32/cpu/u-boot.lds b/arch/avr32/cpu/u-boot.lds index cb29a22..b0180e3 100644 --- a/arch/avr32/cpu/u-boot.lds +++ b/arch/avr32/cpu/u-boot.lds @@ -48,9 +48,11 @@ SECTIONS _edata = .; .bss (NOLOAD) : { + __bss_start = .; *(.bss) *(.bss.*) } . = ALIGN(8); __bss_end = .; + __init_end = .; } diff --git a/arch/avr32/include/asm/config.h b/arch/avr32/include/asm/config.h index 63056a4..529fe22 100644 --- a/arch/avr32/include/asm/config.h +++ b/arch/avr32/include/asm/config.h @@ -8,5 +8,6 @@ #define _ASM_CONFIG_H_ #define CONFIG_NEEDS_MANUAL_RELOC +#define CONFIG_SYS_GENERIC_GLOBAL_DATA #endif diff --git a/arch/avr32/include/asm/u-boot.h b/arch/avr32/include/asm/u-boot.h index 232350e..8b047ec 100644 --- a/arch/avr32/include/asm/u-boot.h +++ b/arch/avr32/include/asm/u-boot.h @@ -6,6 +6,11 @@ #ifndef __ASM_U_BOOT_H__ #define __ASM_U_BOOT_H__ 1 +#ifdef CONFIG_SYS_GENERIC_BOARD +/* Use the generic board which requires a unified bd_info */ +#include +#else + typedef struct bd_info { unsigned char bi_phy_id[4]; unsigned long bi_board_number; @@ -22,6 +27,8 @@ typedef struct bd_info { #define bi_memstart bi_dram[0].start #define bi_memsize bi_dram[0].size +#endif + /* For image.h:image_check_target_arch() */ #define IH_ARCH_DEFAULT IH_ARCH_AVR32 diff --git a/arch/avr32/lib/Makefile b/arch/avr32/lib/Makefile index 5f2d97b..9d48413 100644 --- a/arch/avr32/lib/Makefile +++ b/arch/avr32/lib/Makefile @@ -8,7 +8,10 @@ # obj-y += memset.o +ifndef CONFIG_SYS_GENERIC_BOARD obj-y += board.o +endif obj-$(CONFIG_CMD_BOOTM) += bootm.o obj-y += interrupts.o obj-y += dram_init.o +obj-y += stack.o diff --git a/arch/avr32/lib/interrupts.c b/arch/avr32/lib/interrupts.c index bacb2d1..5f3a49e 100644 --- a/arch/avr32/lib/interrupts.c +++ b/arch/avr32/lib/interrupts.c @@ -7,6 +7,11 @@ #include +int interrupt_init(void) +{ + return 0; +} + void enable_interrupts(void) { asm volatile("csrf %0" : : "n"(SYSREG_GM_OFFSET)); diff --git a/arch/avr32/lib/stack.c b/arch/avr32/lib/stack.c new file mode 100644 index 0000000..a98c898 --- /dev/null +++ b/arch/avr32/lib/stack.c @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2015 Andreas Bießmann + * + * SPDX-License-Identifier: GPL-2.0+ + */ +#include + +DECLARE_GLOBAL_DATA_PTR; + +int arch_reserve_stacks(void) +{ + ulong *s; + + gd->start_addr_sp &= ~0xf; + + gd->arch.stack_end = gd->start_addr_sp; + + s = (ulong *)gd->start_addr_sp; + *s = 0; + *--s = 0; + + return 0; +} diff --git a/common/board_f.c b/common/board_f.c index 03f1529..be6a36b 100644 --- a/common/board_f.c +++ b/common/board_f.c @@ -865,7 +865,7 @@ static init_fnc_t init_sequence_f[] = { #endif announce_dram_init, /* TODO: unify all these dram functions? */ -#if defined(CONFIG_ARM) || defined(CONFIG_X86) +#if defined(CONFIG_ARM) || defined(CONFIG_X86) || defined(CONFIG_AVR32) dram_init, /* configure available RAM banks */ #endif #if defined(CONFIG_MIPS) || defined(CONFIG_PPC) diff --git a/common/board_r.c b/common/board_r.c index 37577ab..9dc1fe4 100644 --- a/common/board_r.c +++ b/common/board_r.c @@ -55,6 +55,9 @@ #include #include #include +#ifdef CONFIG_AVR32 +#include +#endif DECLARE_GLOBAL_DATA_PTR; @@ -514,7 +517,7 @@ static int show_model_r(void) #endif /* enable exceptions */ -#ifdef CONFIG_ARM +#if defined(CONFIG_ARM) || defined(CONFIG_AVR32) static int initr_enable_interrupts(void) { enable_interrupts(); @@ -841,10 +844,10 @@ init_fnc_t init_sequence_r[] = { initr_kgdb, #endif interrupt_init, -#if defined(CONFIG_ARM) +#if defined(CONFIG_ARM) || defined(CONFIG_AVR32) initr_enable_interrupts, #endif -#ifdef CONFIG_X86 +#if defined(CONFIG_X86) || defined(CONFIG_AVR32) timer_init, /* initialize timer */ #endif #if defined(CONFIG_STATUS_LED) && defined(STATUS_LED_BOOT) @@ -909,6 +912,10 @@ void board_init_r(gd_t *new_gd, ulong dest_addr) int i; #endif +#ifdef CONFIG_AVR32 + mmu_init_r(dest_addr); +#endif + #if !defined(CONFIG_X86) && !defined(CONFIG_ARM) && !defined(CONFIG_ARM64) gd = new_gd; #endif diff --git a/include/asm-generic/u-boot.h b/include/asm-generic/u-boot.h index aef39d7..a63a87a 100644 --- a/include/asm-generic/u-boot.h +++ b/include/asm-generic/u-boot.h @@ -32,6 +32,10 @@ typedef struct bd_info { unsigned long bi_flashoffset; /* reserved area for startup monitor */ unsigned long bi_sramstart; /* start of SRAM memory */ unsigned long bi_sramsize; /* size of SRAM memory */ +#ifdef CONFIG_AVR32 + unsigned char bi_phy_id[4]; /* PHY address for ATAG_ETHERNET */ + unsigned long bi_board_number;/* ATAG_BOARDINFO */ +#endif #ifdef CONFIG_ARM unsigned long bi_arm_freq; /* arm frequency */ unsigned long bi_dsp_freq; /* dsp core frequency */