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