diff options
Diffstat (limited to 'arch/s390/kernel/base.S')
-rw-r--r-- | arch/s390/kernel/base.S | 61 |
1 files changed, 49 insertions, 12 deletions
diff --git a/arch/s390/kernel/base.S b/arch/s390/kernel/base.S index 15e46ca9433..255435663bf 100644 --- a/arch/s390/kernel/base.S +++ b/arch/s390/kernel/base.S | |||
@@ -6,13 +6,13 @@ | |||
6 | * Michael Holzheu <holzheu@de.ibm.com> | 6 | * Michael Holzheu <holzheu@de.ibm.com> |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include <linux/linkage.h> | ||
9 | #include <asm/asm-offsets.h> | 10 | #include <asm/asm-offsets.h> |
10 | #include <asm/ptrace.h> | 11 | #include <asm/ptrace.h> |
11 | 12 | ||
12 | #ifdef CONFIG_64BIT | 13 | #ifdef CONFIG_64BIT |
13 | 14 | ||
14 | .globl s390_base_mcck_handler | 15 | ENTRY(s390_base_mcck_handler) |
15 | s390_base_mcck_handler: | ||
16 | basr %r13,0 | 16 | basr %r13,0 |
17 | 0: lg %r15,__LC_PANIC_STACK # load panic stack | 17 | 0: lg %r15,__LC_PANIC_STACK # load panic stack |
18 | aghi %r15,-STACK_FRAME_OVERHEAD | 18 | aghi %r15,-STACK_FRAME_OVERHEAD |
@@ -26,13 +26,13 @@ s390_base_mcck_handler: | |||
26 | lpswe __LC_MCK_OLD_PSW | 26 | lpswe __LC_MCK_OLD_PSW |
27 | 27 | ||
28 | .section .bss | 28 | .section .bss |
29 | .align 8 | ||
29 | .globl s390_base_mcck_handler_fn | 30 | .globl s390_base_mcck_handler_fn |
30 | s390_base_mcck_handler_fn: | 31 | s390_base_mcck_handler_fn: |
31 | .quad 0 | 32 | .quad 0 |
32 | .previous | 33 | .previous |
33 | 34 | ||
34 | .globl s390_base_ext_handler | 35 | ENTRY(s390_base_ext_handler) |
35 | s390_base_ext_handler: | ||
36 | stmg %r0,%r15,__LC_SAVE_AREA | 36 | stmg %r0,%r15,__LC_SAVE_AREA |
37 | basr %r13,0 | 37 | basr %r13,0 |
38 | 0: aghi %r15,-STACK_FRAME_OVERHEAD | 38 | 0: aghi %r15,-STACK_FRAME_OVERHEAD |
@@ -46,13 +46,13 @@ s390_base_ext_handler: | |||
46 | lpswe __LC_EXT_OLD_PSW | 46 | lpswe __LC_EXT_OLD_PSW |
47 | 47 | ||
48 | .section .bss | 48 | .section .bss |
49 | .align 8 | ||
49 | .globl s390_base_ext_handler_fn | 50 | .globl s390_base_ext_handler_fn |
50 | s390_base_ext_handler_fn: | 51 | s390_base_ext_handler_fn: |
51 | .quad 0 | 52 | .quad 0 |
52 | .previous | 53 | .previous |
53 | 54 | ||
54 | .globl s390_base_pgm_handler | 55 | ENTRY(s390_base_pgm_handler) |
55 | s390_base_pgm_handler: | ||
56 | stmg %r0,%r15,__LC_SAVE_AREA | 56 | stmg %r0,%r15,__LC_SAVE_AREA |
57 | basr %r13,0 | 57 | basr %r13,0 |
58 | 0: aghi %r15,-STACK_FRAME_OVERHEAD | 58 | 0: aghi %r15,-STACK_FRAME_OVERHEAD |
@@ -70,15 +70,51 @@ disabled_wait_psw: | |||
70 | .quad 0x0002000180000000,0x0000000000000000 + s390_base_pgm_handler | 70 | .quad 0x0002000180000000,0x0000000000000000 + s390_base_pgm_handler |
71 | 71 | ||
72 | .section .bss | 72 | .section .bss |
73 | .align 8 | ||
73 | .globl s390_base_pgm_handler_fn | 74 | .globl s390_base_pgm_handler_fn |
74 | s390_base_pgm_handler_fn: | 75 | s390_base_pgm_handler_fn: |
75 | .quad 0 | 76 | .quad 0 |
76 | .previous | 77 | .previous |
77 | 78 | ||
79 | # | ||
80 | # Calls diag 308 subcode 1 and continues execution | ||
81 | # | ||
82 | # The following conditions must be ensured before calling this function: | ||
83 | # * Prefix register = 0 | ||
84 | # * Lowcore protection is disabled | ||
85 | # | ||
86 | ENTRY(diag308_reset) | ||
87 | larl %r4,.Lctlregs # Save control registers | ||
88 | stctg %c0,%c15,0(%r4) | ||
89 | larl %r4,.Lrestart_psw # Setup restart PSW at absolute 0 | ||
90 | lghi %r3,0 | ||
91 | lg %r4,0(%r4) # Save PSW | ||
92 | sturg %r4,%r3 # Use sturg, because of large pages | ||
93 | lghi %r1,1 | ||
94 | diag %r1,%r1,0x308 | ||
95 | .Lrestart_part2: | ||
96 | lhi %r0,0 # Load r0 with zero | ||
97 | lhi %r1,2 # Use mode 2 = ESAME (dump) | ||
98 | sigp %r1,%r0,0x12 # Switch to ESAME mode | ||
99 | sam64 # Switch to 64 bit addressing mode | ||
100 | larl %r4,.Lctlregs # Restore control registers | ||
101 | lctlg %c0,%c15,0(%r4) | ||
102 | br %r14 | ||
103 | .align 16 | ||
104 | .Lrestart_psw: | ||
105 | .long 0x00080000,0x80000000 + .Lrestart_part2 | ||
106 | |||
107 | .section .bss | ||
108 | .align 8 | ||
109 | .Lctlregs: | ||
110 | .rept 16 | ||
111 | .quad 0 | ||
112 | .endr | ||
113 | .previous | ||
114 | |||
78 | #else /* CONFIG_64BIT */ | 115 | #else /* CONFIG_64BIT */ |
79 | 116 | ||
80 | .globl s390_base_mcck_handler | 117 | ENTRY(s390_base_mcck_handler) |
81 | s390_base_mcck_handler: | ||
82 | basr %r13,0 | 118 | basr %r13,0 |
83 | 0: l %r15,__LC_PANIC_STACK # load panic stack | 119 | 0: l %r15,__LC_PANIC_STACK # load panic stack |
84 | ahi %r15,-STACK_FRAME_OVERHEAD | 120 | ahi %r15,-STACK_FRAME_OVERHEAD |
@@ -93,13 +129,13 @@ s390_base_mcck_handler: | |||
93 | 2: .long s390_base_mcck_handler_fn | 129 | 2: .long s390_base_mcck_handler_fn |
94 | 130 | ||
95 | .section .bss | 131 | .section .bss |
132 | .align 4 | ||
96 | .globl s390_base_mcck_handler_fn | 133 | .globl s390_base_mcck_handler_fn |
97 | s390_base_mcck_handler_fn: | 134 | s390_base_mcck_handler_fn: |
98 | .long 0 | 135 | .long 0 |
99 | .previous | 136 | .previous |
100 | 137 | ||
101 | .globl s390_base_ext_handler | 138 | ENTRY(s390_base_ext_handler) |
102 | s390_base_ext_handler: | ||
103 | stm %r0,%r15,__LC_SAVE_AREA | 139 | stm %r0,%r15,__LC_SAVE_AREA |
104 | basr %r13,0 | 140 | basr %r13,0 |
105 | 0: ahi %r15,-STACK_FRAME_OVERHEAD | 141 | 0: ahi %r15,-STACK_FRAME_OVERHEAD |
@@ -115,13 +151,13 @@ s390_base_ext_handler: | |||
115 | 2: .long s390_base_ext_handler_fn | 151 | 2: .long s390_base_ext_handler_fn |
116 | 152 | ||
117 | .section .bss | 153 | .section .bss |
154 | .align 4 | ||
118 | .globl s390_base_ext_handler_fn | 155 | .globl s390_base_ext_handler_fn |
119 | s390_base_ext_handler_fn: | 156 | s390_base_ext_handler_fn: |
120 | .long 0 | 157 | .long 0 |
121 | .previous | 158 | .previous |
122 | 159 | ||
123 | .globl s390_base_pgm_handler | 160 | ENTRY(s390_base_pgm_handler) |
124 | s390_base_pgm_handler: | ||
125 | stm %r0,%r15,__LC_SAVE_AREA | 161 | stm %r0,%r15,__LC_SAVE_AREA |
126 | basr %r13,0 | 162 | basr %r13,0 |
127 | 0: ahi %r15,-STACK_FRAME_OVERHEAD | 163 | 0: ahi %r15,-STACK_FRAME_OVERHEAD |
@@ -142,6 +178,7 @@ disabled_wait_psw: | |||
142 | .long 0x000a0000,0x00000000 + s390_base_pgm_handler | 178 | .long 0x000a0000,0x00000000 + s390_base_pgm_handler |
143 | 179 | ||
144 | .section .bss | 180 | .section .bss |
181 | .align 4 | ||
145 | .globl s390_base_pgm_handler_fn | 182 | .globl s390_base_pgm_handler_fn |
146 | s390_base_pgm_handler_fn: | 183 | s390_base_pgm_handler_fn: |
147 | .long 0 | 184 | .long 0 |