diff options
Diffstat (limited to 'arch/s390/kernel/head.S')
-rw-r--r-- | arch/s390/kernel/head.S | 65 |
1 files changed, 47 insertions, 18 deletions
diff --git a/arch/s390/kernel/head.S b/arch/s390/kernel/head.S index 22596d70fc2e..6d227413cbe7 100644 --- a/arch/s390/kernel/head.S +++ b/arch/s390/kernel/head.S | |||
@@ -1,7 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * arch/s390/kernel/head.S | 2 | * Copyright IBM Corp. 1999,2009 |
3 | * | ||
4 | * Copyright (C) IBM Corp. 1999,2006 | ||
5 | * | 3 | * |
6 | * Author(s): Hartmut Penner <hp@de.ibm.com> | 4 | * Author(s): Hartmut Penner <hp@de.ibm.com> |
7 | * Martin Schwidefsky <schwidefsky@de.ibm.com> | 5 | * Martin Schwidefsky <schwidefsky@de.ibm.com> |
@@ -479,27 +477,58 @@ startup:basr %r13,0 # get base | |||
479 | mvc __LC_LAST_UPDATE_TIMER(8),6f-.LPG0(%r13) | 477 | mvc __LC_LAST_UPDATE_TIMER(8),6f-.LPG0(%r13) |
480 | mvc __LC_EXIT_TIMER(8),5f-.LPG0(%r13) | 478 | mvc __LC_EXIT_TIMER(8),5f-.LPG0(%r13) |
481 | #ifndef CONFIG_MARCH_G5 | 479 | #ifndef CONFIG_MARCH_G5 |
482 | # check processor version against MARCH_{G5,Z900,Z990,Z9_109,Z10} | 480 | # check capabilities against MARCH_{G5,Z900,Z990,Z9_109,Z10} |
483 | stidp __LC_CPUID # store cpuid | 481 | xc __LC_STFL_FAC_LIST(8),__LC_STFL_FAC_LIST |
484 | lhi %r0,(3f-2f) / 2 | 482 | stfl __LC_STFL_FAC_LIST # store facility list |
485 | la %r1,2f-.LPG0(%r13) | 483 | tm __LC_STFL_FAC_LIST,0x01 # stfle available ? |
486 | 0: clc __LC_CPUID+4(2),0(%r1) | 484 | jz 0f |
487 | jne 3f | 485 | la %r0,0 |
488 | lpsw 1f-.LPG0(13) # machine type not good enough, crash | 486 | .insn s,0xb2b00000,__LC_STFL_FAC_LIST # store facility list extended |
487 | 0: l %r0,__LC_STFL_FAC_LIST | ||
488 | n %r0,2f+8-.LPG0(%r13) | ||
489 | cl %r0,2f+8-.LPG0(%r13) | ||
490 | jne 1f | ||
491 | l %r0,__LC_STFL_FAC_LIST+4 | ||
492 | n %r0,2f+12-.LPG0(%r13) | ||
493 | cl %r0,2f+12-.LPG0(%r13) | ||
494 | je 3f | ||
495 | 1: l %r15,.Lstack-.LPG0(%r13) | ||
496 | ahi %r15,1<<(PAGE_SHIFT+THREAD_ORDER) # init_task_union+THREAD_SIZE | ||
497 | ahi %r15,-96 | ||
498 | la %r2,.Lals_string-.LPG0(%r13) | ||
499 | l %r3,.Lsclp_print-.LPG0(%r13) | ||
500 | basr %r14,%r3 | ||
501 | lpsw 2f-.LPG0(%r13) # machine type not good enough, crash | ||
502 | .Lals_string: | ||
503 | .asciz "The Linux kernel requires more recent processor hardware" | ||
504 | .Lsclp_print: | ||
505 | .long _sclp_print_early | ||
506 | .Lstack: | ||
507 | .long init_thread_union | ||
489 | .align 16 | 508 | .align 16 |
490 | 1: .long 0x000a0000,0x00000000 | 509 | 2: .long 0x000a0000,0x8badcccc |
491 | 2: | 510 | #if defined(CONFIG_64BIT) |
492 | #if defined(CONFIG_MARCH_Z10) | 511 | #if defined(CONFIG_MARCH_Z10) |
493 | .short 0x9672, 0x2064, 0x2066, 0x2084, 0x2086, 0x2094, 0x2096 | 512 | .long 0xc100efe3, 0xf0680000 |
494 | #elif defined(CONFIG_MARCH_Z9_109) | 513 | #elif defined(CONFIG_MARCH_Z9_109) |
495 | .short 0x9672, 0x2064, 0x2066, 0x2084, 0x2086 | 514 | .long 0xc100efc3, 0x00000000 |
496 | #elif defined(CONFIG_MARCH_Z990) | 515 | #elif defined(CONFIG_MARCH_Z990) |
497 | .short 0x9672, 0x2064, 0x2066 | 516 | .long 0xc0002000, 0x00000000 |
498 | #elif defined(CONFIG_MARCH_Z900) | 517 | #elif defined(CONFIG_MARCH_Z900) |
499 | .short 0x9672 | 518 | .long 0xc0000000, 0x00000000 |
519 | #endif | ||
520 | #else | ||
521 | #if defined(CONFIG_MARCH_Z10) | ||
522 | .long 0x8100c880, 0x00000000 | ||
523 | #elif defined(CONFIG_MARCH_Z9_109) | ||
524 | .long 0x8100c880, 0x00000000 | ||
525 | #elif defined(CONFIG_MARCH_Z990) | ||
526 | .long 0x80002000, 0x00000000 | ||
527 | #elif defined(CONFIG_MARCH_Z900) | ||
528 | .long 0x80000000, 0x00000000 | ||
529 | #endif | ||
500 | #endif | 530 | #endif |
501 | 3: la %r1,2(%r1) | 531 | 3: |
502 | brct %r0,0b | ||
503 | #endif | 532 | #endif |
504 | 533 | ||
505 | l %r13,4f-.LPG0(%r13) | 534 | l %r13,4f-.LPG0(%r13) |