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