/******************************************************************************* * * Filename: arm_init.s * * Initialization for C-environment and basic operation. Adapted from * ATMEL cstartup.s. * * Revision information: * * 20AUG2004 kb_admin initial creation * 12JAN2005 kb_admin updated for 16KB eeprom * Atmel stack prevents loading full size at once * * BEGIN_KBDD_BLOCK * No warranty, expressed or implied, is included with this software. It is * provided "AS IS" and no warranty of any kind including statutory or aspects * relating to merchantability or fitness for any purpose is provided. All * intellectual property rights of others is maintained with the respective * owners. This software is not copyrighted and is intended for reference * only. * END_BLOCK * * $FreeBSD$ ******************************************************************************/ .equ TWI_EEPROM_SIZE, 0x3000 .equ ARM_MODE_USER, 0x10 .equ ARM_MODE_FIQ, 0x11 .equ ARM_MODE_IRQ, 0x12 .equ ARM_MODE_SVC, 0x13 .equ ARM_MODE_ABORT, 0x17 .equ ARM_MODE_UNDEF, 0x1B .equ ARM_MODE_SYS, 0x1F .equ I_BIT, 0x80 .equ F_BIT, 0x40 .equ T_BIT, 0x20 /* * Stack definitions * * Start near top of internal RAM. */ .equ END_INT_SRAM, 0x4000 .equ SVC_STACK_START, (END_INT_SRAM - 0x4) .equ SVC_STACK_USE, 0x21800000 start: /* vectors - must reside at address 0 */ /* the format of this table is defined in the datasheet */ B InitReset @; reset undefvec: B undefvec @; Undefined Instruction swivec: B swivec @; Software Interrupt pabtvec: B pabtvec @; Prefetch Abort dabtvec: B dabtvec @; Data Abort rsvdvec: #ifdef BOOT_IIC .long (TWI_EEPROM_SIZE >> 9) #else #ifdef BOOT_BWCT .long ((528 << 17) | (13 << 13) | (12 * 2)) #else .long ((1056 << 17) | (13 << 13) | (12 * 2)) #endif #endif irqvec: ldr pc, [pc,#-0xF20] @; IRQ : read the AIC fiqvec: B fiqvec @; FIQ InitReset: /* Set stack and init for SVC */ ldr r1, = SVC_STACK_START mov sp, r1 @; Init stack SYS msr cpsr_c, #(ARM_MODE_SVC | I_BIT | F_BIT) mov sp, r1 @ ; Init stack SYS /* Perform system initialization */ .extern _init bl _init #ifndef BOOT_BOOT0 ldr r1, = SVC_STACK_USE mov sp, r1 @ ; Move the stack to SDRAM #endif /* Start execution at main */ .extern main _main: __main: bl main /* main should not return. If it does, spin forever */ infiniteLoop: b infiniteLoop #ifdef BOOT_COMMANDS /* the following section is used to store boot commands in */ /* non-volatile memory. */ .global BootCommandSection BootCommandSection: #ifdef SUPPORT_LINUX .string "Bootloader for KB9202 Evaluation Board." .string "c 0x20210000 0x10100000 0x80000 " .string "m 0 0 0 0 0 0 " .string "t 0x20000100 console=ttyS0,115200 root=/dev/ram rw initrd=0x20210000,654933" .string "e 0x10000000 " .string " " #else #if 1 .string "m 42 53 44 0 0 1" .string "ip 206 168 13 194" .string "server_ip 206 168 13 207" .string "tftp 0x20000000 kernel.bin" .string "e 0x20000000" #else .string "m 42 53 44 0 0 1" .string "k 0x20000000" .string "e 0x20000000" #endif .word 0 #endif #endif