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