
Hi Simon,
On 01/28/2015 04:09 AM, Simon Glass wrote:
Hi,
On 27 January 2015 at 17:16, Andreas Bießmann andreas.devel@googlemail.com wrote:
Signed-off-by: Andreas Bießmann andreas.devel@googlemail.com
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 | 13 ++++++++++--- common/board_r.c | 26 +++++++++++++++++++++++--- include/asm-generic/u-boot.h | 4 ++++ 9 files changed, 57 insertions(+), 6 deletions(-)
diff --git a/common/board_f.c b/common/board_f.c index 215108b..1a735ae 100644 --- a/common/board_f.c +++ b/common/board_f.c @@ -174,7 +174,7 @@ static int announce_dram_init(void) return 0; }
-#if defined(CONFIG_MIPS) || defined(CONFIG_PPC) +#if defined(CONFIG_MIPS) || defined(CONFIG_PPC) || defined(CONFIG_AVR32) static int init_func_ram(void) { #ifdef CONFIG_BOARD_TYPES @@ -268,6 +268,8 @@ static int setup_mon_len(void) gd->mon_len = (ulong)&_end - (ulong)_init; #elif defined(CONFIG_BLACKFIN) || defined(CONFIG_NIOS2) gd->mon_len = CONFIG_SYS_MONITOR_LEN; +#elif defined(CONFIG_AVR32)
gd->mon_len = (ulong)&__bss_end - (ulong)&_text;
Would we be able to unify the symbols here rather than having a special case for AVR32?
well, I'm not __ARM__ nor CONFIG_SANDBOX, CONFIG_BLACKFIN or CONFIG_NIOS2. The else path may fit, I'll check that.
#else /* TODO: use (ulong)&__bss_end - (ulong)&__text_start; ? */ gd->mon_len = (ulong)&__bss_end - CONFIG_SYS_MONITOR_BASE; @@ -581,7 +583,7 @@ static int reserve_stacks(void) gd->irq_sp = gd->start_addr_sp; # endif #else -# ifdef CONFIG_PPC +# if defined(CONFIG_PPC) || defined(CONFIG_AVR32) ulong *s; # endif
@@ -611,6 +613,11 @@ static int reserve_stacks(void) s = (ulong *) gd->start_addr_sp; *s = 0; /* Terminate back chain */ *++s = 0; /* NULL return address */ +# elif defined(CONFIG_AVR32)
gd->arch.stack_end = gd->start_addr_sp;
s = (ulong *)gd->start_addr_sp;
*s = 0;
*--s = 0;
Can we create an arch_reserve_stacks() function to handle this, and put it in the AVR32 code?
I'll do so.
# endif /* Architecture specific code */
return 0;
@@ -912,7 +919,7 @@ static init_fnc_t init_sequence_f[] = { #if defined(CONFIG_ARM) || defined(CONFIG_X86) dram_init, /* configure available RAM banks */ #endif -#if defined(CONFIG_MIPS) || defined(CONFIG_PPC) +#if defined(CONFIG_MIPS) || defined(CONFIG_PPC) || defined(CONFIG_AVR32) init_func_ram,
Can you use dram_init() instead?
I have to check that. Can we do that later when we convert mips/ppc? I fear it is a bit complex.
#endif #ifdef CONFIG_POST diff --git a/common/board_r.c b/common/board_r.c index e712902..3620438 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
What needs this? Let's move it into AVR32 code.
The mmu_init_r needs this. I dunno where to place it. ARM has the TLB setup before activating d-caches (in initr_caches). This is not required for avr32 and therefore not the right place.
@@ -894,6 +910,10 @@ void board_init_r(gd_t *new_gd, ulong dest_addr) int i; #endif
+#ifdef CONFIG_AVR32
mmu_init_r(dest_addr);
+#endif
What does this do? It feels like it shold perhaps happen in the init sequence. See x86 which has a similar requirement, or at least I think it is similar.
can you point me to the x86 code?
The objective ultimately is to remove all #ifdefs from board_f/r.c.
That's clear to me. I thought we can first gather all the stuff in common/board_* and in a second turn we clean it up. Obvious things cleaned up before, but questionnaire things are cleaned up in a second turn. At least this was my objective ;)
Best regards
Andreas Bießmann