mirror of
				https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
				synced 2025-10-31 09:36:25 +00:00 
			
		
		
		
	 92ca52343c
			
		
	
	
		92ca52343c
		
	
	
	
	
		
			
			This has the consequence of changing the section name use for head code from ".text.head" to ".head.text". Since this commit changes all users in the architecture, this change should be harmless. Signed-off-by: Tim Abbott <tabbott@mit.edu> Cc: Richard Henderson <rth@twiddle.net> Acked-by: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
		
			
				
	
	
		
			101 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			101 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| /*
 | |
|  * arch/alpha/kernel/head.S
 | |
|  *
 | |
|  * initial boot stuff.. At this point, the bootloader has already
 | |
|  * switched into OSF/1 PAL-code, and loaded us at the correct address
 | |
|  * (START_ADDR).  So there isn't much left for us to do: just set up
 | |
|  * the kernel global pointer and jump to the kernel entry-point.
 | |
|  */
 | |
| 
 | |
| #include <linux/init.h>
 | |
| #include <asm/system.h>
 | |
| #include <asm/asm-offsets.h>
 | |
| 
 | |
| __HEAD
 | |
| .globl swapper_pg_dir
 | |
| .globl _stext
 | |
| swapper_pg_dir=SWAPPER_PGD
 | |
| 
 | |
| 	.set noreorder
 | |
| 	.globl	__start
 | |
| 	.ent	__start
 | |
| _stext:
 | |
| __start:
 | |
| 	.prologue 0
 | |
| 	br	$27,1f
 | |
| 1:	ldgp	$29,0($27)
 | |
| 	/* We need to get current_task_info loaded up...  */
 | |
| 	lda	$8,init_thread_union
 | |
| 	/* ... and find our stack ... */
 | |
| 	lda	$30,0x4000 - SIZEOF_PT_REGS($8)
 | |
| 	/* ... and then we can start the kernel.  */
 | |
| 	jsr	$26,start_kernel
 | |
| 	call_pal PAL_halt
 | |
| 	.end __start
 | |
| 
 | |
| #ifdef CONFIG_SMP
 | |
| 	.align 3
 | |
| 	.globl	__smp_callin
 | |
| 	.ent	__smp_callin
 | |
| 	/* On entry here from SRM console, the HWPCB of the per-cpu
 | |
| 	   slot for this processor has been loaded.  We've arranged
 | |
| 	   for the UNIQUE value for this process to contain the PCBB
 | |
| 	   of the target idle task.  */
 | |
| __smp_callin:
 | |
| 	.prologue 1
 | |
| 	ldgp	$29,0($27)	# First order of business, load the GP.
 | |
| 
 | |
| 	call_pal PAL_rduniq	# Grab the target PCBB.
 | |
| 	mov	$0,$16		# Install it.
 | |
| 	call_pal PAL_swpctx
 | |
| 
 | |
| 	lda	$8,0x3fff	# Find "current".
 | |
| 	bic	$30,$8,$8
 | |
| 	
 | |
| 	jsr	$26,smp_callin
 | |
| 	call_pal PAL_halt
 | |
| 	.end __smp_callin
 | |
| #endif /* CONFIG_SMP */
 | |
| 
 | |
| 	#
 | |
| 	# The following two functions are needed for supporting SRM PALcode
 | |
| 	# on the PC164 (at least), since that PALcode manages the interrupt
 | |
| 	# masking, and we cannot duplicate the effort without causing problems
 | |
| 	#
 | |
| 
 | |
| 	.align 3
 | |
| 	.globl	cserve_ena
 | |
| 	.ent	cserve_ena
 | |
| cserve_ena:
 | |
| 	.prologue 0
 | |
| 	bis	$16,$16,$17
 | |
| 	lda	$16,52($31)
 | |
| 	call_pal PAL_cserve
 | |
| 	ret	($26)
 | |
| 	.end	cserve_ena
 | |
| 
 | |
| 	.align 3
 | |
| 	.globl	cserve_dis
 | |
| 	.ent	cserve_dis
 | |
| cserve_dis:
 | |
| 	.prologue 0
 | |
| 	bis	$16,$16,$17
 | |
| 	lda	$16,53($31)
 | |
| 	call_pal PAL_cserve
 | |
| 	ret	($26)
 | |
| 	.end	cserve_dis
 | |
| 
 | |
| 	#
 | |
| 	# It is handy, on occasion, to make halt actually just loop. 
 | |
| 	# Putting it here means we dont have to recompile the whole
 | |
| 	# kernel.
 | |
| 	#
 | |
| 
 | |
| 	.align 3
 | |
| 	.globl	halt
 | |
| 	.ent	halt
 | |
| halt:
 | |
| 	.prologue 0
 | |
| 	call_pal PAL_halt
 | |
| 	.end	halt
 |