/* SPDX-License-Identifier: GPL-2.0 *//* * arch/alpha/boot/head.S * * initial bootloader stuff.. */ #include <asm/pal.h> .set noreorder .globl __start .ent __start__start: br $29,2f2: ldgp $29,0($29) jsr $26,start_kernel call_pal PAL_halt .end __start .align 5 .globl wrent .ent wrentwrent: .prologue 0 call_pal PAL_wrent ret ($26) .end wrent .align 5 .globl wrkgp .ent wrkgpwrkgp: .prologue 0 call_pal PAL_wrkgp ret ($26) .end wrkgp .align 5 .globl switch_to_osf_pal .ent switch_to_osf_palswitch_to_osf_pal: subq $30,128,$30 .frame $30,128,$26 stq $26,0($30) stq $1,8($30) stq $2,16($30) stq $3,24($30) stq $4,32($30) stq $5,40($30) stq $6,48($30) stq $7,56($30) stq $8,64($30) stq $9,72($30) stq $10,80($30) stq $11,88($30) stq $12,96($30) stq $13,104($30) stq $14,112($30) stq $15,120($30) .prologue 0 stq $30,0($17) /* save KSP in PCB */ bis $30,$30,$20 /* a4 = KSP */ br $17,1f ldq $26,0($30) ldq $1,8($30) ldq $2,16($30) ldq $3,24($30) ldq $4,32($30) ldq $5,40($30) ldq $6,48($30) ldq $7,56($30) ldq $8,64($30) ldq $9,72($30) ldq $10,80($30) ldq $11,88($30) ldq $12,96($30) ldq $13,104($30) ldq $14,112($30) ldq $15,120($30) addq $30,128,$30 ret ($26)1: call_pal PAL_swppal .end switch_to_osf_pal .align 3 .globl tbi .ent tbitbi: .prologue 0 call_pal PAL_tbi ret ($26) .end tbi .align 3 .globl halt .ent halthalt: .prologue 0 call_pal PAL_halt .end halt /* $16 - new stack page */ .align 3 .globl move_stack .ent move_stackmove_stack: .prologue 0 lda $0, 0x1fff($31) and $0, $30, $1 /* Stack offset */ or $1, $16, $16 /* New stack pointer */ mov $30, $1 mov $16, $21: ldq $3, 0($1) /* Move the stack */ addq $1, 8, $1 stq $3, 0($2) and $0, $1, $4 addq $2, 8, $2 bne $4, 1b mov $16, $30 ret ($26) .end move_stack
/* SPDX-License-Identifier: GPL-2.0 */
/*
* arch/alpha/boot/head.S
*
* initial bootloader stuff..
*/
#include <asm/pal.h>
.set noreorder
.globl __start
.ent __start
__start:
br $29,2f
2: ldgp $29,0($29)
jsr $26,start_kernel
call_pal PAL_halt
.end __start
.align 5
.globl wrent
.ent wrent
wrent:
.prologue 0
call_pal PAL_wrent
ret ($26)
.end wrent
.align 5
.globl wrkgp
.ent wrkgp
wrkgp:
.prologue 0
call_pal PAL_wrkgp
ret ($26)
.end wrkgp
.align 5
.globl switch_to_osf_pal
.ent switch_to_osf_pal
switch_to_osf_pal:
subq $30,128,$30
.frame $30,128,$26
stq $26,0($30)
stq $1,8($30)
stq $2,16($30)
stq $3,24($30)
stq $4,32($30)
stq $5,40($30)
stq $6,48($30)
stq $7,56($30)
stq $8,64($30)
stq $9,72($30)
stq $10,80($30)
stq $11,88($30)
stq $12,96($30)
stq $13,104($30)
stq $14,112($30)
stq $15,120($30)
.prologue 0
stq $30,0($17) /* save KSP in PCB */
bis $30,$30,$20 /* a4 = KSP */
br $17,1f
ldq $26,0($30)
ldq $1,8($30)
ldq $2,16($30)
ldq $3,24($30)
ldq $4,32($30)
ldq $5,40($30)
ldq $6,48($30)
ldq $7,56($30)
ldq $8,64($30)
ldq $9,72($30)
ldq $10,80($30)
ldq $11,88($30)
ldq $12,96($30)
ldq $13,104($30)
ldq $14,112($30)
ldq $15,120($30)
addq $30,128,$30
ret ($26)
1: call_pal PAL_swppal
.end switch_to_osf_pal
.align 3
.globl tbi
.ent tbi
tbi:
.prologue 0
call_pal PAL_tbi
ret ($26)
.end tbi
.align 3
.globl halt
.ent halt
halt:
.prologue 0
call_pal PAL_halt
.end halt
/* $16 - new stack page */
.align 3
.globl move_stack
.ent move_stack
move_stack:
.prologue 0
lda $0, 0x1fff($31)
and $0, $30, $1 /* Stack offset */
or $1, $16, $16 /* New stack pointer */
mov $30, $1
mov $16, $2
1: ldq $3, 0($1) /* Move the stack */
addq $1, 8, $1
stq $3, 0($2)
and $0, $1, $4
addq $2, 8, $2
bne $4, 1b
mov $16, $30
ret ($26)
.end move_stack