xref: /OK3568_Linux_fs/kernel/arch/xtensa/boot/boot-elf/bootstrap.S (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun/*
2*4882a593Smuzhiyun * arch/xtensa/boot/boot-elf/bootstrap.S
3*4882a593Smuzhiyun *
4*4882a593Smuzhiyun * Low-level exception handling
5*4882a593Smuzhiyun *
6*4882a593Smuzhiyun * This file is subject to the terms and conditions of the GNU General Public
7*4882a593Smuzhiyun * License.  See the file "COPYING" in the main directory of this archive
8*4882a593Smuzhiyun * for more details.
9*4882a593Smuzhiyun *
10*4882a593Smuzhiyun * Copyright (C) 2004 - 2013 by Tensilica Inc.
11*4882a593Smuzhiyun *
12*4882a593Smuzhiyun * Chris Zankel <chris@zankel.net>
13*4882a593Smuzhiyun * Marc Gauthier <marc@tensilica.com>
14*4882a593Smuzhiyun * Piet Delaney <piet@tensilica.com>
15*4882a593Smuzhiyun */
16*4882a593Smuzhiyun
17*4882a593Smuzhiyun#include <asm/bootparam.h>
18*4882a593Smuzhiyun#include <asm/initialize_mmu.h>
19*4882a593Smuzhiyun#include <asm/vectors.h>
20*4882a593Smuzhiyun#include <linux/linkage.h>
21*4882a593Smuzhiyun
22*4882a593Smuzhiyun	.section	.ResetVector.text, "ax"
23*4882a593Smuzhiyun	.global         _ResetVector
24*4882a593Smuzhiyun	.global         reset
25*4882a593Smuzhiyun
26*4882a593Smuzhiyun_ResetVector:
27*4882a593Smuzhiyun	_j _SetupMMU
28*4882a593Smuzhiyun
29*4882a593Smuzhiyun	.begin  no-absolute-literals
30*4882a593Smuzhiyun	.literal_position
31*4882a593Smuzhiyun
32*4882a593Smuzhiyun#ifdef CONFIG_PARSE_BOOTPARAM
33*4882a593Smuzhiyun	.align 4
34*4882a593Smuzhiyun_bootparam:
35*4882a593Smuzhiyun	.short	BP_TAG_FIRST
36*4882a593Smuzhiyun	.short	4
37*4882a593Smuzhiyun	.long	BP_VERSION
38*4882a593Smuzhiyun	.short	BP_TAG_LAST
39*4882a593Smuzhiyun	.short	0
40*4882a593Smuzhiyun	.long	0
41*4882a593Smuzhiyun#endif
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun	.align  4
44*4882a593Smuzhiyun_SetupMMU:
45*4882a593Smuzhiyun	movi	a0, 0
46*4882a593Smuzhiyun	wsr	a0, windowbase
47*4882a593Smuzhiyun	rsync
48*4882a593Smuzhiyun	movi	a0, 1
49*4882a593Smuzhiyun	wsr	a0, windowstart
50*4882a593Smuzhiyun	rsync
51*4882a593Smuzhiyun	movi	a0, 0x1F
52*4882a593Smuzhiyun	wsr	a0, ps
53*4882a593Smuzhiyun	rsync
54*4882a593Smuzhiyun
55*4882a593Smuzhiyun#ifndef CONFIG_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX
56*4882a593Smuzhiyun	initialize_mmu
57*4882a593Smuzhiyun#endif
58*4882a593Smuzhiyun
59*4882a593Smuzhiyun	rsil    a0, XCHAL_DEBUGLEVEL-1
60*4882a593Smuzhiyun	rsync
61*4882a593Smuzhiyunreset:
62*4882a593Smuzhiyun#if defined(CONFIG_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX) && \
63*4882a593Smuzhiyun	XCHAL_HAVE_PTP_MMU && XCHAL_HAVE_SPANNING_WAY
64*4882a593Smuzhiyun	movi	a0, CONFIG_KERNEL_LOAD_ADDRESS
65*4882a593Smuzhiyun#else
66*4882a593Smuzhiyun	movi	a0, KERNELOFFSET
67*4882a593Smuzhiyun#endif
68*4882a593Smuzhiyun#ifdef CONFIG_PARSE_BOOTPARAM
69*4882a593Smuzhiyun	movi	a2, _bootparam
70*4882a593Smuzhiyun#else
71*4882a593Smuzhiyun	movi	a2, 0
72*4882a593Smuzhiyun#endif
73*4882a593Smuzhiyun	movi	a3, 0
74*4882a593Smuzhiyun	movi	a4, 0
75*4882a593Smuzhiyun	jx      a0
76*4882a593Smuzhiyun
77*4882a593Smuzhiyun	.end    no-absolute-literals
78