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