51 lines
		
	
	
	
		
			1,016 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			51 lines
		
	
	
	
		
			1,016 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 */
							 |