Loading...
Note: File does not exist in v6.2.
1/*
2 * This file is subject to the terms and conditions of the GNU General Public
3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details.
5 *
6 * Copyright (C) 2013 Cavium, Inc
7 */
8#ifndef __ASM_MACH_PARAVIRT_KERNEL_ENTRY_H
9#define __ASM_MACH_PARAVIRT_KERNEL_ENTRY_H
10
11#define CP0_EBASE $15, 1
12
13 .macro kernel_entry_setup
14 mfc0 t0, CP0_EBASE
15 andi t0, t0, 0x3ff # CPUNum
16 beqz t0, 1f
17 # CPUs other than zero goto smp_bootstrap
18 j smp_bootstrap
19
201:
21 .endm
22
23/*
24 * Do SMP slave processor setup necessary before we can safely execute
25 * C code.
26 */
27 .macro smp_slave_setup
28 mfc0 t0, CP0_EBASE
29 andi t0, t0, 0x3ff # CPUNum
30 slti t1, t0, NR_CPUS
31 bnez t1, 1f
322:
33 di
34 wait
35 b 2b # Unknown CPU, loop forever.
361:
37 PTR_LA t1, paravirt_smp_sp
38 PTR_SLL t0, PTR_SCALESHIFT
39 PTR_ADDU t1, t1, t0
403:
41 PTR_L sp, 0(t1)
42 beqz sp, 3b # Spin until told to proceed.
43
44 PTR_LA t1, paravirt_smp_gp
45 PTR_ADDU t1, t1, t0
46 sync
47 PTR_L gp, 0(t1)
48 .endm
49
50#endif /* __ASM_MACH_PARAVIRT_KERNEL_ENTRY_H */