1b2441318SGreg 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