avr32: add generic board support
authorAndreas Bießmann <andreas.devel@googlemail.com>
Fri, 6 Feb 2015 22:06:48 +0000 (23:06 +0100)
committerAndreas Bießmann <andreas.devel@googlemail.com>
Tue, 17 Feb 2015 21:54:38 +0000 (22:54 +0100)
Signed-off-by: Andreas Bießmann <andreas.devel@googlemail.com>
arch/avr32/config.mk
arch/avr32/cpu/u-boot.lds
arch/avr32/include/asm/config.h
arch/avr32/include/asm/u-boot.h
arch/avr32/lib/Makefile
arch/avr32/lib/interrupts.c
common/board_f.c
common/board_r.c
common/cmd_bdinfo.c
include/asm-generic/u-boot.h

index 469185e8b44bcef8cc23e77e5a620f8feae8cbfb..8252f598c3bdd9de371293d021e64f95c7485914 100644 (file)
@@ -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
index cb29a22b1ea9c3190881772a19d77fe804796ec9..b0180e3534591d512c2a31bf4f3c1b93d9db4d94 100644 (file)
@@ -48,9 +48,11 @@ SECTIONS
        _edata = .;
 
        .bss (NOLOAD) : {
+               __bss_start = .;
                *(.bss)
                *(.bss.*)
        }
        . = ALIGN(8);
        __bss_end = .;
+       __init_end = .;
 }
index 63056a4dfa1b3799c1413dc15aaba2cae1b1c1af..529fe227a6b634b4bd33ab8c9db47d9f5bdb796f 100644 (file)
@@ -8,5 +8,6 @@
 #define _ASM_CONFIG_H_
 
 #define CONFIG_NEEDS_MANUAL_RELOC
+#define CONFIG_SYS_GENERIC_GLOBAL_DATA
 
 #endif
index 232350ead8c9a4525a57c379871829e49920c4d5..8b047ec7c8b090b37c114d3cef8a21c86cf05cb8 100644 (file)
@@ -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
 
index 5f2d97bfc7d2f959b94d5d9a5ac291fcc478063e..675091363087d3410fe7837b50c789f9abcd5d51 100644 (file)
@@ -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
index bacb2d186ad61b75c4eae207778099d6d1a98667..5f3a49e15212edf55cc34ba955c31d78ed455f2b 100644 (file)
@@ -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));
index ef3f036dadcc12b00e6d4cacc2455ebda28ddfe2..4d8b8a626becb3a3685a9f18bad66bc96e0dfeb6 100644 (file)
@@ -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) || defined(CONFIG_MICROBLAZE)
+#if defined(CONFIG_ARM) || defined(CONFIG_X86) || defined(CONFIG_MICROBLAZE) || defined(CONFIG_AVR32)
        dram_init,              /* configure available RAM banks */
 #endif
 #if defined(CONFIG_MIPS) || defined(CONFIG_PPC)
index f0b4f9d935181f905745fdb526dd666a8d5b517a..4fcd4f6a7057e3ba8afeb985869f358718fa7c66 100644 (file)
@@ -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
-#if defined(CONFIG_X86) || defined(CONFIG_MICROBLAZE)
+#if defined(CONFIG_X86) || defined(CONFIG_MICROBLAZE) || 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
index e9eab232f961bb873a019fde8580a06fe4236b80..aa81da227b93b894795f627729e151f18876a6c9 100644 (file)
@@ -345,8 +345,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);
index aef39d78846c9bad7272e84e8fe4587e732a629d..a63a87a2871e52d19f0fb597c5fc7cd4ee58bc62 100644 (file)
@@ -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 */