mirror of https://gitee.com/openkylin/linux.git
51 lines
1016 B
C
51 lines
1016 B
C
/*
|
|
* This file is subject to the terms and conditions of the GNU General Public
|
|
* License. See the file "COPYING" in the main directory of this archive
|
|
* for more details.
|
|
*
|
|
* Copyright (C) 2013 Cavium, Inc
|
|
*/
|
|
#ifndef __ASM_MACH_PARAVIRT_KERNEL_ENTRY_H
|
|
#define __ASM_MACH_PARAVIRT_KERNEL_ENTRY_H
|
|
|
|
#define CP0_EBASE $15, 1
|
|
|
|
.macro kernel_entry_setup
|
|
mfc0 t0, CP0_EBASE
|
|
andi t0, t0, 0x3ff # CPUNum
|
|
beqz t0, 1f
|
|
# CPUs other than zero goto smp_bootstrap
|
|
j smp_bootstrap
|
|
|
|
1:
|
|
.endm
|
|
|
|
/*
|
|
* Do SMP slave processor setup necessary before we can safely execute
|
|
* C code.
|
|
*/
|
|
.macro smp_slave_setup
|
|
mfc0 t0, CP0_EBASE
|
|
andi t0, t0, 0x3ff # CPUNum
|
|
slti t1, t0, NR_CPUS
|
|
bnez t1, 1f
|
|
2:
|
|
di
|
|
wait
|
|
b 2b # Unknown CPU, loop forever.
|
|
1:
|
|
PTR_LA t1, paravirt_smp_sp
|
|
PTR_SLL t0, PTR_SCALESHIFT
|
|
PTR_ADDU t1, t1, t0
|
|
3:
|
|
PTR_L sp, 0(t1)
|
|
beqz sp, 3b # Spin until told to proceed.
|
|
|
|
PTR_LA t1, paravirt_smp_gp
|
|
PTR_ADDU t1, t1, t0
|
|
sync
|
|
PTR_L gp, 0(t1)
|
|
.endm
|
|
|
|
#endif /* __ASM_MACH_PARAVIRT_KERNEL_ENTRY_H */
|