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/initialize_mmu.h>
19 #include <asm/vectors.h>
20 #include <linux/linkage.h>
21 
22 	.section	.ResetVector.text, "ax"
23 	.global         _ResetVector
24 	.global         reset
25 
26 _ResetVector:
27 	_j _SetupMMU
28 
29 	.begin  no-absolute-literals
30 	.literal_position
31 
32 #ifdef CONFIG_PARSE_BOOTPARAM
33 	.align 4
34 _bootparam:
35 	.short	BP_TAG_FIRST
36 	.short	4
37 	.long	BP_VERSION
38 	.short	BP_TAG_LAST
39 	.short	0
40 	.long	0
41 #endif
42 
43 	.align  4
44 _SetupMMU:
45 	movi	a0, 0
46 	wsr	a0, windowbase
47 	rsync
48 	movi	a0, 1
49 	wsr	a0, windowstart
50 	rsync
51 	movi	a0, 0x1F
52 	wsr	a0, ps
53 	rsync
54 
55 #ifndef CONFIG_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX
56 	initialize_mmu
57 #endif
58 
59 	rsil    a0, XCHAL_DEBUGLEVEL-1
60 	rsync
61 reset:
62 #if defined(CONFIG_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX) && \
63 	XCHAL_HAVE_PTP_MMU && XCHAL_HAVE_SPANNING_WAY
64 	movi	a0, CONFIG_KERNEL_LOAD_ADDRESS
65 #else
66 	movi	a0, KERNELOFFSET
67 #endif
68 #ifdef CONFIG_PARSE_BOOTPARAM
69 	movi	a2, _bootparam
70 #else
71 	movi	a2, 0
72 #endif
73 	movi	a3, 0
74 	movi	a4, 0
75 	jx      a0
76 
77 	.end    no-absolute-literals
78