xref: /linux/arch/alpha/boot/head.S (revision 498495dba268b20e8eadd7fe93c140c68b6cc9d2)
1*b2441318SGreg Kroah-Hartman/* SPDX-License-Identifier: GPL-2.0 */
21da177e4SLinus Torvalds/*
31da177e4SLinus Torvalds * arch/alpha/boot/head.S
41da177e4SLinus Torvalds *
51da177e4SLinus Torvalds * initial bootloader stuff..
61da177e4SLinus Torvalds */
71da177e4SLinus Torvalds
8c3d6b628SWill Deacon#include <asm/pal.h>
91da177e4SLinus Torvalds
101da177e4SLinus Torvalds	.set noreorder
111da177e4SLinus Torvalds	.globl	__start
121da177e4SLinus Torvalds	.ent	__start
131da177e4SLinus Torvalds__start:
141da177e4SLinus Torvalds	br	$29,2f
151da177e4SLinus Torvalds2:	ldgp	$29,0($29)
161da177e4SLinus Torvalds	jsr	$26,start_kernel
171da177e4SLinus Torvalds	call_pal PAL_halt
181da177e4SLinus Torvalds	.end __start
191da177e4SLinus Torvalds
201da177e4SLinus Torvalds	.align 5
211da177e4SLinus Torvalds	.globl	wrent
221da177e4SLinus Torvalds	.ent	wrent
231da177e4SLinus Torvaldswrent:
241da177e4SLinus Torvalds	.prologue 0
251da177e4SLinus Torvalds	call_pal PAL_wrent
261da177e4SLinus Torvalds	ret ($26)
271da177e4SLinus Torvalds	.end wrent
281da177e4SLinus Torvalds
291da177e4SLinus Torvalds	.align 5
301da177e4SLinus Torvalds	.globl	wrkgp
311da177e4SLinus Torvalds	.ent	wrkgp
321da177e4SLinus Torvaldswrkgp:
331da177e4SLinus Torvalds	.prologue 0
341da177e4SLinus Torvalds	call_pal PAL_wrkgp
351da177e4SLinus Torvalds	ret ($26)
361da177e4SLinus Torvalds	.end wrkgp
371da177e4SLinus Torvalds
381da177e4SLinus Torvalds	.align 5
391da177e4SLinus Torvalds	.globl	switch_to_osf_pal
401da177e4SLinus Torvalds	.ent	switch_to_osf_pal
411da177e4SLinus Torvaldsswitch_to_osf_pal:
421da177e4SLinus Torvalds	subq	$30,128,$30
431da177e4SLinus Torvalds	.frame	$30,128,$26
441da177e4SLinus Torvalds	stq	$26,0($30)
451da177e4SLinus Torvalds	stq	$1,8($30)
461da177e4SLinus Torvalds	stq	$2,16($30)
471da177e4SLinus Torvalds	stq	$3,24($30)
481da177e4SLinus Torvalds	stq	$4,32($30)
491da177e4SLinus Torvalds	stq	$5,40($30)
501da177e4SLinus Torvalds	stq	$6,48($30)
511da177e4SLinus Torvalds	stq	$7,56($30)
521da177e4SLinus Torvalds	stq	$8,64($30)
531da177e4SLinus Torvalds	stq	$9,72($30)
541da177e4SLinus Torvalds	stq	$10,80($30)
551da177e4SLinus Torvalds	stq	$11,88($30)
561da177e4SLinus Torvalds	stq	$12,96($30)
571da177e4SLinus Torvalds	stq	$13,104($30)
581da177e4SLinus Torvalds	stq	$14,112($30)
591da177e4SLinus Torvalds	stq	$15,120($30)
601da177e4SLinus Torvalds	.prologue 0
611da177e4SLinus Torvalds
621da177e4SLinus Torvalds	stq	$30,0($17)	/* save KSP in PCB */
631da177e4SLinus Torvalds
641da177e4SLinus Torvalds	bis	$30,$30,$20	/* a4 = KSP */
651da177e4SLinus Torvalds	br	$17,1f
661da177e4SLinus Torvalds
671da177e4SLinus Torvalds	ldq	$26,0($30)
681da177e4SLinus Torvalds	ldq	$1,8($30)
691da177e4SLinus Torvalds	ldq	$2,16($30)
701da177e4SLinus Torvalds	ldq	$3,24($30)
711da177e4SLinus Torvalds	ldq	$4,32($30)
721da177e4SLinus Torvalds	ldq	$5,40($30)
731da177e4SLinus Torvalds	ldq	$6,48($30)
741da177e4SLinus Torvalds	ldq	$7,56($30)
751da177e4SLinus Torvalds	ldq	$8,64($30)
761da177e4SLinus Torvalds	ldq	$9,72($30)
771da177e4SLinus Torvalds	ldq	$10,80($30)
781da177e4SLinus Torvalds	ldq	$11,88($30)
791da177e4SLinus Torvalds	ldq	$12,96($30)
801da177e4SLinus Torvalds	ldq	$13,104($30)
811da177e4SLinus Torvalds	ldq	$14,112($30)
821da177e4SLinus Torvalds	ldq	$15,120($30)
831da177e4SLinus Torvalds	addq	$30,128,$30
841da177e4SLinus Torvalds	ret ($26)
851da177e4SLinus Torvalds1:	call_pal PAL_swppal
861da177e4SLinus Torvalds	.end	switch_to_osf_pal
871da177e4SLinus Torvalds
881da177e4SLinus Torvalds	.align 3
891da177e4SLinus Torvalds	.globl	tbi
901da177e4SLinus Torvalds	.ent	tbi
911da177e4SLinus Torvaldstbi:
921da177e4SLinus Torvalds	.prologue 0
931da177e4SLinus Torvalds	call_pal PAL_tbi
941da177e4SLinus Torvalds	ret	($26)
951da177e4SLinus Torvalds	.end tbi
961da177e4SLinus Torvalds
971da177e4SLinus Torvalds	.align 3
981da177e4SLinus Torvalds	.globl	halt
991da177e4SLinus Torvalds	.ent	halt
1001da177e4SLinus Torvaldshalt:
1011da177e4SLinus Torvalds	.prologue 0
1021da177e4SLinus Torvalds	call_pal PAL_halt
1031da177e4SLinus Torvalds	.end halt
1041da177e4SLinus Torvalds
1051da177e4SLinus Torvalds/* $16 - new stack page */
1061da177e4SLinus Torvalds	.align 3
1071da177e4SLinus Torvalds	.globl	move_stack
1081da177e4SLinus Torvalds	.ent	move_stack
1091da177e4SLinus Torvaldsmove_stack:
1101da177e4SLinus Torvalds	.prologue 0
1111da177e4SLinus Torvalds	lda	$0, 0x1fff($31)
1121da177e4SLinus Torvalds	and	$0, $30, $1			/* Stack offset */
1131da177e4SLinus Torvalds	or	$1, $16, $16			/* New stack pointer */
1141da177e4SLinus Torvalds	mov	$30, $1
1151da177e4SLinus Torvalds	mov	$16, $2
1161da177e4SLinus Torvalds1:	ldq	$3, 0($1)			/* Move the stack */
1171da177e4SLinus Torvalds	addq	$1, 8, $1
1181da177e4SLinus Torvalds	stq	$3, 0($2)
1191da177e4SLinus Torvalds	and	$0, $1, $4
1201da177e4SLinus Torvalds	addq	$2, 8, $2
1211da177e4SLinus Torvalds	bne	$4, 1b
1221da177e4SLinus Torvalds	mov	$16, $30
1231da177e4SLinus Torvalds	ret	($26)
1241da177e4SLinus Torvalds	.end move_stack
125