mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-26 17:35:17 +07:00
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
|