diff mbox

[U-Boot,v3,10/12] avr32: add generic board support

Message ID 1423260410-9290-11-git-send-email-andreas.devel@googlemail.com
State Accepted, archived
Delegated to: Andreas Bießmann
Headers show

Commit Message

Andreas Bießmann Feb. 6, 2015, 10:06 p.m. UTC
Signed-off-by: Andreas Bießmann <andreas.devel@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(-)

Comments

Simon Glass Feb. 7, 2015, 12:28 a.m. UTC | #1
Hi Andreas,

On 6 February 2015 at 15:06, Andreas Bießmann
<andreas.devel@googlemail.com> wrote:
> Signed-off-by: Andreas Bießmann <andreas.devel@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
Andreas Bießmann Feb. 8, 2015, 9:21 p.m. UTC | #2
Hi Simon,

On 07.02.15 01:28, Simon Glass wrote:
> On 6 February 2015 at 15:06, Andreas Bießmann
> <andreas.devel@googlemail.com> wrote:
>> Signed-off-by: Andreas Bießmann <andreas.devel@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/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.

avr32 never had bd_t.bi_mem(start|size) members, they where always
defined to bd_t.bi_dram[0].(start|size). Please have a look at
arch/avr32/include/asm/u-boot.h.

When converting to generic board I also have to use the generic bd_t
(which is a mess). Since the current generic board implementation do not
set both bi_mem(start|size) for all architectures I decided to go with
bi_dram[0].(start|size), this will also work with the other boards not
converted yet. To use just the first entry in bi_dram[] and do not loop
over is ok on avr32 since the only SoC available there has just one
SDRAM controller.

If you're Ok with this change I would apply this series with one fix for
'common/board_f: factor out reserve_stacks' and maybe a more descriptive
commit message for 'common/board_r: allocate bootparams' mid of next
week to avr32/master and send a PR. AFAIR the microblaze generic board
conversion depends on at least one patch of this series.

Best regards

Andreas Bießmann
Simon Glass Feb. 9, 2015, 4:30 a.m. UTC | #3
Hi Andreas,

On 8 February 2015 at 14:21, Andreas Bießmann <andreas.devel@googlemail.com>
wrote:
>
> Hi Simon,
>
> On 07.02.15 01:28, Simon Glass wrote:
> > On 6 February 2015 at 15:06, Andreas Bießmann
> > <andreas.devel@googlemail.com> wrote:
> >> Signed-off-by: Andreas Bießmann <andreas.devel@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/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.
>
> avr32 never had bd_t.bi_mem(start|size) members, they where always
> defined to bd_t.bi_dram[0].(start|size). Please have a look at
> arch/avr32/include/asm/u-boot.h.
>
> When converting to generic board I also have to use the generic bd_t
> (which is a mess). Since the current generic board implementation do not
> set both bi_mem(start|size) for all architectures I decided to go with
> bi_dram[0].(start|size), this will also work with the other boards not
> converted yet. To use just the first entry in bi_dram[] and do not loop
> over is ok on avr32 since the only SoC available there has just one
> SDRAM controller.

OK I see. I didn't realise it was avr32-only code.

>
>
> If you're Ok with this change I would apply this series with one fix for
> 'common/board_f: factor out reserve_stacks' and maybe a more descriptive
> commit message for 'common/board_r: allocate bootparams' mid of next
> week to avr32/master and send a PR. AFAIR the microblaze generic board
> conversion depends on at least one patch of this series.

Sounds good to me.

Regards,
Simon
Andreas Bießmann Feb. 16, 2015, 8:23 p.m. UTC | #4
Dear Andreas Devel,

Andreas Devel <andreas.devel@googlemail.com> writes:
>Signed-off-by: Andreas Bießmann <andreas.devel@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(-)

applied to u-boot-avr32/master, thanks!

Best regards,
Andreas Bießmann
diff mbox

Patch

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);
 	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 */