blob: 06a7c95fe9ad05878678bc707ef63f02d1773867 [file] [log] [blame]
Greg Kroah-Hartmanb2441312017-11-01 15:07:57 +01001/* SPDX-License-Identifier: GPL-2.0 */
Linus Torvalds1da177e2005-04-16 15:20:36 -07002/*
3 * arch/alpha/boot/head.S
4 *
5 * initial bootloader stuff..
6 */
7
Will Deaconc3d6b622013-03-08 12:43:37 -08008#include <asm/pal.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -07009
10 .set noreorder
11 .globl __start
12 .ent __start
13__start:
14 br $29,2f
152: ldgp $29,0($29)
16 jsr $26,start_kernel
17 call_pal PAL_halt
18 .end __start
19
20 .align 5
21 .globl wrent
22 .ent wrent
23wrent:
24 .prologue 0
25 call_pal PAL_wrent
26 ret ($26)
27 .end wrent
28
29 .align 5
30 .globl wrkgp
31 .ent wrkgp
32wrkgp:
33 .prologue 0
34 call_pal PAL_wrkgp
35 ret ($26)
36 .end wrkgp
37
38 .align 5
39 .globl switch_to_osf_pal
40 .ent switch_to_osf_pal
41switch_to_osf_pal:
42 subq $30,128,$30
43 .frame $30,128,$26
44 stq $26,0($30)
45 stq $1,8($30)
46 stq $2,16($30)
47 stq $3,24($30)
48 stq $4,32($30)
49 stq $5,40($30)
50 stq $6,48($30)
51 stq $7,56($30)
52 stq $8,64($30)
53 stq $9,72($30)
54 stq $10,80($30)
55 stq $11,88($30)
56 stq $12,96($30)
57 stq $13,104($30)
58 stq $14,112($30)
59 stq $15,120($30)
60 .prologue 0
61
62 stq $30,0($17) /* save KSP in PCB */
63
64 bis $30,$30,$20 /* a4 = KSP */
65 br $17,1f
66
67 ldq $26,0($30)
68 ldq $1,8($30)
69 ldq $2,16($30)
70 ldq $3,24($30)
71 ldq $4,32($30)
72 ldq $5,40($30)
73 ldq $6,48($30)
74 ldq $7,56($30)
75 ldq $8,64($30)
76 ldq $9,72($30)
77 ldq $10,80($30)
78 ldq $11,88($30)
79 ldq $12,96($30)
80 ldq $13,104($30)
81 ldq $14,112($30)
82 ldq $15,120($30)
83 addq $30,128,$30
84 ret ($26)
851: call_pal PAL_swppal
86 .end switch_to_osf_pal
87
88 .align 3
89 .globl tbi
90 .ent tbi
91tbi:
92 .prologue 0
93 call_pal PAL_tbi
94 ret ($26)
95 .end tbi
96
97 .align 3
98 .globl halt
99 .ent halt
100halt:
101 .prologue 0
102 call_pal PAL_halt
103 .end halt
104
105/* $16 - new stack page */
106 .align 3
107 .globl move_stack
108 .ent move_stack
109move_stack:
110 .prologue 0
111 lda $0, 0x1fff($31)
112 and $0, $30, $1 /* Stack offset */
113 or $1, $16, $16 /* New stack pointer */
114 mov $30, $1
115 mov $16, $2
1161: ldq $3, 0($1) /* Move the stack */
117 addq $1, 8, $1
118 stq $3, 0($2)
119 and $0, $1, $4
120 addq $2, 8, $2
121 bne $4, 1b
122 mov $16, $30
123 ret ($26)
124 .end move_stack