Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph...
[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 <linux/linkage.h>
24
25         .section        .ResetVector.text, "ax"
26         .global         _ResetVector
27         .global         reset
28
29 _ResetVector:
30         _j _SetupMMU
31
32         .begin  no-absolute-literals
33         .literal_position
34
35         .align 4
36 RomInitAddr:
37 #if defined(CONFIG_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX) && \
38         XCHAL_HAVE_PTP_MMU && XCHAL_HAVE_SPANNING_WAY
39         .word 0x00003000
40 #else
41         .word 0xd0003000
42 #endif
43 RomBootParam:
44         .word _bootparam
45 _bootparam:
46         .short  BP_TAG_FIRST
47         .short  4
48         .long   BP_VERSION
49         .short  BP_TAG_LAST
50         .short  0
51         .long   0
52
53         .align  4
54 _SetupMMU:
55         movi    a0, 0
56         wsr     a0, windowbase
57         rsync
58         movi    a0, 1
59         wsr     a0, windowstart
60         rsync
61         movi    a0, 0x1F
62         wsr     a0, ps
63         rsync
64
65         Offset = _SetupMMU - _ResetVector
66
67 #ifndef CONFIG_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX
68         initialize_mmu
69 #endif
70
71         .end    no-absolute-literals
72
73         rsil    a0, XCHAL_DEBUGLEVEL-1
74         rsync
75 reset:
76         l32r    a0, RomInitAddr
77         l32r    a2, RomBootParam
78         movi    a3, 0
79         movi    a4, 0
80         jx      a0
81
82         .align 4
83
84         .section        .ResetVector.remapped_text, "x"
85         .global         _RemappedResetVector
86
87         /* Do org before literals */
88         .org 0
89
90 _RemappedResetVector:
91         .begin  no-absolute-literals
92         .literal_position
93
94         _j      _RemappedSetupMMU
95
96         /* Position Remapped code at the same location as the original code */
97         . = _RemappedResetVector + Offset
98
99 _RemappedSetupMMU:
100 #ifndef CONFIG_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX
101         initialize_mmu
102 #endif
103
104         .end    no-absolute-literals