1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * arch/alpha/boot/head.S
4 *
5 * initial bootloader stuff..
6 */
7
8#include <asm/pal.h>
9
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
125