[U-Boot] [PATCH v3 10/12] avr32: add generic board support
Simon Glass
sjg at chromium.org
Sat Feb 7 01:28:08 CET 2015
Hi Andreas,
On 6 February 2015 at 15:06, Andreas Bießmann
<andreas.devel at googlemail.com> wrote:
> Signed-off-by: Andreas Bießmann <andreas.devel at googlemail.com>
> ---
> 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 v3:
> - remove unnecessary stack implementation for avr32
> - fix bdinfo output
>
> 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 | 2 ++
> arch/avr32/lib/interrupts.c | 5 +++++
> common/board_f.c | 2 +-
> common/board_r.c | 13 ++++++++++---
> common/cmd_bdinfo.c | 4 ++--
> include/asm-generic/u-boot.h | 4 ++++
> 10 files changed, 37 insertions(+), 6 deletions(-)
>
> 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 <asm-generic/u-boot.h>
> +#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..6750913 100644
> --- a/arch/avr32/lib/Makefile
> +++ b/arch/avr32/lib/Makefile
> @@ -8,7 +8,9 @@
> #
>
> 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
> 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 <asm/sysreg.h>
>
> +int interrupt_init(void)
> +{
> + return 0;
> +}
> +
> void enable_interrupts(void)
> {
> asm volatile("csrf %0" : : "n"(SYSREG_GM_OFFSET));
> diff --git a/common/board_f.c b/common/board_f.c
> index b5e1071..afa3c02 100644
> --- a/common/board_f.c
> +++ b/common/board_f.c
> @@ -883,7 +883,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 8e1e9e0..550d863 100644
> --- a/common/board_r.c
> +++ b/common/board_r.c
> @@ -55,6 +55,9 @@
> #include <dm/root.h>
> #include <linux/compiler.h>
> #include <linux/err.h>
> +#ifdef CONFIG_AVR32
> +#include <asm/arch/mmu.h>
> +#endif
>
> DECLARE_GLOBAL_DATA_PTR;
>
> @@ -498,7 +501,7 @@ static int initr_api(void)
> #endif
>
> /* enable exceptions */
> -#ifdef CONFIG_ARM
> +#if defined(CONFIG_ARM) || defined(CONFIG_AVR32)
> static int initr_enable_interrupts(void)
> {
> enable_interrupts();
> @@ -825,10 +828,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)
> @@ -893,6 +896,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/common/cmd_bdinfo.c b/common/cmd_bdinfo.c
> index e6d8a7a..999d026 100644
> --- a/common/cmd_bdinfo.c
> +++ b/common/cmd_bdinfo.c
> @@ -333,8 +333,8 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
> bd_t *bd = gd->bd;
>
> print_num("boot_params", (ulong)bd->bi_boot_params);
> - print_num("memstart", (ulong)bd->bi_memstart);
> - print_lnum("memsize", (u64)bd->bi_memsize);
> + print_num("memstart", (ulong)bd->bi_dram[0].start);
> + print_lnum("memsize", (u64)bd->bi_dram[0].size);
Can you explain this change please? I'm not sure what is happening here.
> print_num("flashstart", (ulong)bd->bi_flashstart);
> print_num("flashsize", (ulong)bd->bi_flashsize);
> print_num("flashoffset", (ulong)bd->bi_flashoffset);
> 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 */
> --
> 1.7.10.4
>
Regards,
Simon
More information about the U-Boot
mailing list