[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