Linux-libre 5.4.49-gnu
[librecmc/linux-libre.git] / arch / xtensa / kernel / mxhead.S
1 /*
2  * Xtensa Secondary Processors startup code.
3  *
4  * This file is subject to the terms and conditions of the GNU General Public
5  * License.  See the file "COPYING" in the main directory of this archive
6  * for more details.
7  *
8  * Copyright (C) 2001 - 2013 Tensilica Inc.
9  *
10  * Joe Taylor <joe@tensilica.com>
11  * Chris Zankel <chris@zankel.net>
12  * Marc Gauthier <marc@tensilica.com, marc@alumni.uwaterloo.ca>
13  * Pete Delaney <piet@tensilica.com>
14  */
15
16 #include <linux/linkage.h>
17
18 #include <asm/cacheasm.h>
19 #include <asm/initialize_mmu.h>
20 #include <asm/mxregs.h>
21 #include <asm/regs.h>
22
23
24         .section .SecondaryResetVector.text, "ax"
25
26
27 ENTRY(_SecondaryResetVector)
28         _j _SetupOCD
29
30         .begin  no-absolute-literals
31         .literal_position
32
33 _SetupOCD:
34         /*
35          * Initialize WB, WS, and clear PS.EXCM (to allow loop instructions).
36          * Set Interrupt Level just below XCHAL_DEBUGLEVEL to allow
37          * xt-gdb to single step via DEBUG exceptions received directly
38          * by ocd.
39          */
40         movi    a1, 1
41         movi    a0, 0
42         wsr     a1, windowstart
43         wsr     a0, windowbase
44         rsync
45
46         movi    a1, LOCKLEVEL
47         wsr     a1, ps
48         rsync
49
50 _SetupMMU:
51 #ifdef CONFIG_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX
52         initialize_mmu
53 #endif
54
55         /*
56          * Start Secondary Processors with NULL pointer to boot params.
57          */
58         movi    a2, 0                           #  a2 == NULL
59         movi    a3, _startup
60         jx      a3
61
62         .end    no-absolute-literals