Merge branch 'master' of git://git.denx.de/u-boot-avr32

This commit is contained in:
Tom Rini 2015-02-17 22:11:36 -05:00
commit 9ec84f103b
40 changed files with 294 additions and 307 deletions

View File

@ -35,6 +35,7 @@ endif
obj-$(CONFIG_SEMIHOSTING) += semihosting.o obj-$(CONFIG_SEMIHOSTING) += semihosting.o
obj-y += sections.o obj-y += sections.o
obj-y += stack.o
ifdef CONFIG_ARM64 ifdef CONFIG_ARM64
obj-y += gic_64.o obj-y += gic_64.o
obj-y += interrupts_64.o obj-y += interrupts_64.o

42
arch/arm/lib/stack.c Normal file
View File

@ -0,0 +1,42 @@
/*
* Copyright (c) 2015 Andreas Bießmann <andreas.devel@googlemail.com>
*
* Copyright (c) 2011 The Chromium OS Authors.
* (C) Copyright 2002-2006
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
*
* (C) Copyright 2002
* Sysgo Real-Time Solutions, GmbH <www.elinos.com>
* Marius Groeger <mgroeger@sysgo.de>
*
* SPDX-License-Identifier: GPL-2.0+
*/
#include <common.h>
DECLARE_GLOBAL_DATA_PTR;
int arch_reserve_stacks(void)
{
#ifdef CONFIG_SPL_BUILD
gd->start_addr_sp -= 128; /* leave 32 words for abort-stack */
gd->irq_sp = gd->start_addr_sp;
#else
/* setup stack pointer for exceptions */
gd->irq_sp = gd->start_addr_sp;
# if !defined(CONFIG_ARM64)
# ifdef CONFIG_USE_IRQ
gd->start_addr_sp -= (CONFIG_STACKSIZE_IRQ + CONFIG_STACKSIZE_FIQ);
debug("Reserving %zu Bytes for IRQ stack at: %08lx\n",
CONFIG_STACKSIZE_IRQ + CONFIG_STACKSIZE_FIQ, gd->start_addr_sp);
/* 8-byte alignment for ARM ABI compliance */
gd->start_addr_sp &= ~0x07;
# endif
/* leave 3 words for abort-stack, plus 1 for alignment */
gd->start_addr_sp -= 16;
# endif
#endif
return 0;
}

View File

@ -9,6 +9,9 @@ ifeq ($(CROSS_COMPILE),)
CROSS_COMPILE := avr32-linux- CROSS_COMPILE := avr32-linux-
endif endif
# avr32 has generic board support
__HAVE_ARCH_GENERIC_BOARD := y
CONFIG_STANDALONE_LOAD_ADDR ?= 0x00000000 CONFIG_STANDALONE_LOAD_ADDR ?= 0x00000000
PLATFORM_RELFLAGS += -ffixed-r5 -fPIC -mno-init-got -mrelax PLATFORM_RELFLAGS += -ffixed-r5 -fPIC -mno-init-got -mrelax

View File

@ -16,5 +16,6 @@ obj-y += cache.o
obj-y += interrupts.o obj-y += interrupts.o
obj-$(CONFIG_PORTMUX_PIO) += portmux-pio.o obj-$(CONFIG_PORTMUX_PIO) += portmux-pio.o
obj-$(CONFIG_PORTMUX_GPIO) += portmux-gpio.o obj-$(CONFIG_PORTMUX_GPIO) += portmux-gpio.o
obj-y += mmc.o
obj-$(if $(filter at32ap700x,$(SOC)),y) += at32ap700x/ obj-$(if $(filter at32ap700x,$(SOC)),y) += at32ap700x/

View File

@ -7,7 +7,7 @@ void mmu_init_r(unsigned long dest_addr)
uintptr_t vmr_table_addr; uintptr_t vmr_table_addr;
/* Round monitor address down to the nearest page boundary */ /* Round monitor address down to the nearest page boundary */
dest_addr &= PAGE_ADDR_MASK; dest_addr &= MMU_PAGE_ADDR_MASK;
/* Initialize TLB entry 0 to cover the monitor, and lock it */ /* Initialize TLB entry 0 to cover the monitor, and lock it */
sysreg_write(TLBEHI, dest_addr | SYSREG_BIT(TLBEHI_V)); sysreg_write(TLBEHI, dest_addr | SYSREG_BIT(TLBEHI_V));
@ -36,7 +36,7 @@ int mmu_handle_tlb_miss(void)
unsigned int fault_pgno; unsigned int fault_pgno;
int first, last; int first, last;
fault_pgno = sysreg_read(TLBEAR) >> PAGE_SHIFT; fault_pgno = sysreg_read(TLBEAR) >> MMU_PAGE_SHIFT;
vmr_table = (const struct mmu_vm_range *)sysreg_read(PTBR); vmr_table = (const struct mmu_vm_range *)sysreg_read(PTBR);
/* Do a binary search through the VM ranges */ /* Do a binary search through the VM ranges */
@ -60,8 +60,8 @@ int mmu_handle_tlb_miss(void)
/* Got it; let's slam it into the TLB */ /* Got it; let's slam it into the TLB */
uint32_t tlbelo; uint32_t tlbelo;
tlbelo = vmr->phys & ~PAGE_ADDR_MASK; tlbelo = vmr->phys & ~MMU_PAGE_ADDR_MASK;
tlbelo |= fault_pgno << PAGE_SHIFT; tlbelo |= fault_pgno << MMU_PAGE_SHIFT;
sysreg_write(TLBELO, tlbelo); sysreg_write(TLBELO, tlbelo);
__builtin_tlbw(); __builtin_tlbw();

View File

@ -27,7 +27,7 @@
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;
int cpu_init(void) int arch_cpu_init(void)
{ {
extern void _evba(void); extern void _evba(void);

View File

@ -96,11 +96,11 @@ void do_unknown_exception(unsigned int ecr, struct pt_regs *regs)
printf("CPU Mode: %s\n", cpu_modes[mode]); printf("CPU Mode: %s\n", cpu_modes[mode]);
/* Avoid exception loops */ /* Avoid exception loops */
if (regs->sp < (gd->arch.stack_end - CONFIG_STACKSIZE) if (regs->sp < (gd->start_addr_sp - CONFIG_STACKSIZE) ||
|| regs->sp >= gd->arch.stack_end) regs->sp >= gd->start_addr_sp)
printf("\nStack pointer seems bogus, won't do stack dump\n"); printf("\nStack pointer seems bogus, won't do stack dump\n");
else else
dump_mem("\nStack: ", regs->sp, gd->arch.stack_end); dump_mem("\nStack: ", regs->sp, gd->start_addr_sp);
panic("Unhandled exception\n"); panic("Unhandled exception\n");
} }

16
arch/avr32/cpu/mmc.c Normal file
View File

@ -0,0 +1,16 @@
/*
* Copyright (C) 2004-2006 Atmel Corporation
* Copyright (C) 2015 Andreas Bießmann <andreas.devel@googlmail.com>
*
* SPDX-License-Identifier: GPL-2.0+
*/
#include <common.h>
#include <atmel_mci.h>
#include <asm/arch/hardware.h>
/* provide cpu_mmc_init, to overwrite provide board_mmc_init */
int cpu_mmc_init(bd_t *bd)
{
/* This calls the atmel_mci_init in gen_atmel_mci.c */
return atmel_mci_init((void *)ATMEL_BASE_MMCI);
}

View File

@ -48,9 +48,11 @@ SECTIONS
_edata = .; _edata = .;
.bss (NOLOAD) : { .bss (NOLOAD) : {
__bss_start = .;
*(.bss) *(.bss)
*(.bss.*) *(.bss.*)
} }
. = ALIGN(8); . = ALIGN(8);
__bss_end = .; __bss_end = .;
__init_end = .;
} }

View File

@ -13,9 +13,9 @@
#include <asm/sysreg.h> #include <asm/sysreg.h>
#define PAGE_SHIFT 20 #define MMU_PAGE_SHIFT 20
#define PAGE_SIZE (1UL << PAGE_SHIFT) #define MMU_PAGE_SIZE (1UL << MMU_PAGE_SHIFT)
#define PAGE_ADDR_MASK (~(PAGE_SIZE - 1)) #define MMU_PAGE_ADDR_MASK (~(MMU_PAGE_SIZE - 1))
#define MMU_VMR_CACHE_NONE \ #define MMU_VMR_CACHE_NONE \
(SYSREG_BF(AP, 3) | SYSREG_BF(SZ, 3) | SYSREG_BIT(TLBELO_D)) (SYSREG_BF(AP, 3) | SYSREG_BF(SZ, 3) | SYSREG_BIT(TLBELO_D))

View File

@ -8,5 +8,6 @@
#define _ASM_CONFIG_H_ #define _ASM_CONFIG_H_
#define CONFIG_NEEDS_MANUAL_RELOC #define CONFIG_NEEDS_MANUAL_RELOC
#define CONFIG_SYS_GENERIC_GLOBAL_DATA
#endif #endif

View File

@ -14,7 +14,12 @@ enum dma_data_direction {
DMA_TO_DEVICE = 1, DMA_TO_DEVICE = 1,
DMA_FROM_DEVICE = 2, DMA_FROM_DEVICE = 2,
}; };
extern void *dma_alloc_coherent(size_t len, unsigned long *handle);
static inline void *dma_alloc_coherent(size_t len, unsigned long *handle)
{
*handle = (unsigned long)memalign(ARCH_DMA_MINALIGN, len);
return (void *)*handle;
}
static inline unsigned long dma_map_single(volatile void *vaddr, size_t len, static inline unsigned long dma_map_single(volatile void *vaddr, size_t len,
enum dma_data_direction dir) enum dma_data_direction dir)

View File

@ -8,7 +8,6 @@
/* Architecture-specific global data */ /* Architecture-specific global data */
struct arch_global_data { struct arch_global_data {
unsigned long stack_end; /* highest stack address */
unsigned long cpu_hz; /* cpu core clock frequency */ unsigned long cpu_hz; /* cpu core clock frequency */
}; };

View File

@ -6,6 +6,11 @@
#ifndef __ASM_U_BOOT_H__ #ifndef __ASM_U_BOOT_H__
#define __ASM_U_BOOT_H__ 1 #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 { typedef struct bd_info {
unsigned char bi_phy_id[4]; unsigned char bi_phy_id[4];
unsigned long bi_board_number; unsigned long bi_board_number;
@ -22,7 +27,12 @@ typedef struct bd_info {
#define bi_memstart bi_dram[0].start #define bi_memstart bi_dram[0].start
#define bi_memsize bi_dram[0].size #define bi_memsize bi_dram[0].size
#endif
/* For image.h:image_check_target_arch() */ /* For image.h:image_check_target_arch() */
#define IH_ARCH_DEFAULT IH_ARCH_AVR32 #define IH_ARCH_DEFAULT IH_ARCH_AVR32
int arch_cpu_init(void);
int dram_init(void);
#endif /* __ASM_U_BOOT_H__ */ #endif /* __ASM_U_BOOT_H__ */

View File

@ -8,6 +8,9 @@
# #
obj-y += memset.o obj-y += memset.o
ifndef CONFIG_SYS_GENERIC_BOARD
obj-y += board.o obj-y += board.o
endif
obj-$(CONFIG_CMD_BOOTM) += bootm.o obj-$(CONFIG_CMD_BOOTM) += bootm.o
obj-y += interrupts.o obj-y += interrupts.o
obj-y += dram_init.o

View File

@ -9,7 +9,6 @@
#include <stdio_dev.h> #include <stdio_dev.h>
#include <version.h> #include <version.h>
#include <net.h> #include <net.h>
#include <atmel_mci.h>
#ifdef CONFIG_BITBANGMII #ifdef CONFIG_BITBANGMII
#include <miiphy.h> #include <miiphy.h>
@ -30,6 +29,12 @@ DECLARE_GLOBAL_DATA_PTR;
unsigned long monitor_flash_len; unsigned long monitor_flash_len;
__weak void dram_init_banksize(void)
{
gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
gd->bd->bi_dram[0].size = gd->ram_size;
}
/* Weak aliases for optional board functions */ /* Weak aliases for optional board functions */
static int __do_nothing(void) static int __do_nothing(void)
{ {
@ -38,57 +43,6 @@ static int __do_nothing(void)
int board_postclk_init(void) __attribute__((weak, alias("__do_nothing"))); int board_postclk_init(void) __attribute__((weak, alias("__do_nothing")));
int board_early_init_r(void) __attribute__((weak, alias("__do_nothing"))); int board_early_init_r(void) __attribute__((weak, alias("__do_nothing")));
/* provide cpu_mmc_init, to overwrite provide board_mmc_init */
int cpu_mmc_init(bd_t *bd)
{
/* This calls the atmel_mci_init in gen_atmel_mci.c */
return atmel_mci_init((void *)ATMEL_BASE_MMCI);
}
#ifdef CONFIG_SYS_DMA_ALLOC_LEN
#include <asm/arch/cacheflush.h>
#include <asm/io.h>
static unsigned long dma_alloc_start;
static unsigned long dma_alloc_end;
static unsigned long dma_alloc_brk;
static void dma_alloc_init(void)
{
unsigned long monitor_addr;
monitor_addr = CONFIG_SYS_MONITOR_BASE + gd->reloc_off;
dma_alloc_end = monitor_addr - CONFIG_SYS_MALLOC_LEN;
dma_alloc_start = dma_alloc_end - CONFIG_SYS_DMA_ALLOC_LEN;
dma_alloc_brk = dma_alloc_start;
printf("DMA: Using memory from 0x%08lx to 0x%08lx\n",
dma_alloc_start, dma_alloc_end);
invalidate_dcache_range((unsigned long)cached(dma_alloc_start),
dma_alloc_end);
}
void *dma_alloc_coherent(size_t len, unsigned long *handle)
{
unsigned long paddr = dma_alloc_brk;
if (dma_alloc_brk + len > dma_alloc_end)
return NULL;
dma_alloc_brk = ((paddr + len + CONFIG_SYS_DCACHE_LINESZ - 1)
& ~(CONFIG_SYS_DCACHE_LINESZ - 1));
*handle = paddr;
return uncached(paddr);
}
#else
static inline void dma_alloc_init(void)
{
}
#endif
static int init_baudrate(void) static int init_baudrate(void)
{ {
gd->baudrate = getenv_ulong("baudrate", 10, CONFIG_BAUDRATE); gd->baudrate = getenv_ulong("baudrate", 10, CONFIG_BAUDRATE);
@ -134,7 +88,6 @@ void board_init_f(ulong board_type)
unsigned long monitor_len; unsigned long monitor_len;
unsigned long monitor_addr; unsigned long monitor_addr;
unsigned long addr; unsigned long addr;
long sdram_size;
/* Initialize the global data pointer */ /* Initialize the global data pointer */
memset(&gd_data, 0, sizeof(gd_data)); memset(&gd_data, 0, sizeof(gd_data));
@ -142,17 +95,17 @@ void board_init_f(ulong board_type)
/* Perform initialization sequence */ /* Perform initialization sequence */
board_early_init_f(); board_early_init_f();
cpu_init(); arch_cpu_init();
board_postclk_init(); board_postclk_init();
env_init(); env_init();
init_baudrate(); init_baudrate();
serial_init(); serial_init();
console_init_f(); console_init_f();
display_banner(); display_banner();
sdram_size = initdram(board_type); dram_init();
/* If we have no SDRAM, we can't go on */ /* If we have no SDRAM, we can't go on */
if (sdram_size <= 0) if (gd->ram_size <= 0)
panic("No working SDRAM available\n"); panic("No working SDRAM available\n");
/* /*
@ -166,7 +119,7 @@ void board_init_f(ulong board_type)
* - global data struct * - global data struct
* - stack * - stack
*/ */
addr = CONFIG_SYS_SDRAM_BASE + sdram_size; addr = CONFIG_SYS_SDRAM_BASE + gd->ram_size;
monitor_len = (char *)(&__bss_end) - _text; monitor_len = (char *)(&__bss_end) - _text;
/* /*
@ -180,12 +133,6 @@ void board_init_f(ulong board_type)
/* Reserve memory for malloc() */ /* Reserve memory for malloc() */
addr -= CONFIG_SYS_MALLOC_LEN; addr -= CONFIG_SYS_MALLOC_LEN;
#ifdef CONFIG_SYS_DMA_ALLOC_LEN
/* Reserve DMA memory (must be cache aligned) */
addr &= ~(CONFIG_SYS_DCACHE_LINESZ - 1);
addr -= CONFIG_SYS_DMA_ALLOC_LEN;
#endif
#ifdef CONFIG_LCD #ifdef CONFIG_LCD
#ifdef CONFIG_FB_ADDR #ifdef CONFIG_FB_ADDR
printf("LCD: Frame buffer allocated at preset 0x%08x\n", printf("LCD: Frame buffer allocated at preset 0x%08x\n",
@ -210,16 +157,11 @@ void board_init_f(ulong board_type)
/* And finally, a new, bigger stack. */ /* And finally, a new, bigger stack. */
new_sp = (unsigned long *)addr; new_sp = (unsigned long *)addr;
gd->arch.stack_end = addr; gd->start_addr_sp = addr;
*(--new_sp) = 0; *(--new_sp) = 0;
*(--new_sp) = 0; *(--new_sp) = 0;
/* dram_init_banksize();
* Initialize the board information struct with the
* information we have.
*/
bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
bd->bi_dram[0].size = sdram_size;
memcpy(new_gd, gd, sizeof(gd_t)); memcpy(new_gd, gd, sizeof(gd_t));
@ -264,7 +206,6 @@ void board_init_r(gd_t *new_gd, ulong dest_addr)
/* The malloc area is right below the monitor image in RAM */ /* The malloc area is right below the monitor image in RAM */
mem_malloc_init(CONFIG_SYS_MONITOR_BASE + gd->reloc_off - mem_malloc_init(CONFIG_SYS_MONITOR_BASE + gd->reloc_off -
CONFIG_SYS_MALLOC_LEN, CONFIG_SYS_MALLOC_LEN); CONFIG_SYS_MALLOC_LEN, CONFIG_SYS_MALLOC_LEN);
dma_alloc_init();
enable_interrupts(); enable_interrupts();

View File

@ -0,0 +1,17 @@
/*
* Copyright (C) 2015 Andreas Bießmann <andreas.devel@googlemail.com>
*
* SPDX-License-Identifier: GPL-2.0+
*/
#include <common.h>
DECLARE_GLOBAL_DATA_PTR;
int dram_init(void)
{
/* check for the maximum amount of memory possible on AP7000 devices */
gd->ram_size = get_ram_size(
(void *)CONFIG_SYS_SDRAM_BASE,
(256<<20));
return 0;
}

View File

@ -7,6 +7,11 @@
#include <asm/sysreg.h> #include <asm/sysreg.h>
int interrupt_init(void)
{
return 0;
}
void enable_interrupts(void) void enable_interrupts(void)
{ {
asm volatile("csrf %0" : : "n"(SYSREG_GM_OFFSET)); asm volatile("csrf %0" : : "n"(SYSREG_GM_OFFSET));

View File

@ -40,6 +40,7 @@ obj-y += extable.o
obj-y += interrupts.o obj-y += interrupts.o
obj-$(CONFIG_CMD_KGDB) += kgdb.o obj-$(CONFIG_CMD_KGDB) += kgdb.o
obj-$(CONFIG_CMD_IDE) += ide.o obj-$(CONFIG_CMD_IDE) += ide.o
obj-y += stack.o
obj-y += time.o obj-y += time.o
# Don't include the MPC5xxx special memcpy into the # Don't include the MPC5xxx special memcpy into the

31
arch/powerpc/lib/stack.c Normal file
View File

@ -0,0 +1,31 @@
/*
* Copyright (c) 2015 Andreas Bießmann <andreas.devel@googlemail.com>
*
* Copyright (c) 2011 The Chromium OS Authors.
* (C) Copyright 2002-2006
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
*
* (C) Copyright 2002
* Sysgo Real-Time Solutions, GmbH <www.elinos.com>
* Marius Groeger <mgroeger@sysgo.de>
*
* SPDX-License-Identifier: GPL-2.0+
*/
#include <common.h>
DECLARE_GLOBAL_DATA_PTR;
int arch_reserve_stacks(void)
{
ulong *s;
/* setup stack pointer for exceptions */
gd->irq_sp = gd->start_addr_sp;
/* Clear initial stack frame */
s = (ulong *)gd->start_addr_sp;
*s = 0; /* Terminate back chain */
*++s = 0; /* NULL return address */
return 0;
}

View File

@ -18,14 +18,14 @@ DECLARE_GLOBAL_DATA_PTR;
struct mmu_vm_range mmu_vmr_table[CONFIG_SYS_NR_VM_REGIONS] = { struct mmu_vm_range mmu_vmr_table[CONFIG_SYS_NR_VM_REGIONS] = {
{ {
.virt_pgno = CONFIG_SYS_FLASH_BASE >> PAGE_SHIFT, .virt_pgno = CONFIG_SYS_FLASH_BASE >> MMU_PAGE_SHIFT,
.nr_pages = CONFIG_SYS_FLASH_SIZE >> PAGE_SHIFT, .nr_pages = CONFIG_SYS_FLASH_SIZE >> MMU_PAGE_SHIFT,
.phys = (CONFIG_SYS_FLASH_BASE >> PAGE_SHIFT) .phys = (CONFIG_SYS_FLASH_BASE >> MMU_PAGE_SHIFT)
| MMU_VMR_CACHE_NONE, | MMU_VMR_CACHE_NONE,
}, { }, {
.virt_pgno = CONFIG_SYS_SDRAM_BASE >> PAGE_SHIFT, .virt_pgno = CONFIG_SYS_SDRAM_BASE >> MMU_PAGE_SHIFT,
.nr_pages = EBI_SDRAM_SIZE >> PAGE_SHIFT, .nr_pages = EBI_SDRAM_SIZE >> MMU_PAGE_SHIFT,
.phys = (CONFIG_SYS_SDRAM_BASE >> PAGE_SHIFT) .phys = (CONFIG_SYS_SDRAM_BASE >> MMU_PAGE_SHIFT)
| MMU_VMR_CACHE_WRBACK, | MMU_VMR_CACHE_WRBACK,
}, },
}; };
@ -52,6 +52,8 @@ int board_early_init_f(void)
hmatrix_slave_write(EBI, SFR, HMATRIX_BIT(EBI_SDRAM_ENABLE)); hmatrix_slave_write(EBI, SFR, HMATRIX_BIT(EBI_SDRAM_ENABLE));
portmux_enable_ebi(16, 23, 0, PORTMUX_DRIVE_HIGH); portmux_enable_ebi(16, 23, 0, PORTMUX_DRIVE_HIGH);
sdram_init(uncached(EBI_SDRAM_BASE), &sdram_config);
portmux_enable_usart1(PORTMUX_DRIVE_MIN); portmux_enable_usart1(PORTMUX_DRIVE_MIN);
#if defined(CONFIG_MACB) #if defined(CONFIG_MACB)
@ -68,24 +70,6 @@ int board_early_init_f(void)
return 0; return 0;
} }
phys_size_t initdram(int board_type)
{
unsigned long expected_size;
unsigned long actual_size;
void *sdram_base;
sdram_base = uncached(EBI_SDRAM_BASE);
expected_size = sdram_init(sdram_base, &sdram_config);
actual_size = get_ram_size(sdram_base, expected_size);
if (expected_size != actual_size)
printf("Warning: Only %lu of %lu MiB SDRAM is working\n",
actual_size >> 20, expected_size >> 20);
return actual_size;
}
int board_early_init_r(void) int board_early_init_r(void)
{ {
gd->bd->bi_phy_id[0] = 0x01; gd->bd->bi_phy_id[0] = 0x01;

View File

@ -23,21 +23,21 @@ DECLARE_GLOBAL_DATA_PTR;
struct mmu_vm_range mmu_vmr_table[CONFIG_SYS_NR_VM_REGIONS] = { struct mmu_vm_range mmu_vmr_table[CONFIG_SYS_NR_VM_REGIONS] = {
{ {
/* Atmel AT49BV640D 8 MiB x16 NOR flash on NCS0 */ /* Atmel AT49BV640D 8 MiB x16 NOR flash on NCS0 */
.virt_pgno = CONFIG_SYS_FLASH_BASE >> PAGE_SHIFT, .virt_pgno = CONFIG_SYS_FLASH_BASE >> MMU_PAGE_SHIFT,
.nr_pages = CONFIG_SYS_FLASH_SIZE >> PAGE_SHIFT, .nr_pages = CONFIG_SYS_FLASH_SIZE >> MMU_PAGE_SHIFT,
.phys = (CONFIG_SYS_FLASH_BASE >> PAGE_SHIFT) .phys = (CONFIG_SYS_FLASH_BASE >> MMU_PAGE_SHIFT)
| MMU_VMR_CACHE_NONE, | MMU_VMR_CACHE_NONE,
}, { }, {
/* Micron MT29F2G16AAD 256 MiB x16 NAND flash on NCS3 */ /* Micron MT29F2G16AAD 256 MiB x16 NAND flash on NCS3 */
.virt_pgno = EBI_SRAM_CS3_BASE >> PAGE_SHIFT, .virt_pgno = EBI_SRAM_CS3_BASE >> MMU_PAGE_SHIFT,
.nr_pages = EBI_SRAM_CS3_SIZE >> PAGE_SHIFT, .nr_pages = EBI_SRAM_CS3_SIZE >> MMU_PAGE_SHIFT,
.phys = (EBI_SRAM_CS3_BASE >> PAGE_SHIFT) .phys = (EBI_SRAM_CS3_BASE >> MMU_PAGE_SHIFT)
| MMU_VMR_CACHE_NONE, | MMU_VMR_CACHE_NONE,
}, { }, {
/* 2x16-bit ISSI IS42S16320B 64 MiB SDRAM (128 MiB total) */ /* 2x16-bit ISSI IS42S16320B 64 MiB SDRAM (128 MiB total) */
.virt_pgno = CONFIG_SYS_SDRAM_BASE >> PAGE_SHIFT, .virt_pgno = CONFIG_SYS_SDRAM_BASE >> MMU_PAGE_SHIFT,
.nr_pages = EBI_SDRAM_SIZE >> PAGE_SHIFT, .nr_pages = EBI_SDRAM_SIZE >> MMU_PAGE_SHIFT,
.phys = (CONFIG_SYS_SDRAM_BASE >> PAGE_SHIFT) .phys = (CONFIG_SYS_SDRAM_BASE >> MMU_PAGE_SHIFT)
| MMU_VMR_CACHE_WRBACK, | MMU_VMR_CACHE_WRBACK,
}, },
}; };
@ -69,6 +69,9 @@ int board_early_init_f(void)
portmux_select_gpio(PORTMUX_PORT_E, 1 << 23, portmux_select_gpio(PORTMUX_PORT_E, 1 << 23,
PORTMUX_DIR_OUTPUT | PORTMUX_INIT_HIGH PORTMUX_DIR_OUTPUT | PORTMUX_INIT_HIGH
| PORTMUX_DRIVE_MIN); | PORTMUX_DRIVE_MIN);
sdram_init(uncached(EBI_SDRAM_BASE), &sdram_config);
portmux_enable_usart1(PORTMUX_DRIVE_MIN); portmux_enable_usart1(PORTMUX_DRIVE_MIN);
#if defined(CONFIG_MACB) #if defined(CONFIG_MACB)
@ -85,24 +88,6 @@ int board_early_init_f(void)
return 0; return 0;
} }
phys_size_t initdram(int board_type)
{
unsigned long expected_size;
unsigned long actual_size;
void *sdram_base;
sdram_base = uncached(EBI_SDRAM_BASE);
expected_size = sdram_init(sdram_base, &sdram_config);
actual_size = get_ram_size(sdram_base, expected_size);
if (expected_size != actual_size)
printf("Warning: Only %lu of %lu MiB SDRAM is working\n",
actual_size >> 20, expected_size >> 20);
return actual_size;
}
int board_early_init_r(void) int board_early_init_r(void)
{ {
gd->bd->bi_phy_id[0] = 0x01; gd->bd->bi_phy_id[0] = 0x01;

View File

@ -17,14 +17,14 @@ DECLARE_GLOBAL_DATA_PTR;
struct mmu_vm_range mmu_vmr_table[CONFIG_SYS_NR_VM_REGIONS] = { struct mmu_vm_range mmu_vmr_table[CONFIG_SYS_NR_VM_REGIONS] = {
{ {
.virt_pgno = CONFIG_SYS_FLASH_BASE >> PAGE_SHIFT, .virt_pgno = CONFIG_SYS_FLASH_BASE >> MMU_PAGE_SHIFT,
.nr_pages = CONFIG_SYS_FLASH_SIZE >> PAGE_SHIFT, .nr_pages = CONFIG_SYS_FLASH_SIZE >> MMU_PAGE_SHIFT,
.phys = (CONFIG_SYS_FLASH_BASE >> PAGE_SHIFT) .phys = (CONFIG_SYS_FLASH_BASE >> MMU_PAGE_SHIFT)
| MMU_VMR_CACHE_NONE, | MMU_VMR_CACHE_NONE,
}, { }, {
.virt_pgno = CONFIG_SYS_SDRAM_BASE >> PAGE_SHIFT, .virt_pgno = CONFIG_SYS_SDRAM_BASE >> MMU_PAGE_SHIFT,
.nr_pages = EBI_SDRAM_SIZE >> PAGE_SHIFT, .nr_pages = EBI_SDRAM_SIZE >> MMU_PAGE_SHIFT,
.phys = (CONFIG_SYS_SDRAM_BASE >> PAGE_SHIFT) .phys = (CONFIG_SYS_SDRAM_BASE >> MMU_PAGE_SHIFT)
| MMU_VMR_CACHE_WRBACK, | MMU_VMR_CACHE_WRBACK,
}, },
}; };
@ -78,7 +78,10 @@ int board_early_init_f(void)
hmatrix_slave_write(EBI, SFR, HMATRIX_BIT(EBI_SDRAM_ENABLE)); hmatrix_slave_write(EBI, SFR, HMATRIX_BIT(EBI_SDRAM_ENABLE));
portmux_enable_ebi(sdram_config.data_bits, 23, 0, PORTMUX_DRIVE_HIGH); portmux_enable_ebi(sdram_config.data_bits, 23, 0, PORTMUX_DRIVE_HIGH);
sdram_init(uncached(EBI_SDRAM_BASE), &sdram_config);
portmux_enable_usart1(PORTMUX_DRIVE_MIN); portmux_enable_usart1(PORTMUX_DRIVE_MIN);
#if defined(CONFIG_MACB) #if defined(CONFIG_MACB)
portmux_enable_macb0(PORTMUX_MACB_MII, PORTMUX_DRIVE_LOW); portmux_enable_macb0(PORTMUX_MACB_MII, PORTMUX_DRIVE_LOW);
portmux_enable_macb1(PORTMUX_MACB_MII, PORTMUX_DRIVE_LOW); portmux_enable_macb1(PORTMUX_MACB_MII, PORTMUX_DRIVE_LOW);
@ -90,24 +93,6 @@ int board_early_init_f(void)
return 0; return 0;
} }
phys_size_t initdram(int board_type)
{
unsigned long expected_size;
unsigned long actual_size;
void *sdram_base;
sdram_base = uncached(EBI_SDRAM_BASE);
expected_size = sdram_init(sdram_base, &sdram_config);
actual_size = get_ram_size(sdram_base, expected_size);
if (expected_size != actual_size)
printf("Warning: Only %lu of %lu MiB SDRAM is working\n",
actual_size >> 20, expected_size >> 20);
return actual_size;
}
int board_early_init_r(void) int board_early_init_r(void)
{ {
gd->bd->bi_phy_id[0] = 0x10; gd->bd->bi_phy_id[0] = 0x10;

View File

@ -17,14 +17,14 @@ DECLARE_GLOBAL_DATA_PTR;
struct mmu_vm_range mmu_vmr_table[CONFIG_SYS_NR_VM_REGIONS] = { struct mmu_vm_range mmu_vmr_table[CONFIG_SYS_NR_VM_REGIONS] = {
{ {
.virt_pgno = CONFIG_SYS_FLASH_BASE >> PAGE_SHIFT, .virt_pgno = CONFIG_SYS_FLASH_BASE >> MMU_PAGE_SHIFT,
.nr_pages = CONFIG_SYS_FLASH_SIZE >> PAGE_SHIFT, .nr_pages = CONFIG_SYS_FLASH_SIZE >> MMU_PAGE_SHIFT,
.phys = (CONFIG_SYS_FLASH_BASE >> PAGE_SHIFT) .phys = (CONFIG_SYS_FLASH_BASE >> MMU_PAGE_SHIFT)
| MMU_VMR_CACHE_NONE, | MMU_VMR_CACHE_NONE,
}, { }, {
.virt_pgno = CONFIG_SYS_SDRAM_BASE >> PAGE_SHIFT, .virt_pgno = CONFIG_SYS_SDRAM_BASE >> MMU_PAGE_SHIFT,
.nr_pages = EBI_SDRAM_SIZE >> PAGE_SHIFT, .nr_pages = EBI_SDRAM_SIZE >> MMU_PAGE_SHIFT,
.phys = (CONFIG_SYS_SDRAM_BASE >> PAGE_SHIFT) .phys = (CONFIG_SYS_SDRAM_BASE >> MMU_PAGE_SHIFT)
| MMU_VMR_CACHE_WRBACK, | MMU_VMR_CACHE_WRBACK,
}, },
}; };
@ -52,6 +52,9 @@ int board_early_init_f(void)
hmatrix_slave_write(EBI, SFR, HMATRIX_BIT(EBI_SDRAM_ENABLE)); hmatrix_slave_write(EBI, SFR, HMATRIX_BIT(EBI_SDRAM_ENABLE));
portmux_enable_ebi(32, 23, 0, PORTMUX_DRIVE_HIGH); portmux_enable_ebi(32, 23, 0, PORTMUX_DRIVE_HIGH);
sdram_init(uncached(EBI_SDRAM_BASE), &sdram_config);
portmux_enable_usart3(PORTMUX_DRIVE_MIN); portmux_enable_usart3(PORTMUX_DRIVE_MIN);
#if defined(CONFIG_MACB) #if defined(CONFIG_MACB)
portmux_enable_macb0(PORTMUX_MACB_MII, PORTMUX_DRIVE_HIGH); portmux_enable_macb0(PORTMUX_MACB_MII, PORTMUX_DRIVE_HIGH);
@ -63,24 +66,6 @@ int board_early_init_f(void)
return 0; return 0;
} }
phys_size_t initdram(int board_type)
{
unsigned long expected_size;
unsigned long actual_size;
void *sdram_base;
sdram_base = uncached(EBI_SDRAM_BASE);
expected_size = sdram_init(sdram_base, &sdram_config);
actual_size = get_ram_size(sdram_base, expected_size);
if (expected_size != actual_size)
printf("Warning: Only %lu of %lu MiB SDRAM is working\n",
actual_size >> 20, expected_size >> 20);
return actual_size;
}
int board_early_init_r(void) int board_early_init_r(void)
{ {
gd->bd->bi_phy_id[0] = 0x01; gd->bd->bi_phy_id[0] = 0x01;

View File

@ -18,14 +18,14 @@ DECLARE_GLOBAL_DATA_PTR;
struct mmu_vm_range mmu_vmr_table[CONFIG_SYS_NR_VM_REGIONS] = { struct mmu_vm_range mmu_vmr_table[CONFIG_SYS_NR_VM_REGIONS] = {
{ {
.virt_pgno = CONFIG_SYS_FLASH_BASE >> PAGE_SHIFT, .virt_pgno = CONFIG_SYS_FLASH_BASE >> MMU_PAGE_SHIFT,
.nr_pages = CONFIG_SYS_FLASH_SIZE >> PAGE_SHIFT, .nr_pages = CONFIG_SYS_FLASH_SIZE >> MMU_PAGE_SHIFT,
.phys = (CONFIG_SYS_FLASH_BASE >> PAGE_SHIFT) .phys = (CONFIG_SYS_FLASH_BASE >> MMU_PAGE_SHIFT)
| MMU_VMR_CACHE_NONE, | MMU_VMR_CACHE_NONE,
}, { }, {
.virt_pgno = CONFIG_SYS_SDRAM_BASE >> PAGE_SHIFT, .virt_pgno = CONFIG_SYS_SDRAM_BASE >> MMU_PAGE_SHIFT,
.nr_pages = EBI_SDRAM_SIZE >> PAGE_SHIFT, .nr_pages = EBI_SDRAM_SIZE >> MMU_PAGE_SHIFT,
.phys = (CONFIG_SYS_SDRAM_BASE >> PAGE_SHIFT) .phys = (CONFIG_SYS_SDRAM_BASE >> MMU_PAGE_SHIFT)
| MMU_VMR_CACHE_WRBACK, | MMU_VMR_CACHE_WRBACK,
}, },
}; };
@ -53,6 +53,8 @@ int board_early_init_f(void)
hmatrix_slave_write(EBI, SFR, HMATRIX_BIT(EBI_SDRAM_ENABLE)); hmatrix_slave_write(EBI, SFR, HMATRIX_BIT(EBI_SDRAM_ENABLE));
portmux_enable_ebi(SDRAM_DATA_32BIT, 23, 0, PORTMUX_DRIVE_HIGH); portmux_enable_ebi(SDRAM_DATA_32BIT, 23, 0, PORTMUX_DRIVE_HIGH);
sdram_init(uncached(EBI_SDRAM_BASE), &sdram_config);
portmux_enable_usart0(PORTMUX_DRIVE_MIN); portmux_enable_usart0(PORTMUX_DRIVE_MIN);
portmux_enable_usart1(PORTMUX_DRIVE_MIN); portmux_enable_usart1(PORTMUX_DRIVE_MIN);
#if defined(CONFIG_MACB) #if defined(CONFIG_MACB)
@ -69,24 +71,6 @@ int board_early_init_f(void)
return 0; return 0;
} }
phys_size_t initdram(int board_type)
{
unsigned long expected_size;
unsigned long actual_size;
void *sdram_base;
sdram_base = uncached(EBI_SDRAM_BASE);
expected_size = sdram_init(sdram_base, &sdram_config);
actual_size = get_ram_size(sdram_base, expected_size);
if (expected_size != actual_size)
printf("Warning: Only %lu of %lu MiB SDRAM is working\n",
actual_size >> 20, expected_size >> 20);
return actual_size;
}
int board_early_init_r(void) int board_early_init_r(void)
{ {
gd->bd->bi_phy_id[0] = 0x00; gd->bd->bi_phy_id[0] = 0x00;

View File

@ -20,19 +20,19 @@
struct mmu_vm_range mmu_vmr_table[CONFIG_SYS_NR_VM_REGIONS] = { struct mmu_vm_range mmu_vmr_table[CONFIG_SYS_NR_VM_REGIONS] = {
{ {
.virt_pgno = CONFIG_SYS_FLASH_BASE >> PAGE_SHIFT, .virt_pgno = CONFIG_SYS_FLASH_BASE >> MMU_PAGE_SHIFT,
.nr_pages = CONFIG_SYS_FLASH_SIZE >> PAGE_SHIFT, .nr_pages = CONFIG_SYS_FLASH_SIZE >> MMU_PAGE_SHIFT,
.phys = (CONFIG_SYS_FLASH_BASE >> PAGE_SHIFT) .phys = (CONFIG_SYS_FLASH_BASE >> MMU_PAGE_SHIFT)
| MMU_VMR_CACHE_NONE, | MMU_VMR_CACHE_NONE,
}, { }, {
.virt_pgno = EBI_SRAM_CS2_BASE >> PAGE_SHIFT, .virt_pgno = EBI_SRAM_CS2_BASE >> MMU_PAGE_SHIFT,
.nr_pages = EBI_SRAM_CS2_SIZE >> PAGE_SHIFT, .nr_pages = EBI_SRAM_CS2_SIZE >> MMU_PAGE_SHIFT,
.phys = (EBI_SRAM_CS2_BASE >> PAGE_SHIFT) .phys = (EBI_SRAM_CS2_BASE >> MMU_PAGE_SHIFT)
| MMU_VMR_CACHE_NONE, | MMU_VMR_CACHE_NONE,
}, { }, {
.virt_pgno = CONFIG_SYS_SDRAM_BASE >> PAGE_SHIFT, .virt_pgno = CONFIG_SYS_SDRAM_BASE >> MMU_PAGE_SHIFT,
.nr_pages = EBI_SDRAM_SIZE >> PAGE_SHIFT, .nr_pages = EBI_SDRAM_SIZE >> MMU_PAGE_SHIFT,
.phys = (CONFIG_SYS_SDRAM_BASE >> PAGE_SHIFT) .phys = (CONFIG_SYS_SDRAM_BASE >> MMU_PAGE_SHIFT)
| MMU_VMR_CACHE_WRBACK, | MMU_VMR_CACHE_WRBACK,
}, },
}; };
@ -91,6 +91,8 @@ int board_early_init_f(void)
/* Enable 26 address bits and NCS2 */ /* Enable 26 address bits and NCS2 */
portmux_enable_ebi(16, 26, PORTMUX_EBI_CS(2), PORTMUX_DRIVE_HIGH); portmux_enable_ebi(16, 26, PORTMUX_EBI_CS(2), PORTMUX_DRIVE_HIGH);
sdram_init(uncached(EBI_SDRAM_BASE), &sdram_config);
portmux_enable_usart1(PORTMUX_DRIVE_MIN); portmux_enable_usart1(PORTMUX_DRIVE_MIN);
/* de-assert "force sys reset" pin */ /* de-assert "force sys reset" pin */
@ -151,24 +153,6 @@ int board_early_init_f(void)
return 0; return 0;
} }
phys_size_t initdram(int board_type)
{
unsigned long expected_size;
unsigned long actual_size;
void *sdram_base;
sdram_base = uncached(EBI_SDRAM_BASE);
expected_size = sdram_init(sdram_base, &sdram_config);
actual_size = get_ram_size(sdram_base, expected_size);
if (expected_size != actual_size)
printf("Warning: Only %lu of %lu MiB SDRAM is working\n",
actual_size >> 20, expected_size >> 20);
return actual_size;
}
int board_early_init_r(void) int board_early_init_r(void)
{ {
gd->bd->bi_phy_id[0] = 0x01; gd->bd->bi_phy_id[0] = 0x01;

View File

@ -21,14 +21,14 @@ DECLARE_GLOBAL_DATA_PTR;
struct mmu_vm_range mmu_vmr_table[CONFIG_SYS_NR_VM_REGIONS] = { struct mmu_vm_range mmu_vmr_table[CONFIG_SYS_NR_VM_REGIONS] = {
{ {
.virt_pgno = CONFIG_SYS_FLASH_BASE >> PAGE_SHIFT, .virt_pgno = CONFIG_SYS_FLASH_BASE >> MMU_PAGE_SHIFT,
.nr_pages = CONFIG_SYS_FLASH_SIZE >> PAGE_SHIFT, .nr_pages = CONFIG_SYS_FLASH_SIZE >> MMU_PAGE_SHIFT,
.phys = (CONFIG_SYS_FLASH_BASE >> PAGE_SHIFT) .phys = (CONFIG_SYS_FLASH_BASE >> MMU_PAGE_SHIFT)
| MMU_VMR_CACHE_NONE, | MMU_VMR_CACHE_NONE,
}, { }, {
.virt_pgno = CONFIG_SYS_SDRAM_BASE >> PAGE_SHIFT, .virt_pgno = CONFIG_SYS_SDRAM_BASE >> MMU_PAGE_SHIFT,
.nr_pages = EBI_SDRAM_SIZE >> PAGE_SHIFT, .nr_pages = EBI_SDRAM_SIZE >> MMU_PAGE_SHIFT,
.phys = (CONFIG_SYS_SDRAM_BASE >> PAGE_SHIFT) .phys = (CONFIG_SYS_SDRAM_BASE >> MMU_PAGE_SHIFT)
| MMU_VMR_CACHE_WRBACK, | MMU_VMR_CACHE_WRBACK,
}, },
}; };
@ -63,6 +63,8 @@ int board_early_init_f(void)
hmatrix_slave_write(EBI, SFR, HMATRIX_BIT(EBI_SDRAM_ENABLE)); hmatrix_slave_write(EBI, SFR, HMATRIX_BIT(EBI_SDRAM_ENABLE));
portmux_enable_ebi(32, 23, 0, PORTMUX_DRIVE_HIGH); portmux_enable_ebi(32, 23, 0, PORTMUX_DRIVE_HIGH);
sdram_init(uncached(EBI_SDRAM_BASE), &sdram_config);
portmux_enable_usart1(PORTMUX_DRIVE_MIN); portmux_enable_usart1(PORTMUX_DRIVE_MIN);
#if defined(CONFIG_MACB) #if defined(CONFIG_MACB)
@ -74,24 +76,6 @@ int board_early_init_f(void)
return 0; return 0;
} }
phys_size_t initdram(int board_type)
{
unsigned long expected_size;
unsigned long actual_size;
void *sdram_base;
sdram_base = uncached(EBI_SDRAM_BASE);
expected_size = sdram_init(sdram_base, &sdram_config);
actual_size = get_ram_size(sdram_base, expected_size);
if (expected_size != actual_size)
printf("Warning: Only %lu of %lu MiB SDRAM is working\n",
actual_size >> 20, expected_size >> 20);
return actual_size;
}
int board_early_init_r(void) int board_early_init_r(void)
{ {
gd->bd->bi_phy_id[0] = 0x01; gd->bd->bi_phy_id[0] = 0x01;

View File

@ -573,48 +573,22 @@ static int reserve_fdt(void)
return 0; return 0;
} }
int arch_reserve_stacks(void)
{
return 0;
}
static int reserve_stacks(void) static int reserve_stacks(void)
{ {
#ifdef CONFIG_SPL_BUILD /* make stack pointer 16-byte aligned */
# ifdef CONFIG_ARM
gd->start_addr_sp -= 128; /* leave 32 words for abort-stack */
gd->irq_sp = gd->start_addr_sp;
# endif
#else
# ifdef CONFIG_PPC
ulong *s;
# endif
/* setup stack pointer for exceptions */
gd->start_addr_sp -= 16; gd->start_addr_sp -= 16;
gd->start_addr_sp &= ~0xf; gd->start_addr_sp &= ~0xf;
gd->irq_sp = gd->start_addr_sp;
/* /*
* Handle architecture-specific things here * let the architecture specific code tailor gd->start_addr_sp and
* TODO(sjg@chromium.org): Perhaps create arch_reserve_stack() * gd->irq_sp
* to handle this and put in arch/xxx/lib/stack.c
*/ */
# if defined(CONFIG_ARM) && !defined(CONFIG_ARM64) return arch_reserve_stacks();
# ifdef CONFIG_USE_IRQ
gd->start_addr_sp -= (CONFIG_STACKSIZE_IRQ + CONFIG_STACKSIZE_FIQ);
debug("Reserving %zu Bytes for IRQ stack at: %08lx\n",
CONFIG_STACKSIZE_IRQ + CONFIG_STACKSIZE_FIQ, gd->start_addr_sp);
/* 8-byte alignment for ARM ABI compliance */
gd->start_addr_sp &= ~0x07;
# endif
/* leave 3 words for abort-stack, plus 1 for alignment */
gd->start_addr_sp -= 16;
# elif defined(CONFIG_PPC)
/* Clear initial stack frame */
s = (ulong *) gd->start_addr_sp;
*s = 0; /* Terminate back chain */
*++s = 0; /* NULL return address */
# endif /* Architecture specific code */
return 0;
#endif
} }
static int display_new_sp(void) static int display_new_sp(void)
@ -909,7 +883,7 @@ static init_fnc_t init_sequence_f[] = {
#endif #endif
announce_dram_init, announce_dram_init,
/* TODO: unify all these dram functions? */ /* 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 */ dram_init, /* configure available RAM banks */
#endif #endif
#if defined(CONFIG_MIPS) || defined(CONFIG_PPC) #if defined(CONFIG_MIPS) || defined(CONFIG_PPC)

View File

@ -55,6 +55,9 @@
#include <dm/root.h> #include <dm/root.h>
#include <linux/compiler.h> #include <linux/compiler.h>
#include <linux/err.h> #include <linux/err.h>
#ifdef CONFIG_AVR32
#include <asm/arch/mmu.h>
#endif
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;
@ -459,6 +462,18 @@ static int initr_env(void)
return 0; return 0;
} }
#ifdef CONFIG_SYS_BOOTPARAMS_LEN
static int initr_malloc_bootparams(void)
{
gd->bd->bi_boot_params = (ulong)malloc(CONFIG_SYS_BOOTPARAMS_LEN);
if (!gd->bd->bi_boot_params) {
puts("WARNING: Cannot allocate space for boot parameters\n");
return -ENOMEM;
}
return 0;
}
#endif
#ifdef CONFIG_SC3 #ifdef CONFIG_SC3
/* TODO: with new initcalls, move this into the driver */ /* TODO: with new initcalls, move this into the driver */
extern void sc3_read_eeprom(void); extern void sc3_read_eeprom(void);
@ -486,7 +501,7 @@ static int initr_api(void)
#endif #endif
/* enable exceptions */ /* enable exceptions */
#ifdef CONFIG_ARM #if defined(CONFIG_ARM) || defined(CONFIG_AVR32)
static int initr_enable_interrupts(void) static int initr_enable_interrupts(void)
{ {
enable_interrupts(); enable_interrupts();
@ -775,6 +790,9 @@ init_fnc_t init_sequence_r[] = {
initr_dataflash, initr_dataflash,
#endif #endif
initr_env, initr_env,
#ifdef CONFIG_SYS_BOOTPARAMS_LEN
initr_malloc_bootparams,
#endif
INIT_FUNC_WATCHDOG_RESET INIT_FUNC_WATCHDOG_RESET
initr_secondary_cpu, initr_secondary_cpu,
#ifdef CONFIG_SC3 #ifdef CONFIG_SC3
@ -810,10 +828,10 @@ init_fnc_t init_sequence_r[] = {
initr_kgdb, initr_kgdb,
#endif #endif
interrupt_init, interrupt_init,
#if defined(CONFIG_ARM) #if defined(CONFIG_ARM) || defined(CONFIG_AVR32)
initr_enable_interrupts, initr_enable_interrupts,
#endif #endif
#if defined(CONFIG_X86) || defined(CONFIG_MICROBLAZE) #if defined(CONFIG_X86) || defined(CONFIG_MICROBLAZE) || defined(CONFIG_AVR32)
timer_init, /* initialize timer */ timer_init, /* initialize timer */
#endif #endif
#if defined(CONFIG_STATUS_LED) && defined(STATUS_LED_BOOT) #if defined(CONFIG_STATUS_LED) && defined(STATUS_LED_BOOT)
@ -878,6 +896,10 @@ void board_init_r(gd_t *new_gd, ulong dest_addr)
int i; int i;
#endif #endif
#ifdef CONFIG_AVR32
mmu_init_r(dest_addr);
#endif
#if !defined(CONFIG_X86) && !defined(CONFIG_ARM) && !defined(CONFIG_ARM64) #if !defined(CONFIG_X86) && !defined(CONFIG_ARM) && !defined(CONFIG_ARM64)
gd = new_gd; gd = new_gd;
#endif #endif

View File

@ -345,8 +345,8 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
bd_t *bd = gd->bd; bd_t *bd = gd->bd;
print_num("boot_params", (ulong)bd->bi_boot_params); print_num("boot_params", (ulong)bd->bi_boot_params);
print_num("memstart", (ulong)bd->bi_memstart); print_num("memstart", (ulong)bd->bi_dram[0].start);
print_lnum("memsize", (u64)bd->bi_memsize); print_lnum("memsize", (u64)bd->bi_dram[0].size);
print_num("flashstart", (ulong)bd->bi_flashstart); print_num("flashstart", (ulong)bd->bi_flashstart);
print_num("flashsize", (ulong)bd->bi_flashsize); print_num("flashsize", (ulong)bd->bi_flashsize);
print_num("flashoffset", (ulong)bd->bi_flashoffset); print_num("flashoffset", (ulong)bd->bi_flashoffset);

View File

@ -32,6 +32,10 @@ typedef struct bd_info {
unsigned long bi_flashoffset; /* reserved area for startup monitor */ unsigned long bi_flashoffset; /* reserved area for startup monitor */
unsigned long bi_sramstart; /* start of SRAM memory */ unsigned long bi_sramstart; /* start of SRAM memory */
unsigned long bi_sramsize; /* size 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 #ifdef CONFIG_ARM
unsigned long bi_arm_freq; /* arm frequency */ unsigned long bi_arm_freq; /* arm frequency */
unsigned long bi_dsp_freq; /* dsp core frequency */ unsigned long bi_dsp_freq; /* dsp core frequency */

View File

@ -252,6 +252,24 @@ static inline int print_cpuinfo(void)
int update_flash_size(int flash_size); int update_flash_size(int flash_size);
int arch_early_init_r(void); int arch_early_init_r(void);
/**
* Reserve all necessary stacks
*
* This is used in generic board init sequence in common/board_f.c. Each
* architecture could provide this function to tailor the required stacks.
*
* On entry gd->start_addr_sp is pointing to the suggested top of the stack.
* The callee ensures gd->start_add_sp is 16-byte aligned, so architectures
* require only this can leave it untouched.
*
* On exit gd->start_addr_sp and gd->irq_sp should be set to the respective
* positions of the stack. The stack pointer(s) will be set to this later.
* gd->irq_sp is only required, if the architecture needs it.
*
* @return 0 if no error
*/
__weak int arch_reserve_stacks(void);
/** /**
* Show the DRAM size in a board-specific way * Show the DRAM size in a board-specific way
* *

View File

@ -143,7 +143,6 @@
#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INTRAM_BASE + CONFIG_SYS_INTRAM_SIZE) #define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INTRAM_BASE + CONFIG_SYS_INTRAM_SIZE)
#define CONFIG_SYS_MALLOC_LEN (256*1024) #define CONFIG_SYS_MALLOC_LEN (256*1024)
#define CONFIG_SYS_DMA_ALLOC_LEN (16384)
/* Allow 4MB for the kernel run-time image */ /* Allow 4MB for the kernel run-time image */
#define CONFIG_SYS_LOAD_ADDR (EBI_SDRAM_BASE + 0x00400000) #define CONFIG_SYS_LOAD_ADDR (EBI_SDRAM_BASE + 0x00400000)

View File

@ -164,7 +164,6 @@
#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INTRAM_BASE + CONFIG_SYS_INTRAM_SIZE) #define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INTRAM_BASE + CONFIG_SYS_INTRAM_SIZE)
#define CONFIG_SYS_MALLOC_LEN (256*1024) #define CONFIG_SYS_MALLOC_LEN (256*1024)
#define CONFIG_SYS_DMA_ALLOC_LEN (16384)
/* Allow 4MB for the kernel run-time image */ /* Allow 4MB for the kernel run-time image */
#define CONFIG_SYS_LOAD_ADDR (EBI_SDRAM_BASE + 0x00400000) #define CONFIG_SYS_LOAD_ADDR (EBI_SDRAM_BASE + 0x00400000)

View File

@ -104,6 +104,10 @@
#define CONFIG_BOOTP_SUBNETMASK #define CONFIG_BOOTP_SUBNETMASK
#define CONFIG_BOOTP_GATEWAY #define CONFIG_BOOTP_GATEWAY
/* generic board */
#define CONFIG_SYS_GENERIC_BOARD
#define CONFIG_BOARD_EARLY_INIT_F
#define CONFIG_BOARD_EARLY_INIT_R
/* /*
* Command line configuration. * Command line configuration.
@ -158,7 +162,6 @@
#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INTRAM_BASE + CONFIG_SYS_INTRAM_SIZE) #define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INTRAM_BASE + CONFIG_SYS_INTRAM_SIZE)
#define CONFIG_SYS_MALLOC_LEN (256*1024) #define CONFIG_SYS_MALLOC_LEN (256*1024)
#define CONFIG_SYS_DMA_ALLOC_LEN (16384)
/* Allow 4MB for the kernel run-time image */ /* Allow 4MB for the kernel run-time image */
#define CONFIG_SYS_LOAD_ADDR (EBI_SDRAM_BASE + 0x00400000) #define CONFIG_SYS_LOAD_ADDR (EBI_SDRAM_BASE + 0x00400000)

View File

@ -159,7 +159,6 @@
#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INTRAM_BASE + CONFIG_SYS_INTRAM_SIZE) #define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INTRAM_BASE + CONFIG_SYS_INTRAM_SIZE)
#define CONFIG_SYS_MALLOC_LEN (256*1024) #define CONFIG_SYS_MALLOC_LEN (256*1024)
#define CONFIG_SYS_DMA_ALLOC_LEN (16384)
/* Allow 4MB for the kernel run-time image */ /* Allow 4MB for the kernel run-time image */
#define CONFIG_SYS_LOAD_ADDR (EBI_SDRAM_BASE + 0x00400000) #define CONFIG_SYS_LOAD_ADDR (EBI_SDRAM_BASE + 0x00400000)

View File

@ -162,7 +162,6 @@
#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INTRAM_BASE + CONFIG_SYS_INTRAM_SIZE) #define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INTRAM_BASE + CONFIG_SYS_INTRAM_SIZE)
#define CONFIG_SYS_MALLOC_LEN (256*1024) #define CONFIG_SYS_MALLOC_LEN (256*1024)
#define CONFIG_SYS_DMA_ALLOC_LEN (16384)
/* Allow 4MB for the kernel run-time image */ /* Allow 4MB for the kernel run-time image */
#define CONFIG_SYS_LOAD_ADDR (EBI_SDRAM_BASE + 0x00400000) #define CONFIG_SYS_LOAD_ADDR (EBI_SDRAM_BASE + 0x00400000)

View File

@ -62,6 +62,10 @@
#define CONFIG_USART_BASE ATMEL_BASE_USART1 #define CONFIG_USART_BASE ATMEL_BASE_USART1
#define CONFIG_USART_ID 1 #define CONFIG_USART_ID 1
#define CONFIG_SYS_GENERIC_BOARD
#define CONFIG_BOARD_EARLY_INIT_F
#define CONFIG_BOARD_EARLY_INIT_R
/* User serviceable stuff */ /* User serviceable stuff */
#define CONFIG_CMDLINE_TAG #define CONFIG_CMDLINE_TAG
#define CONFIG_SETUP_MEMORY_TAGS #define CONFIG_SETUP_MEMORY_TAGS
@ -151,7 +155,6 @@
CONFIG_SYS_INTRAM_SIZE) CONFIG_SYS_INTRAM_SIZE)
#define CONFIG_SYS_MALLOC_LEN (256*1024) #define CONFIG_SYS_MALLOC_LEN (256*1024)
#define CONFIG_SYS_DMA_ALLOC_LEN (16384)
/* Allow 4MB for the kernel run-time image */ /* Allow 4MB for the kernel run-time image */
#define CONFIG_SYS_LOAD_ADDR (EBI_SDRAM_BASE + 0x00400000) #define CONFIG_SYS_LOAD_ADDR (EBI_SDRAM_BASE + 0x00400000)

View File

@ -137,7 +137,6 @@
#define CONFIG_SYS_MALLOC_LEN (256*1024) #define CONFIG_SYS_MALLOC_LEN (256*1024)
#define CONFIG_SYS_DMA_ALLOC_LEN (16384)
/* Allow 4MB for the kernel run-time image */ /* Allow 4MB for the kernel run-time image */
#define CONFIG_SYS_LOAD_ADDR (CONFIG_SYS_SDRAM_BASE + 0x00400000) #define CONFIG_SYS_LOAD_ADDR (CONFIG_SYS_SDRAM_BASE + 0x00400000)

View File

@ -157,7 +157,6 @@
#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INTRAM_BASE + CONFIG_SYS_INTRAM_SIZE) #define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INTRAM_BASE + CONFIG_SYS_INTRAM_SIZE)
#define CONFIG_SYS_MALLOC_LEN (1024*1024) #define CONFIG_SYS_MALLOC_LEN (1024*1024)
#define CONFIG_SYS_DMA_ALLOC_LEN (16384)
/* Allow 4MB for the kernel run-time image */ /* Allow 4MB for the kernel run-time image */
#define CONFIG_SYS_LOAD_ADDR (EBI_SDRAM_BASE + 0x00400000) #define CONFIG_SYS_LOAD_ADDR (EBI_SDRAM_BASE + 0x00400000)