diff options
Diffstat (limited to 'arch/s390/kernel/head.S')
-rw-r--r-- | arch/s390/kernel/head.S | 69 |
1 files changed, 6 insertions, 63 deletions
diff --git a/arch/s390/kernel/head.S b/arch/s390/kernel/head.S index adad8863ee2f..0f1db268a8a9 100644 --- a/arch/s390/kernel/head.S +++ b/arch/s390/kernel/head.S | |||
@@ -272,7 +272,7 @@ iplstart: | |||
272 | # load parameter file from ipl device | 272 | # load parameter file from ipl device |
273 | # | 273 | # |
274 | .Lagain1: | 274 | .Lagain1: |
275 | l %r2,INITRD_START+ARCH_OFFSET-PARMAREA(%r12) # ramdisk loc. is temp | 275 | l %r2,.Linitrd # ramdisk loc. is temp |
276 | bas %r14,.Lloader # load parameter file | 276 | bas %r14,.Lloader # load parameter file |
277 | ltr %r2,%r2 # got anything ? | 277 | ltr %r2,%r2 # got anything ? |
278 | bz .Lnopf | 278 | bz .Lnopf |
@@ -280,7 +280,7 @@ iplstart: | |||
280 | bnh .Lnotrunc | 280 | bnh .Lnotrunc |
281 | la %r2,895 | 281 | la %r2,895 |
282 | .Lnotrunc: | 282 | .Lnotrunc: |
283 | l %r4,INITRD_START+ARCH_OFFSET-PARMAREA(%r12) | 283 | l %r4,.Linitrd |
284 | clc 0(3,%r4),.L_hdr # if it is HDRx | 284 | clc 0(3,%r4),.L_hdr # if it is HDRx |
285 | bz .Lagain1 # skip dataset header | 285 | bz .Lagain1 # skip dataset header |
286 | clc 0(3,%r4),.L_eof # if it is EOFx | 286 | clc 0(3,%r4),.L_eof # if it is EOFx |
@@ -323,14 +323,15 @@ iplstart: | |||
323 | # load ramdisk from ipl device | 323 | # load ramdisk from ipl device |
324 | # | 324 | # |
325 | .Lagain2: | 325 | .Lagain2: |
326 | l %r2,INITRD_START+ARCH_OFFSET-PARMAREA(%r12) # addr of ramdisk | 326 | l %r2,.Linitrd # addr of ramdisk |
327 | st %r2,INITRD_START+ARCH_OFFSET-PARMAREA(%r12) | ||
327 | bas %r14,.Lloader # load ramdisk | 328 | bas %r14,.Lloader # load ramdisk |
328 | st %r2,INITRD_SIZE+ARCH_OFFSET-PARMAREA(%r12) # store size of ramdisk | 329 | st %r2,INITRD_SIZE+ARCH_OFFSET-PARMAREA(%r12) # store size of ramdisk |
329 | ltr %r2,%r2 | 330 | ltr %r2,%r2 |
330 | bnz .Lrdcont | 331 | bnz .Lrdcont |
331 | st %r2,INITRD_START+ARCH_OFFSET-PARMAREA(%r12) # no ramdisk found | 332 | st %r2,INITRD_START+ARCH_OFFSET-PARMAREA(%r12) # no ramdisk found |
332 | .Lrdcont: | 333 | .Lrdcont: |
333 | l %r2,INITRD_START+ARCH_OFFSET-PARMAREA(%r12) | 334 | l %r2,.Linitrd |
334 | 335 | ||
335 | clc 0(3,%r2),.L_hdr # skip HDRx and EOFx | 336 | clc 0(3,%r2),.L_hdr # skip HDRx and EOFx |
336 | bz .Lagain2 | 337 | bz .Lagain2 |
@@ -379,6 +380,7 @@ iplstart: | |||
379 | l %r1,.Lstartup | 380 | l %r1,.Lstartup |
380 | br %r1 | 381 | br %r1 |
381 | 382 | ||
383 | .Linitrd:.long _end + 0x400000 # default address of initrd | ||
382 | .Lparm: .long PARMAREA | 384 | .Lparm: .long PARMAREA |
383 | .Lstartup: .long startup | 385 | .Lstartup: .long startup |
384 | .Lcvtab:.long _ebcasc # ebcdic to ascii table | 386 | .Lcvtab:.long _ebcasc # ebcdic to ascii table |
@@ -479,65 +481,6 @@ start: | |||
479 | .byte 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7 | 481 | .byte 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7 |
480 | .byte 0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff | 482 | .byte 0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff |
481 | 483 | ||
482 | .macro GET_IPL_DEVICE | ||
483 | .Lget_ipl_device: | ||
484 | l %r1,0xb8 # get sid | ||
485 | sll %r1,15 # test if subchannel is enabled | ||
486 | srl %r1,31 | ||
487 | ltr %r1,%r1 | ||
488 | bz 2f-.LPG1(%r13) # subchannel disabled | ||
489 | l %r1,0xb8 | ||
490 | la %r5,.Lipl_schib-.LPG1(%r13) | ||
491 | stsch 0(%r5) # get schib of subchannel | ||
492 | bnz 2f-.LPG1(%r13) # schib not available | ||
493 | tm 5(%r5),0x01 # devno valid? | ||
494 | bno 2f-.LPG1(%r13) | ||
495 | la %r6,ipl_parameter_flags-.LPG1(%r13) | ||
496 | oi 3(%r6),0x01 # set flag | ||
497 | la %r2,ipl_devno-.LPG1(%r13) | ||
498 | mvc 0(2,%r2),6(%r5) # store devno | ||
499 | tm 4(%r5),0x80 # qdio capable device? | ||
500 | bno 2f-.LPG1(%r13) | ||
501 | oi 3(%r6),0x02 # set flag | ||
502 | |||
503 | # copy ipl parameters | ||
504 | |||
505 | lhi %r0,4096 | ||
506 | l %r2,20(%r0) # get address of parameter list | ||
507 | lhi %r3,IPL_PARMBLOCK_ORIGIN | ||
508 | st %r3,20(%r0) | ||
509 | lhi %r4,1 | ||
510 | cr %r2,%r3 # start parameters < destination ? | ||
511 | jl 0f | ||
512 | lhi %r1,1 # copy direction is upwards | ||
513 | j 1f | ||
514 | 0: lhi %r1,-1 # copy direction is downwards | ||
515 | ar %r2,%r0 | ||
516 | ar %r3,%r0 | ||
517 | ar %r2,%r1 | ||
518 | ar %r3,%r1 | ||
519 | 1: mvc 0(1,%r3),0(%r2) # finally copy ipl parameters | ||
520 | ar %r3,%r1 | ||
521 | ar %r2,%r1 | ||
522 | sr %r0,%r4 | ||
523 | jne 1b | ||
524 | b 2f-.LPG1(%r13) | ||
525 | |||
526 | .align 4 | ||
527 | .Lipl_schib: | ||
528 | .rept 13 | ||
529 | .long 0 | ||
530 | .endr | ||
531 | |||
532 | .globl ipl_parameter_flags | ||
533 | ipl_parameter_flags: | ||
534 | .long 0 | ||
535 | .globl ipl_devno | ||
536 | ipl_devno: | ||
537 | .word 0 | ||
538 | 2: | ||
539 | .endm | ||
540 | |||
541 | #ifdef CONFIG_64BIT | 484 | #ifdef CONFIG_64BIT |
542 | #include "head64.S" | 485 | #include "head64.S" |
543 | #else | 486 | #else |