18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * arch/alpha/boot/head.S 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * initial bootloader stuff.. 68c2ecf20Sopenharmony_ci */ 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci#include <asm/pal.h> 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci .set noreorder 118c2ecf20Sopenharmony_ci .globl __start 128c2ecf20Sopenharmony_ci .ent __start 138c2ecf20Sopenharmony_ci__start: 148c2ecf20Sopenharmony_ci br $29,2f 158c2ecf20Sopenharmony_ci2: ldgp $29,0($29) 168c2ecf20Sopenharmony_ci jsr $26,start_kernel 178c2ecf20Sopenharmony_ci call_pal PAL_halt 188c2ecf20Sopenharmony_ci .end __start 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ci .align 5 218c2ecf20Sopenharmony_ci .globl wrent 228c2ecf20Sopenharmony_ci .ent wrent 238c2ecf20Sopenharmony_ciwrent: 248c2ecf20Sopenharmony_ci .prologue 0 258c2ecf20Sopenharmony_ci call_pal PAL_wrent 268c2ecf20Sopenharmony_ci ret ($26) 278c2ecf20Sopenharmony_ci .end wrent 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ci .align 5 308c2ecf20Sopenharmony_ci .globl wrkgp 318c2ecf20Sopenharmony_ci .ent wrkgp 328c2ecf20Sopenharmony_ciwrkgp: 338c2ecf20Sopenharmony_ci .prologue 0 348c2ecf20Sopenharmony_ci call_pal PAL_wrkgp 358c2ecf20Sopenharmony_ci ret ($26) 368c2ecf20Sopenharmony_ci .end wrkgp 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_ci .align 5 398c2ecf20Sopenharmony_ci .globl switch_to_osf_pal 408c2ecf20Sopenharmony_ci .ent switch_to_osf_pal 418c2ecf20Sopenharmony_ciswitch_to_osf_pal: 428c2ecf20Sopenharmony_ci subq $30,128,$30 438c2ecf20Sopenharmony_ci .frame $30,128,$26 448c2ecf20Sopenharmony_ci stq $26,0($30) 458c2ecf20Sopenharmony_ci stq $1,8($30) 468c2ecf20Sopenharmony_ci stq $2,16($30) 478c2ecf20Sopenharmony_ci stq $3,24($30) 488c2ecf20Sopenharmony_ci stq $4,32($30) 498c2ecf20Sopenharmony_ci stq $5,40($30) 508c2ecf20Sopenharmony_ci stq $6,48($30) 518c2ecf20Sopenharmony_ci stq $7,56($30) 528c2ecf20Sopenharmony_ci stq $8,64($30) 538c2ecf20Sopenharmony_ci stq $9,72($30) 548c2ecf20Sopenharmony_ci stq $10,80($30) 558c2ecf20Sopenharmony_ci stq $11,88($30) 568c2ecf20Sopenharmony_ci stq $12,96($30) 578c2ecf20Sopenharmony_ci stq $13,104($30) 588c2ecf20Sopenharmony_ci stq $14,112($30) 598c2ecf20Sopenharmony_ci stq $15,120($30) 608c2ecf20Sopenharmony_ci .prologue 0 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_ci stq $30,0($17) /* save KSP in PCB */ 638c2ecf20Sopenharmony_ci 648c2ecf20Sopenharmony_ci bis $30,$30,$20 /* a4 = KSP */ 658c2ecf20Sopenharmony_ci br $17,1f 668c2ecf20Sopenharmony_ci 678c2ecf20Sopenharmony_ci ldq $26,0($30) 688c2ecf20Sopenharmony_ci ldq $1,8($30) 698c2ecf20Sopenharmony_ci ldq $2,16($30) 708c2ecf20Sopenharmony_ci ldq $3,24($30) 718c2ecf20Sopenharmony_ci ldq $4,32($30) 728c2ecf20Sopenharmony_ci ldq $5,40($30) 738c2ecf20Sopenharmony_ci ldq $6,48($30) 748c2ecf20Sopenharmony_ci ldq $7,56($30) 758c2ecf20Sopenharmony_ci ldq $8,64($30) 768c2ecf20Sopenharmony_ci ldq $9,72($30) 778c2ecf20Sopenharmony_ci ldq $10,80($30) 788c2ecf20Sopenharmony_ci ldq $11,88($30) 798c2ecf20Sopenharmony_ci ldq $12,96($30) 808c2ecf20Sopenharmony_ci ldq $13,104($30) 818c2ecf20Sopenharmony_ci ldq $14,112($30) 828c2ecf20Sopenharmony_ci ldq $15,120($30) 838c2ecf20Sopenharmony_ci addq $30,128,$30 848c2ecf20Sopenharmony_ci ret ($26) 858c2ecf20Sopenharmony_ci1: call_pal PAL_swppal 868c2ecf20Sopenharmony_ci .end switch_to_osf_pal 878c2ecf20Sopenharmony_ci 888c2ecf20Sopenharmony_ci .align 3 898c2ecf20Sopenharmony_ci .globl tbi 908c2ecf20Sopenharmony_ci .ent tbi 918c2ecf20Sopenharmony_citbi: 928c2ecf20Sopenharmony_ci .prologue 0 938c2ecf20Sopenharmony_ci call_pal PAL_tbi 948c2ecf20Sopenharmony_ci ret ($26) 958c2ecf20Sopenharmony_ci .end tbi 968c2ecf20Sopenharmony_ci 978c2ecf20Sopenharmony_ci .align 3 988c2ecf20Sopenharmony_ci .globl halt 998c2ecf20Sopenharmony_ci .ent halt 1008c2ecf20Sopenharmony_cihalt: 1018c2ecf20Sopenharmony_ci .prologue 0 1028c2ecf20Sopenharmony_ci call_pal PAL_halt 1038c2ecf20Sopenharmony_ci .end halt 1048c2ecf20Sopenharmony_ci 1058c2ecf20Sopenharmony_ci/* $16 - new stack page */ 1068c2ecf20Sopenharmony_ci .align 3 1078c2ecf20Sopenharmony_ci .globl move_stack 1088c2ecf20Sopenharmony_ci .ent move_stack 1098c2ecf20Sopenharmony_cimove_stack: 1108c2ecf20Sopenharmony_ci .prologue 0 1118c2ecf20Sopenharmony_ci lda $0, 0x1fff($31) 1128c2ecf20Sopenharmony_ci and $0, $30, $1 /* Stack offset */ 1138c2ecf20Sopenharmony_ci or $1, $16, $16 /* New stack pointer */ 1148c2ecf20Sopenharmony_ci mov $30, $1 1158c2ecf20Sopenharmony_ci mov $16, $2 1168c2ecf20Sopenharmony_ci1: ldq $3, 0($1) /* Move the stack */ 1178c2ecf20Sopenharmony_ci addq $1, 8, $1 1188c2ecf20Sopenharmony_ci stq $3, 0($2) 1198c2ecf20Sopenharmony_ci and $0, $1, $4 1208c2ecf20Sopenharmony_ci addq $2, 8, $2 1218c2ecf20Sopenharmony_ci bne $4, 1b 1228c2ecf20Sopenharmony_ci mov $16, $30 1238c2ecf20Sopenharmony_ci ret ($26) 1248c2ecf20Sopenharmony_ci .end move_stack 125