diff options
author | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
---|---|---|
committer | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
commit | ada47b5fe13d89735805b566185f4885f5a3f750 (patch) | |
tree | 644b88f8a71896307d71438e9b3af49126ffb22b /arch/s390/kernel/head.S | |
parent | 43e98717ad40a4ae64545b5ba047c7b86aa44f4f (diff) | |
parent | 3280f21d43ee541f97f8cda5792150d2dbec20d5 (diff) |
Merge branch 'wip-2.6.34' into old-private-masterarchived-private-master
Diffstat (limited to 'arch/s390/kernel/head.S')
-rw-r--r-- | arch/s390/kernel/head.S | 63 |
1 files changed, 25 insertions, 38 deletions
diff --git a/arch/s390/kernel/head.S b/arch/s390/kernel/head.S index c52b4f7742fa..9d1f76702d47 100644 --- a/arch/s390/kernel/head.S +++ b/arch/s390/kernel/head.S | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright IBM Corp. 1999,2009 | 2 | * Copyright IBM Corp. 1999,2010 |
3 | * | 3 | * |
4 | * Author(s): Hartmut Penner <hp@de.ibm.com> | 4 | * Author(s): Hartmut Penner <hp@de.ibm.com> |
5 | * Martin Schwidefsky <schwidefsky@de.ibm.com> | 5 | * Martin Schwidefsky <schwidefsky@de.ibm.com> |
@@ -22,12 +22,9 @@ | |||
22 | */ | 22 | */ |
23 | 23 | ||
24 | #include <linux/init.h> | 24 | #include <linux/init.h> |
25 | #include <asm/setup.h> | ||
26 | #include <asm/lowcore.h> | ||
27 | #include <asm/asm-offsets.h> | 25 | #include <asm/asm-offsets.h> |
28 | #include <asm/thread_info.h> | 26 | #include <asm/thread_info.h> |
29 | #include <asm/page.h> | 27 | #include <asm/page.h> |
30 | #include <asm/cpu.h> | ||
31 | 28 | ||
32 | #ifdef CONFIG_64BIT | 29 | #ifdef CONFIG_64BIT |
33 | #define ARCH_OFFSET 4 | 30 | #define ARCH_OFFSET 4 |
@@ -288,19 +285,7 @@ iplstart: | |||
288 | bz .Lagain1 # skip dateset trailer | 285 | bz .Lagain1 # skip dateset trailer |
289 | la %r5,0(%r4,%r2) | 286 | la %r5,0(%r4,%r2) |
290 | lr %r3,%r2 | 287 | lr %r3,%r2 |
291 | .Lidebc: | 288 | la %r3,COMMAND_LINE-PARMAREA(%r12) # load adr. of command line |
292 | tm 0(%r5),0x80 # high order bit set ? | ||
293 | bo .Ldocv # yes -> convert from EBCDIC | ||
294 | ahi %r5,-1 | ||
295 | bct %r3,.Lidebc | ||
296 | b .Lnocv | ||
297 | .Ldocv: | ||
298 | l %r3,.Lcvtab | ||
299 | tr 0(256,%r4),0(%r3) # convert parameters to ascii | ||
300 | tr 256(256,%r4),0(%r3) | ||
301 | tr 512(256,%r4),0(%r3) | ||
302 | tr 768(122,%r4),0(%r3) | ||
303 | .Lnocv: la %r3,COMMAND_LINE-PARMAREA(%r12) # load adr. of command line | ||
304 | mvc 0(256,%r3),0(%r4) | 289 | mvc 0(256,%r3),0(%r4) |
305 | mvc 256(256,%r3),256(%r4) | 290 | mvc 256(256,%r3),256(%r4) |
306 | mvc 512(256,%r3),512(%r4) | 291 | mvc 512(256,%r3),512(%r4) |
@@ -384,7 +369,6 @@ iplstart: | |||
384 | .Linitrd:.long _end + 0x400000 # default address of initrd | 369 | .Linitrd:.long _end + 0x400000 # default address of initrd |
385 | .Lparm: .long PARMAREA | 370 | .Lparm: .long PARMAREA |
386 | .Lstartup: .long startup | 371 | .Lstartup: .long startup |
387 | .Lcvtab:.long _ebcasc # ebcdic to ascii table | ||
388 | .Lreset:.byte 0xc3,0xc8,0xc1,0xd5,0xc7,0xc5,0x40,0xd9,0xc4,0xd9,0x40 | 372 | .Lreset:.byte 0xc3,0xc8,0xc1,0xd5,0xc7,0xc5,0x40,0xd9,0xc4,0xd9,0x40 |
389 | .byte 0xc1,0xd3,0xd3,0x40,0xd2,0xc5,0xc5,0xd7,0x40,0xd5,0xd6 | 373 | .byte 0xc1,0xd3,0xd3,0x40,0xd2,0xc5,0xc5,0xd7,0x40,0xd5,0xd6 |
390 | .byte 0xc8,0xd6,0xd3,0xc4 # "change rdr all keep nohold" | 374 | .byte 0xc8,0xd6,0xd3,0xc4 # "change rdr all keep nohold" |
@@ -417,13 +401,10 @@ start: | |||
417 | .sk8x8: | 401 | .sk8x8: |
418 | mvc 0(240,%r8),0(%r9) # copy iplparms into buffer | 402 | mvc 0(240,%r8),0(%r9) # copy iplparms into buffer |
419 | .gotr: | 403 | .gotr: |
420 | l %r10,.tbl # EBCDIC to ASCII table | ||
421 | tr 0(240,%r8),0(%r10) | ||
422 | slr %r0,%r0 | 404 | slr %r0,%r0 |
423 | st %r0,INITRD_SIZE+ARCH_OFFSET-PARMAREA(%r11) | 405 | st %r0,INITRD_SIZE+ARCH_OFFSET-PARMAREA(%r11) |
424 | st %r0,INITRD_START+ARCH_OFFSET-PARMAREA(%r11) | 406 | st %r0,INITRD_START+ARCH_OFFSET-PARMAREA(%r11) |
425 | j startup # continue with startup | 407 | j startup # continue with startup |
426 | .tbl: .long _ebcasc # translate table | ||
427 | .cmd: .long COMMAND_LINE # address of command line buffer | 408 | .cmd: .long COMMAND_LINE # address of command line buffer |
428 | .parm: .long PARMAREA | 409 | .parm: .long PARMAREA |
429 | .lowcase: | 410 | .lowcase: |
@@ -467,16 +448,15 @@ start: | |||
467 | # or linload or SALIPL | 448 | # or linload or SALIPL |
468 | # | 449 | # |
469 | .org 0x10000 | 450 | .org 0x10000 |
470 | startup:basr %r13,0 # get base | 451 | .globl startup |
452 | startup: | ||
453 | basr %r13,0 # get base | ||
471 | .LPG0: | 454 | .LPG0: |
472 | xc 0x200(256),0x200 # partially clear lowcore | 455 | xc 0x200(256),0x200 # partially clear lowcore |
473 | xc 0x300(256),0x300 | 456 | xc 0x300(256),0x300 |
474 | l %r1,5f-.LPG0(%r13) | 457 | stck __LC_LAST_UPDATE_CLOCK |
475 | stck 0(%r1) | 458 | spt 5f-.LPG0(%r13) |
476 | spt 6f-.LPG0(%r13) | 459 | mvc __LC_LAST_UPDATE_TIMER(8),5f-.LPG0(%r13) |
477 | mvc __LC_LAST_UPDATE_CLOCK(8),0(%r1) | ||
478 | mvc __LC_LAST_UPDATE_TIMER(8),6f-.LPG0(%r13) | ||
479 | mvc __LC_EXIT_TIMER(8),5f-.LPG0(%r13) | ||
480 | #ifndef CONFIG_MARCH_G5 | 460 | #ifndef CONFIG_MARCH_G5 |
481 | # check capabilities against MARCH_{G5,Z900,Z990,Z9_109,Z10} | 461 | # check capabilities against MARCH_{G5,Z900,Z990,Z9_109,Z10} |
482 | xc __LC_STFL_FAC_LIST(8),__LC_STFL_FAC_LIST | 462 | xc __LC_STFL_FAC_LIST(8),__LC_STFL_FAC_LIST |
@@ -494,7 +474,6 @@ startup:basr %r13,0 # get base | |||
494 | cl %r0,2f+12-.LPG0(%r13) | 474 | cl %r0,2f+12-.LPG0(%r13) |
495 | je 3f | 475 | je 3f |
496 | 1: l %r15,.Lstack-.LPG0(%r13) | 476 | 1: l %r15,.Lstack-.LPG0(%r13) |
497 | ahi %r15,1<<(PAGE_SHIFT+THREAD_ORDER) # init_task_union+THREAD_SIZE | ||
498 | ahi %r15,-96 | 477 | ahi %r15,-96 |
499 | la %r2,.Lals_string-.LPG0(%r13) | 478 | la %r2,.Lals_string-.LPG0(%r13) |
500 | l %r3,.Lsclp_print-.LPG0(%r13) | 479 | l %r3,.Lsclp_print-.LPG0(%r13) |
@@ -505,7 +484,7 @@ startup:basr %r13,0 # get base | |||
505 | .Lsclp_print: | 484 | .Lsclp_print: |
506 | .long _sclp_print_early | 485 | .long _sclp_print_early |
507 | .Lstack: | 486 | .Lstack: |
508 | .long init_thread_union | 487 | .long 0x8000 + (1<<(PAGE_SHIFT+THREAD_ORDER)) |
509 | .align 16 | 488 | .align 16 |
510 | 2: .long 0x000a0000,0x8badcccc | 489 | 2: .long 0x000a0000,0x8badcccc |
511 | #if defined(CONFIG_64BIT) | 490 | #if defined(CONFIG_64BIT) |
@@ -532,13 +511,25 @@ startup:basr %r13,0 # get base | |||
532 | 3: | 511 | 3: |
533 | #endif | 512 | #endif |
534 | 513 | ||
514 | #ifdef CONFIG_64BIT | ||
515 | mvi __LC_AR_MODE_ID,1 # set esame flag | ||
516 | slr %r0,%r0 # set cpuid to zero | ||
517 | lhi %r1,2 # mode 2 = esame (dump) | ||
518 | sigp %r1,%r0,0x12 # switch to esame mode | ||
519 | sam64 # switch to 64 bit mode | ||
520 | larl %r13,4f | ||
521 | lmh %r0,%r15,0(%r13) # clear high-order half | ||
522 | jg startup_continue | ||
523 | 4: .fill 16,4,0x0 | ||
524 | #else | ||
525 | mvi __LC_AR_MODE_ID,0 # set ESA flag (mode 0) | ||
535 | l %r13,4f-.LPG0(%r13) | 526 | l %r13,4f-.LPG0(%r13) |
536 | b 0(%r13) | 527 | b 0(%r13) |
537 | .align 4 | 528 | .align 8 |
538 | 4: .long startup_continue | 529 | 4: .long startup_continue |
539 | 5: .long sched_clock_base_cc | 530 | #endif |
540 | .align 8 | 531 | .align 8 |
541 | 6: .long 0x7fffffff,0xffffffff | 532 | 5: .long 0x7fffffff,0xffffffff |
542 | 533 | ||
543 | # | 534 | # |
544 | # params at 10400 (setup.h) | 535 | # params at 10400 (setup.h) |
@@ -552,8 +543,4 @@ startup:basr %r13,0 # get base | |||
552 | .byte "root=/dev/ram0 ro" | 543 | .byte "root=/dev/ram0 ro" |
553 | .byte 0 | 544 | .byte 0 |
554 | 545 | ||
555 | #ifdef CONFIG_64BIT | 546 | .org 0x11000 |
556 | #include "head64.S" | ||
557 | #else | ||
558 | #include "head31.S" | ||
559 | #endif | ||