Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland...
[linux-2.6] / arch / avr32 / kernel / head.S
1 /*
2  * Non-board-specific low-level startup code
3  *
4  * Copyright (C) 2004-2006 Atmel Corporation
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  */
10 #include <linux/linkage.h>
11
12 #include <asm/page.h>
13 #include <asm/thread_info.h>
14 #include <asm/sysreg.h>
15
16         .section .init.text,"ax"
17         .global kernel_entry
18 kernel_entry:
19         /* Initialize status register */
20         lddpc   r0, init_sr
21         mtsr    SYSREG_SR, r0
22
23         /* Set initial stack pointer */
24         lddpc   sp, stack_addr
25         sub     sp, -THREAD_SIZE
26
27 #ifdef CONFIG_FRAME_POINTER
28         /* Mark last stack frame */
29         mov     lr, 0
30         mov     r7, 0
31 #endif
32
33         /* Start the show */
34         lddpc   pc, kernel_start_addr
35
36         .align  2
37 init_sr:
38         .long   0x007f0000      /* Supervisor mode, everything masked */
39 stack_addr:
40         .long   init_thread_union
41 kernel_start_addr:
42         .long   start_kernel