diff options
-rw-r--r-- | arch/s390/kernel/head.S | 87 |
1 files changed, 8 insertions, 79 deletions
diff --git a/arch/s390/kernel/head.S b/arch/s390/kernel/head.S index 1b0f624cebd7..301ee9c70688 100644 --- a/arch/s390/kernel/head.S +++ b/arch/s390/kernel/head.S | |||
@@ -60,19 +60,6 @@ __HEAD | |||
60 | .long 0x020006e0,0x20000050 | 60 | .long 0x020006e0,0x20000050 |
61 | 61 | ||
62 | .org 0x200 | 62 | .org 0x200 |
63 | # | ||
64 | # subroutine to set architecture mode | ||
65 | # | ||
66 | .Lsetmode: | ||
67 | mvi __LC_AR_MODE_ID,1 # set esame flag | ||
68 | slr %r0,%r0 # set cpuid to zero | ||
69 | lhi %r1,2 # mode 2 = esame (dump) | ||
70 | sigp %r1,%r0,0x12 # switch to esame mode | ||
71 | bras %r13,0f | ||
72 | .fill 16,4,0x0 | ||
73 | 0: lmh %r0,%r15,0(%r13) # clear high-order half of gprs | ||
74 | sam31 # switch to 31 bit addressing mode | ||
75 | br %r14 | ||
76 | 63 | ||
77 | # | 64 | # |
78 | # subroutine to wait for end I/O | 65 | # subroutine to wait for end I/O |
@@ -160,7 +147,14 @@ __HEAD | |||
160 | .long 0x02200050,0x00000000 | 147 | .long 0x02200050,0x00000000 |
161 | 148 | ||
162 | iplstart: | 149 | iplstart: |
163 | bas %r14,.Lsetmode # Immediately switch to 64 bit mode | 150 | mvi __LC_AR_MODE_ID,1 # set esame flag |
151 | slr %r0,%r0 # set cpuid to zero | ||
152 | lhi %r1,2 # mode 2 = esame (dump) | ||
153 | sigp %r1,%r0,0x12 # switch to esame mode | ||
154 | bras %r13,0f | ||
155 | .fill 16,4,0x0 | ||
156 | 0: lmh %r0,%r15,0(%r13) # clear high-order half of gprs | ||
157 | sam31 # switch to 31 bit addressing mode | ||
164 | lh %r1,0xb8 # test if subchannel number | 158 | lh %r1,0xb8 # test if subchannel number |
165 | bct %r1,.Lnoload # is valid | 159 | bct %r1,.Lnoload # is valid |
166 | l %r1,0xb8 # load ipl subchannel number | 160 | l %r1,0xb8 # load ipl subchannel number |
@@ -270,71 +264,6 @@ iplstart: | |||
270 | .Lcpuid:.fill 8,1,0 | 264 | .Lcpuid:.fill 8,1,0 |
271 | 265 | ||
272 | # | 266 | # |
273 | # SALIPL loader support. Based on a patch by Rob van der Heij. | ||
274 | # This entry point is called directly from the SALIPL loader and | ||
275 | # doesn't need a builtin ipl record. | ||
276 | # | ||
277 | .org 0x800 | ||
278 | ENTRY(start) | ||
279 | stm %r0,%r15,0x07b0 # store registers | ||
280 | bas %r14,.Lsetmode # Immediately switch to 64 bit mode | ||
281 | basr %r12,%r0 | ||
282 | .base: | ||
283 | l %r11,.parm | ||
284 | l %r8,.cmd # pointer to command buffer | ||
285 | |||
286 | ltr %r9,%r9 # do we have SALIPL parameters? | ||
287 | bp .sk8x8 | ||
288 | |||
289 | mvc 0(64,%r8),0x00b0 # copy saved registers | ||
290 | xc 64(240-64,%r8),0(%r8) # remainder of buffer | ||
291 | tr 0(64,%r8),.lowcase | ||
292 | b .gotr | ||
293 | .sk8x8: | ||
294 | mvc 0(240,%r8),0(%r9) # copy iplparms into buffer | ||
295 | .gotr: | ||
296 | slr %r0,%r0 | ||
297 | st %r0,INITRD_SIZE+ARCH_OFFSET-PARMAREA(%r11) | ||
298 | st %r0,INITRD_START+ARCH_OFFSET-PARMAREA(%r11) | ||
299 | j startup # continue with startup | ||
300 | .cmd: .long COMMAND_LINE # address of command line buffer | ||
301 | .parm: .long PARMAREA | ||
302 | .lowcase: | ||
303 | .byte 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07 | ||
304 | .byte 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f | ||
305 | .byte 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17 | ||
306 | .byte 0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f | ||
307 | .byte 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27 | ||
308 | .byte 0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f | ||
309 | .byte 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37 | ||
310 | .byte 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f | ||
311 | .byte 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47 | ||
312 | .byte 0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f | ||
313 | .byte 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57 | ||
314 | .byte 0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f | ||
315 | .byte 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67 | ||
316 | .byte 0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f | ||
317 | .byte 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77 | ||
318 | .byte 0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f | ||
319 | |||
320 | .byte 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87 | ||
321 | .byte 0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f | ||
322 | .byte 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97 | ||
323 | .byte 0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f | ||
324 | .byte 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7 | ||
325 | .byte 0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf | ||
326 | .byte 0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7 | ||
327 | .byte 0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf | ||
328 | .byte 0xc0,0x81,0x82,0x83,0x84,0x85,0x86,0x87 # .abcdefg | ||
329 | .byte 0x88,0x89,0xca,0xcb,0xcc,0xcd,0xce,0xcf # hi | ||
330 | .byte 0xd0,0x91,0x92,0x93,0x94,0x95,0x96,0x97 # .jklmnop | ||
331 | .byte 0x98,0x99,0xda,0xdb,0xdc,0xdd,0xde,0xdf # qr | ||
332 | .byte 0xe0,0xe1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7 # ..stuvwx | ||
333 | .byte 0xa8,0xa9,0xea,0xeb,0xec,0xed,0xee,0xef # yz | ||
334 | .byte 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7 | ||
335 | .byte 0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff | ||
336 | |||
337 | # | ||
338 | # startup-code at 0x10000, running in absolute addressing mode | 267 | # startup-code at 0x10000, running in absolute addressing mode |
339 | # this is called either by the ipl loader or directly by PSW restart | 268 | # this is called either by the ipl loader or directly by PSW restart |
340 | # or linload or SALIPL | 269 | # or linload or SALIPL |