Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
ab14de6c HC |
2 | /* |
3 | * arch/s390/kernel/base.S | |
4 | * | |
a53c8fab | 5 | * Copyright IBM Corp. 2006, 2007 |
ab14de6c HC |
6 | * Author(s): Heiko Carstens <heiko.carstens@de.ibm.com> |
7 | * Michael Holzheu <holzheu@de.ibm.com> | |
8 | */ | |
9 | ||
144d634a | 10 | #include <linux/linkage.h> |
cbb870c8 | 11 | #include <asm/asm-offsets.h> |
ab14de6c | 12 | #include <asm/ptrace.h> |
eb546195 | 13 | #include <asm/sigp.h> |
ab14de6c | 14 | |
144d634a | 15 | ENTRY(s390_base_mcck_handler) |
ab14de6c HC |
16 | basr %r13,0 |
17 | 0: lg %r15,__LC_PANIC_STACK # load panic stack | |
18 | aghi %r15,-STACK_FRAME_OVERHEAD | |
19 | larl %r1,s390_base_mcck_handler_fn | |
20 | lg %r1,0(%r1) | |
21 | ltgr %r1,%r1 | |
22 | jz 1f | |
23 | basr %r14,%r1 | |
24 | 1: la %r1,4095 | |
25 | lmg %r0,%r15,__LC_GPREGS_SAVE_AREA-4095(%r1) | |
26 | lpswe __LC_MCK_OLD_PSW | |
27 | ||
28 | .section .bss | |
144d634a | 29 | .align 8 |
ab14de6c HC |
30 | .globl s390_base_mcck_handler_fn |
31 | s390_base_mcck_handler_fn: | |
32 | .quad 0 | |
33 | .previous | |
34 | ||
144d634a | 35 | ENTRY(s390_base_ext_handler) |
c5328901 | 36 | stmg %r0,%r15,__LC_SAVE_AREA_ASYNC |
ab14de6c HC |
37 | basr %r13,0 |
38 | 0: aghi %r15,-STACK_FRAME_OVERHEAD | |
39 | larl %r1,s390_base_ext_handler_fn | |
40 | lg %r1,0(%r1) | |
41 | ltgr %r1,%r1 | |
42 | jz 1f | |
43 | basr %r14,%r1 | |
c5328901 | 44 | 1: lmg %r0,%r15,__LC_SAVE_AREA_ASYNC |
ab14de6c HC |
45 | ni __LC_EXT_OLD_PSW+1,0xfd # clear wait state bit |
46 | lpswe __LC_EXT_OLD_PSW | |
47 | ||
48 | .section .bss | |
144d634a | 49 | .align 8 |
ab14de6c HC |
50 | .globl s390_base_ext_handler_fn |
51 | s390_base_ext_handler_fn: | |
52 | .quad 0 | |
53 | .previous | |
54 | ||
144d634a | 55 | ENTRY(s390_base_pgm_handler) |
c5328901 | 56 | stmg %r0,%r15,__LC_SAVE_AREA_SYNC |
ab14de6c HC |
57 | basr %r13,0 |
58 | 0: aghi %r15,-STACK_FRAME_OVERHEAD | |
59 | larl %r1,s390_base_pgm_handler_fn | |
60 | lg %r1,0(%r1) | |
61 | ltgr %r1,%r1 | |
62 | jz 1f | |
63 | basr %r14,%r1 | |
c5328901 | 64 | lmg %r0,%r15,__LC_SAVE_AREA_SYNC |
ab14de6c HC |
65 | lpswe __LC_PGM_OLD_PSW |
66 | 1: lpswe disabled_wait_psw-0b(%r13) | |
67 | ||
68 | .align 8 | |
69 | disabled_wait_psw: | |
70 | .quad 0x0002000180000000,0x0000000000000000 + s390_base_pgm_handler | |
71 | ||
72 | .section .bss | |
144d634a | 73 | .align 8 |
ab14de6c HC |
74 | .globl s390_base_pgm_handler_fn |
75 | s390_base_pgm_handler_fn: | |
76 | .quad 0 | |
77 | .previous | |
78 | ||
9dc7356e MH |
79 | # |
80 | # Calls diag 308 subcode 1 and continues execution | |
81 | # | |
9dc7356e MH |
82 | ENTRY(diag308_reset) |
83 | larl %r4,.Lctlregs # Save control registers | |
84 | stctg %c0,%c15,0(%r4) | |
1592a8e4 MH |
85 | lg %r2,0(%r4) # Disable lowcore protection |
86 | nilh %r2,0xefff | |
87 | larl %r4,.Lctlreg0 | |
88 | stg %r2,0(%r4) | |
89 | lctlg %c0,%c0,0(%r4) | |
60a0c68d MH |
90 | larl %r4,.Lfpctl # Floating point control register |
91 | stfpc 0(%r4) | |
1592a8e4 MH |
92 | larl %r4,.Lprefix # Save prefix register |
93 | stpx 0(%r4) | |
94 | larl %r4,.Lprefix_zero # Set prefix register to 0 | |
95 | spx 0(%r4) | |
fa7c0043 MH |
96 | larl %r4,.Lcontinue_psw # Save PSW flags |
97 | epsw %r2,%r3 | |
98 | stm %r2,%r3,0(%r4) | |
9dc7356e MH |
99 | larl %r4,.Lrestart_psw # Setup restart PSW at absolute 0 |
100 | lghi %r3,0 | |
101 | lg %r4,0(%r4) # Save PSW | |
102 | sturg %r4,%r3 # Use sturg, because of large pages | |
103 | lghi %r1,1 | |
10ad34bc MS |
104 | lghi %r0,0 |
105 | diag %r0,%r1,0x308 | |
9dc7356e MH |
106 | .Lrestart_part2: |
107 | lhi %r0,0 # Load r0 with zero | |
108 | lhi %r1,2 # Use mode 2 = ESAME (dump) | |
eb546195 | 109 | sigp %r1,%r0,SIGP_SET_ARCHITECTURE # Switch to ESAME mode |
9dc7356e MH |
110 | sam64 # Switch to 64 bit addressing mode |
111 | larl %r4,.Lctlregs # Restore control registers | |
112 | lctlg %c0,%c15,0(%r4) | |
60a0c68d MH |
113 | larl %r4,.Lfpctl # Restore floating point ctl register |
114 | lfpc 0(%r4) | |
1592a8e4 MH |
115 | larl %r4,.Lprefix # Restore prefix register |
116 | spx 0(%r4) | |
fa7c0043 MH |
117 | larl %r4,.Lcontinue_psw # Restore PSW flags |
118 | lpswe 0(%r4) | |
119 | .Lcontinue: | |
9dc7356e MH |
120 | br %r14 |
121 | .align 16 | |
122 | .Lrestart_psw: | |
123 | .long 0x00080000,0x80000000 + .Lrestart_part2 | |
124 | ||
fa7c0043 MH |
125 | .section .data..nosave,"aw",@progbits |
126 | .align 8 | |
127 | .Lcontinue_psw: | |
128 | .quad 0,.Lcontinue | |
129 | .previous | |
130 | ||
9dc7356e MH |
131 | .section .bss |
132 | .align 8 | |
1592a8e4 MH |
133 | .Lctlreg0: |
134 | .quad 0 | |
9dc7356e MH |
135 | .Lctlregs: |
136 | .rept 16 | |
137 | .quad 0 | |
138 | .endr | |
60a0c68d MH |
139 | .Lfpctl: |
140 | .long 0 | |
1592a8e4 MH |
141 | .Lprefix: |
142 | .long 0 | |
143 | .Lprefix_zero: | |
144 | .long 0 | |
9dc7356e | 145 | .previous |