xref: /openbmc/linux/arch/xtensa/kernel/mxhead.S (revision f615136c06a791364f5afa8b8ba965315a6440f1)
1*f615136cSMax Filippov/*
2*f615136cSMax Filippov * Xtensa Secondary Processors startup code.
3*f615136cSMax Filippov *
4*f615136cSMax Filippov * This file is subject to the terms and conditions of the GNU General Public
5*f615136cSMax Filippov * License.  See the file "COPYING" in the main directory of this archive
6*f615136cSMax Filippov * for more details.
7*f615136cSMax Filippov *
8*f615136cSMax Filippov * Copyright (C) 2001 - 2013 Tensilica Inc.
9*f615136cSMax Filippov *
10*f615136cSMax Filippov * Joe Taylor <joe@tensilica.com>
11*f615136cSMax Filippov * Chris Zankel <chris@zankel.net>
12*f615136cSMax Filippov * Marc Gauthier <marc@tensilica.com, marc@alumni.uwaterloo.ca>
13*f615136cSMax Filippov * Pete Delaney <piet@tensilica.com>
14*f615136cSMax Filippov */
15*f615136cSMax Filippov
16*f615136cSMax Filippov#include <linux/linkage.h>
17*f615136cSMax Filippov
18*f615136cSMax Filippov#include <asm/cacheasm.h>
19*f615136cSMax Filippov#include <asm/initialize_mmu.h>
20*f615136cSMax Filippov#include <asm/mxregs.h>
21*f615136cSMax Filippov#include <asm/regs.h>
22*f615136cSMax Filippov
23*f615136cSMax Filippov
24*f615136cSMax Filippov	.section .SecondaryResetVector.text, "ax"
25*f615136cSMax Filippov
26*f615136cSMax Filippov
27*f615136cSMax FilippovENTRY(_SecondaryResetVector)
28*f615136cSMax Filippov	_j _SetupOCD
29*f615136cSMax Filippov
30*f615136cSMax Filippov	.begin  no-absolute-literals
31*f615136cSMax Filippov	.literal_position
32*f615136cSMax Filippov
33*f615136cSMax Filippov_SetupOCD:
34*f615136cSMax Filippov	/*
35*f615136cSMax Filippov	 * Initialize WB, WS, and clear PS.EXCM (to allow loop instructions).
36*f615136cSMax Filippov	 * Set Interrupt Level just below XCHAL_DEBUGLEVEL to allow
37*f615136cSMax Filippov	 * xt-gdb to single step via DEBUG exceptions received directly
38*f615136cSMax Filippov	 * by ocd.
39*f615136cSMax Filippov	 */
40*f615136cSMax Filippov	movi	a1, 1
41*f615136cSMax Filippov	movi	a0, 0
42*f615136cSMax Filippov	wsr	a1, windowstart
43*f615136cSMax Filippov	wsr	a0, windowbase
44*f615136cSMax Filippov	rsync
45*f615136cSMax Filippov
46*f615136cSMax Filippov	movi	a1, LOCKLEVEL
47*f615136cSMax Filippov	wsr	a1, ps
48*f615136cSMax Filippov	rsync
49*f615136cSMax Filippov
50*f615136cSMax Filippov_SetupMMU:
51*f615136cSMax Filippov	Offset = _SetupMMU - _SecondaryResetVector
52*f615136cSMax Filippov
53*f615136cSMax Filippov#ifdef CONFIG_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX
54*f615136cSMax Filippov	initialize_mmu
55*f615136cSMax Filippov#endif
56*f615136cSMax Filippov
57*f615136cSMax Filippov	/*
58*f615136cSMax Filippov	 * Start Secondary Processors with NULL pointer to boot params.
59*f615136cSMax Filippov	 */
60*f615136cSMax Filippov	movi	a2, 0				#  a2 == NULL
61*f615136cSMax Filippov	movi	a3, _startup
62*f615136cSMax Filippov	jx	a3
63*f615136cSMax Filippov
64*f615136cSMax Filippov	.end    no-absolute-literals
65*f615136cSMax Filippov
66*f615136cSMax Filippov
67*f615136cSMax Filippov	.section 	.SecondaryResetVector.remapped_text, "ax"
68*f615136cSMax Filippov	.global         _RemappedSecondaryResetVector
69*f615136cSMax Filippov
70*f615136cSMax Filippov	.org 0                                  # Need to do org before literals
71*f615136cSMax Filippov
72*f615136cSMax Filippov_RemappedSecondaryResetVector:
73*f615136cSMax Filippov	.begin  no-absolute-literals
74*f615136cSMax Filippov	.literal_position
75*f615136cSMax Filippov
76*f615136cSMax Filippov	_j      _RemappedSetupMMU
77*f615136cSMax Filippov	. = _RemappedSecondaryResetVector + Offset
78*f615136cSMax Filippov
79*f615136cSMax Filippov_RemappedSetupMMU:
80*f615136cSMax Filippov
81*f615136cSMax Filippov#ifdef CONFIG_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX
82*f615136cSMax Filippov	initialize_mmu
83*f615136cSMax Filippov#endif
84*f615136cSMax Filippov
85*f615136cSMax Filippov	.end    no-absolute-literals
86