Merge tag 'iwlwifi-next-for-kalle-2014-12-30' of https://git.kernel.org/pub/scm/linux...
[cascardo/linux.git] / arch / xtensa / boot / boot-elf / bootstrap.S
1 /*
2  * arch/xtensa/boot/boot-elf/bootstrap.S
3  *
4  * Low-level exception handling
5  *
6  * This file is subject to the terms and conditions of the GNU General Public
7  * License.  See the file "COPYING" in the main directory of this archive
8  * for more details.
9  *
10  * Copyright (C) 2004 - 2013 by Tensilica Inc.
11  *
12  * Chris Zankel <chris@zankel.net>
13  * Marc Gauthier <marc@tensilica.com>
14  * Piet Delaney <piet@tensilica.com>
15  */
16
17 #include <asm/bootparam.h>
18 #include <asm/processor.h>
19 #include <asm/pgtable.h>
20 #include <asm/page.h>
21 #include <asm/cacheasm.h>
22 #include <asm/initialize_mmu.h>
23 #include <asm/vectors.h>
24 #include <linux/linkage.h>
25
26         .section        .ResetVector.text, "ax"
27         .global         _ResetVector
28         .global         reset
29
30 _ResetVector:
31         _j _SetupMMU
32
33         .begin  no-absolute-literals
34         .literal_position
35
36         .align 4
37 RomInitAddr:
38         .word   LOAD_MEMORY_ADDRESS
39 RomBootParam:
40         .word _bootparam
41 _bootparam:
42         .short  BP_TAG_FIRST
43         .short  4
44         .long   BP_VERSION
45         .short  BP_TAG_LAST
46         .short  0
47         .long   0
48
49         .align  4
50 _SetupMMU:
51         movi    a0, 0
52         wsr     a0, windowbase
53         rsync
54         movi    a0, 1
55         wsr     a0, windowstart
56         rsync
57         movi    a0, 0x1F
58         wsr     a0, ps
59         rsync
60
61         Offset = _SetupMMU - _ResetVector
62
63 #ifndef CONFIG_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX
64         initialize_mmu
65 #endif
66
67         .end    no-absolute-literals
68
69         rsil    a0, XCHAL_DEBUGLEVEL-1
70         rsync
71 reset:
72         l32r    a0, RomInitAddr
73         l32r    a2, RomBootParam
74         movi    a3, 0
75         movi    a4, 0
76         jx      a0
77
78 #ifdef CONFIG_MMU
79         .align 4
80
81         .section        .ResetVector.remapped_text, "x"
82         .global         _RemappedResetVector
83
84         /* Do org before literals */
85         .org 0
86
87 _RemappedResetVector:
88         .begin  no-absolute-literals
89         .literal_position
90
91         _j      _RemappedSetupMMU
92
93         /* Position Remapped code at the same location as the original code */
94         . = _RemappedResetVector + Offset
95
96 _RemappedSetupMMU:
97 #ifndef CONFIG_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX
98         initialize_mmu
99 #endif
100
101         .end    no-absolute-literals
102 #endif