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