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