Blame view

kernel/linux-rt-4.4.41/arch/mips/include/asm/mach-paravirt/kernel-entry-init.h 1.03 KB
5113f6f70   김현기   kernel add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
  /*
   * 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
  #ifdef CONFIG_SMP
  	mfc0	t0, CP0_EBASE
  	andi	t0, t0, 0x3ff		# CPUNum
  	beqz	t0, 1f
  	# CPUs other than zero goto smp_bootstrap
  	j	smp_bootstrap
  #endif /* CONFIG_SMP */
  
  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 */