1 /* SPDX-License-Identifier: GPL-2.0 */ << 2 /* 1 /* 3 * arch/alpha/kernel/head.S 2 * arch/alpha/kernel/head.S 4 * 3 * 5 * initial boot stuff.. At this point, the boo 4 * initial boot stuff.. At this point, the bootloader has already 6 * switched into OSF/1 PAL-code, and loaded us 5 * switched into OSF/1 PAL-code, and loaded us at the correct address 7 * (START_ADDR). So there isn't much left for 6 * (START_ADDR). So there isn't much left for us to do: just set up 8 * the kernel global pointer and jump to the k 7 * the kernel global pointer and jump to the kernel entry-point. 9 */ 8 */ 10 9 11 #include <linux/init.h> 10 #include <linux/init.h> >> 11 #include <asm/system.h> 12 #include <asm/asm-offsets.h> 12 #include <asm/asm-offsets.h> 13 #include <asm/pal.h> << 14 #include <asm/setup.h> << 15 13 16 __HEAD 14 __HEAD >> 15 .globl swapper_pg_dir 17 .globl _stext 16 .globl _stext >> 17 swapper_pg_dir=SWAPPER_PGD >> 18 18 .set noreorder 19 .set noreorder 19 .globl __start 20 .globl __start 20 .ent __start 21 .ent __start 21 _stext: 22 _stext: 22 __start: 23 __start: 23 .prologue 0 24 .prologue 0 24 br $27,1f 25 br $27,1f 25 1: ldgp $29,0($27) 26 1: ldgp $29,0($27) 26 /* We need to get current_task_info lo 27 /* We need to get current_task_info loaded up... */ 27 lda $8,init_thread_union 28 lda $8,init_thread_union 28 /* ... and find our stack ... */ 29 /* ... and find our stack ... */ 29 lda $30,0x4000 - SIZEOF_PT_REGS($8 30 lda $30,0x4000 - SIZEOF_PT_REGS($8) 30 /* ... and then we can start the kerne 31 /* ... and then we can start the kernel. */ 31 jsr $26,start_kernel 32 jsr $26,start_kernel 32 call_pal PAL_halt 33 call_pal PAL_halt 33 .end __start 34 .end __start 34 35 35 #ifdef CONFIG_SMP 36 #ifdef CONFIG_SMP 36 .align 3 37 .align 3 37 .globl __smp_callin 38 .globl __smp_callin 38 .ent __smp_callin 39 .ent __smp_callin 39 /* On entry here from SRM console, the 40 /* On entry here from SRM console, the HWPCB of the per-cpu 40 slot for this processor has been lo 41 slot for this processor has been loaded. We've arranged 41 for the UNIQUE value for this proce 42 for the UNIQUE value for this process to contain the PCBB 42 of the target idle task. */ 43 of the target idle task. */ 43 __smp_callin: 44 __smp_callin: 44 .prologue 1 45 .prologue 1 45 ldgp $29,0($27) # First order 46 ldgp $29,0($27) # First order of business, load the GP. 46 47 47 call_pal PAL_rduniq # Grab the tar 48 call_pal PAL_rduniq # Grab the target PCBB. 48 mov $0,$16 # Install it. 49 mov $0,$16 # Install it. 49 call_pal PAL_swpctx 50 call_pal PAL_swpctx 50 51 51 lda $8,0x3fff # Find "curren 52 lda $8,0x3fff # Find "current". 52 bic $30,$8,$8 53 bic $30,$8,$8 53 54 54 jsr $26,smp_callin 55 jsr $26,smp_callin 55 call_pal PAL_halt 56 call_pal PAL_halt 56 .end __smp_callin 57 .end __smp_callin 57 #endif /* CONFIG_SMP */ 58 #endif /* CONFIG_SMP */ 58 59 59 # 60 # 60 # The following two functions are need 61 # The following two functions are needed for supporting SRM PALcode 61 # on the PC164 (at least), since that 62 # on the PC164 (at least), since that PALcode manages the interrupt 62 # masking, and we cannot duplicate the 63 # masking, and we cannot duplicate the effort without causing problems 63 # 64 # 64 65 65 .align 3 66 .align 3 66 .globl cserve_ena 67 .globl cserve_ena 67 .ent cserve_ena 68 .ent cserve_ena 68 cserve_ena: 69 cserve_ena: 69 .prologue 0 70 .prologue 0 70 bis $16,$16,$17 71 bis $16,$16,$17 71 lda $16,52($31) 72 lda $16,52($31) 72 call_pal PAL_cserve 73 call_pal PAL_cserve 73 ret ($26) 74 ret ($26) 74 .end cserve_ena 75 .end cserve_ena 75 76 76 .align 3 77 .align 3 77 .globl cserve_dis 78 .globl cserve_dis 78 .ent cserve_dis 79 .ent cserve_dis 79 cserve_dis: 80 cserve_dis: 80 .prologue 0 81 .prologue 0 81 bis $16,$16,$17 82 bis $16,$16,$17 82 lda $16,53($31) 83 lda $16,53($31) 83 call_pal PAL_cserve 84 call_pal PAL_cserve 84 ret ($26) 85 ret ($26) 85 .end cserve_dis 86 .end cserve_dis 86 87 87 # 88 # 88 # It is handy, on occasion, to make ha 89 # It is handy, on occasion, to make halt actually just loop. 89 # Putting it here means we dont have t 90 # Putting it here means we dont have to recompile the whole 90 # kernel. 91 # kernel. 91 # 92 # 92 93 93 .align 3 94 .align 3 94 .globl halt 95 .globl halt 95 .ent halt 96 .ent halt 96 halt: 97 halt: 97 .prologue 0 98 .prologue 0 98 call_pal PAL_halt 99 call_pal PAL_halt 99 .end halt 100 .end halt
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.