arm_init.S revision 164323
1/*******************************************************************************
2 *
3 * Filename: arm_init.s
4 *
5 * Initialization for C-environment and basic operation.  Adapted from
6 *  ATMEL cstartup.s.
7 *
8 * Revision information:
9 *
10 * 20AUG2004	kb_admin	initial creation
11 * 12JAN2005	kb_admin	updated for 16KB eeprom
12 *				Atmel stack prevents loading full size at once
13 *
14 * BEGIN_KBDD_BLOCK
15 * No warranty, expressed or implied, is included with this software.  It is
16 * provided "AS IS" and no warranty of any kind including statutory or aspects
17 * relating to merchantability or fitness for any purpose is provided.  All
18 * intellectual property rights of others is maintained with the respective
19 * owners.  This software is not copyrighted and is intended for reference
20 * only.
21 * END_BLOCK
22 *
23 * $FreeBSD: head/sys/boot/arm/at91/libat91/arm_init.S 164323 2006-11-16 00:53:28Z imp $
24 ******************************************************************************/
25
26	.equ	TWI_EEPROM_SIZE,	0x3000
27	.equ	ARM_MODE_USER,	0x10
28	.equ	ARM_MODE_FIQ,	0x11
29	.equ	ARM_MODE_IRQ,	0x12
30	.equ	ARM_MODE_SVC,	0x13
31	.equ	ARM_MODE_ABORT,	0x17
32	.equ	ARM_MODE_UNDEF,	0x1B
33	.equ	ARM_MODE_SYS,	0x1F
34	.equ	I_BIT,	0x80
35	.equ	F_BIT,	0x40
36	.equ	T_BIT,	0x20
37
38/*
39 * Stack definitions
40 *
41 * Start near top of internal RAM.
42 */
43	.equ	END_INT_SRAM,		0x4000
44	.equ	SVC_STACK_START,	(END_INT_SRAM - 0x4)
45	.equ	SVC_STACK_USE,		0x21800000
46
47start:
48
49/* vectors - must reside at address 0			*/
50/* the format of this table is defined in the datasheet	*/
51                B           InitReset       	@; reset
52undefvec:
53                B           undefvec        	@; Undefined Instruction
54swivec:
55                B           swivec          	@; Software Interrupt
56pabtvec:
57                B           pabtvec         	@; Prefetch Abort
58dabtvec:
59                B           dabtvec         	@; Data Abort
60rsvdvec:
61#ifdef BOOT_IIC
62		.long	(TWI_EEPROM_SIZE >> 9)
63#else
64		.long	((1056 << 17) | (13 << 13) | (12 * 2))
65#endif
66irqvec:
67                ldr         pc, [pc,#-0xF20]    @; IRQ : read the AIC
68fiqvec:
69                B           fiqvec          	@; FIQ
70
71InitReset:
72
73/* Set stack and init for SVC				*/
74	ldr	r1, = SVC_STACK_START
75	mov	sp, r1		@; Init stack SYS
76
77	msr     cpsr_c, #(ARM_MODE_SVC | I_BIT | F_BIT)
78	mov     sp, r1		@ ; Init stack SYS
79
80/* Perform system initialization				*/
81
82	.extern	_init
83	bl	_init
84#ifndef BOOT_BOOT0
85	ldr	r1, = SVC_STACK_USE
86	mov	sp, r1		@ ; Move the stack to SDRAM
87#endif
88
89/* Start execution at main					*/
90	.extern	main
91_main:
92__main:
93	bl	main
94/* main should not return.  If it does, spin forever		*/
95infiniteLoop:
96	b	infiniteLoop
97
98#ifdef BOOT_COMMANDS
99/* the following section is used to store boot commands in 	*/
100/*  non-volatile memory.					*/
101
102	.global BootCommandSection
103BootCommandSection:
104#ifdef SUPPORT_LINUX
105	.string "Bootloader for KB9202 Evaluation Board."
106	.string "c 0x20210000 0x10100000 0x80000        "
107	.string "m 0 0 0 0 0 0                          "
108	.string "t 0x20000100 console=ttyS0,115200 root=/dev/ram rw initrd=0x20210000,654933"
109	.string "e 0x10000000                           "
110	.string "                 "
111#else
112#if 1
113	.string "m 42 53 44 0 0 1"
114	.string "ip 206 168 13 194"
115	.string "server_ip 206 168 13 207"
116	.string "tftp 0x20000000 kernel.bin"
117	.string "e 0x20000000"
118#else
119	.string "m 42 53 44 0 0 1"
120	.string "k 0x20000000"
121	.string "e 0x20000000"
122#endif
123	.word	0
124#endif
125#endif
126