Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target...
[cascardo/linux.git] / arch / s390 / kernel / head.S
index 984726c..fd8db63 100644 (file)
@@ -393,30 +393,35 @@ ENTRY(startup_kdump)
        xc      0x300(256),0x300
        xc      0xe00(256),0xe00
        stck    __LC_LAST_UPDATE_CLOCK
-       spt     5f-.LPG0(%r13)
-       mvc     __LC_LAST_UPDATE_TIMER(8),5f-.LPG0(%r13)
+       spt     6f-.LPG0(%r13)
+       mvc     __LC_LAST_UPDATE_TIMER(8),6f-.LPG0(%r13)
        xc      __LC_STFL_FAC_LIST(8),__LC_STFL_FAC_LIST
 #ifndef CONFIG_MARCH_G5
        # check capabilities against MARCH_{G5,Z900,Z990,Z9_109,Z10}
        .insn   s,0xb2b10000,__LC_STFL_FAC_LIST # store facility list
        tm      __LC_STFL_FAC_LIST,0x01 # stfle available ?
        jz      0f
-       la      %r0,0
+       la      %r0,1
        .insn   s,0xb2b00000,__LC_STFL_FAC_LIST # store facility list extended
-0:     l       %r0,__LC_STFL_FAC_LIST
-       n       %r0,2f+8-.LPG0(%r13)
-       cl      %r0,2f+8-.LPG0(%r13)
-       jne     1f
-       l       %r0,__LC_STFL_FAC_LIST+4
-       n       %r0,2f+12-.LPG0(%r13)
-       cl      %r0,2f+12-.LPG0(%r13)
-       je      3f
-1:     l       %r15,.Lstack-.LPG0(%r13)
+       # verify if all required facilities are supported by the machine
+0:     la      %r1,__LC_STFL_FAC_LIST
+       la      %r2,3f+8-.LPG0(%r13)
+       l       %r3,0(%r2)
+1:     l       %r0,0(%r1)
+       n       %r0,4(%r2)
+       cl      %r0,4(%r2)
+       jne     2f
+       la      %r1,4(%r1)
+       la      %r2,4(%r2)
+       ahi     %r3,-1
+       jnz     1b
+       j       4f
+2:     l       %r15,.Lstack-.LPG0(%r13)
        ahi     %r15,-96
        la      %r2,.Lals_string-.LPG0(%r13)
        l       %r3,.Lsclp_print-.LPG0(%r13)
        basr    %r14,%r3
-       lpsw    2f-.LPG0(%r13)          # machine type not good enough, crash
+       lpsw    3f-.LPG0(%r13)          # machine type not good enough, crash
 .Lals_string:
        .asciz  "The Linux kernel requires more recent processor hardware"
 .Lsclp_print:
@@ -424,33 +429,42 @@ ENTRY(startup_kdump)
 .Lstack:
        .long   0x8000 + (1<<(PAGE_SHIFT+THREAD_ORDER))
        .align 16
-2:     .long   0x000a0000,0x8badcccc
+3:     .long   0x000a0000,0x8badcccc
+
+# List of facilities that are required. If not all facilities are present
+# the kernel will crash. Format is number of facility words with bits set,
+# followed by the facility words.
+
 #if defined(CONFIG_64BIT)
-#if defined(CONFIG_MARCH_Z196)
-       .long 0xc100efe3, 0xf46c0000
+#if defined(CONFIG_MARCH_ZEC12)
+       .long 3, 0xc100efe3, 0xf46ce000, 0x00400000
+#elif defined(CONFIG_MARCH_Z196)
+       .long 2, 0xc100efe3, 0xf46c0000
 #elif defined(CONFIG_MARCH_Z10)
-       .long 0xc100efe3, 0xf0680000
+       .long 2, 0xc100efe3, 0xf0680000
 #elif defined(CONFIG_MARCH_Z9_109)
-       .long 0xc100efc3, 0x00000000
+       .long 1, 0xc100efc3
 #elif defined(CONFIG_MARCH_Z990)
-       .long 0xc0002000, 0x00000000
+       .long 1, 0xc0002000
 #elif defined(CONFIG_MARCH_Z900)
-       .long 0xc0000000, 0x00000000
+       .long 1, 0xc0000000
 #endif
 #else
-#if defined(CONFIG_MARCH_Z196)
-       .long 0x8100c880, 0x00000000
+#if defined(CONFIG_MARCH_ZEC12)
+       .long 1, 0x8100c880
+#elif defined(CONFIG_MARCH_Z196)
+       .long 1, 0x8100c880
 #elif defined(CONFIG_MARCH_Z10)
-       .long 0x8100c880, 0x00000000
+       .long 1, 0x8100c880
 #elif defined(CONFIG_MARCH_Z9_109)
-       .long 0x8100c880, 0x00000000
+       .long 1, 0x8100c880
 #elif defined(CONFIG_MARCH_Z990)
-       .long 0x80002000, 0x00000000
+       .long 1, 0x80002000
 #elif defined(CONFIG_MARCH_Z900)
-       .long 0x80000000, 0x00000000
+       .long 1, 0x80000000
 #endif
 #endif
-3:
+4:
 #endif
 
 #ifdef CONFIG_64BIT
@@ -459,14 +473,14 @@ ENTRY(startup_kdump)
        jg      startup_continue
 #else
        /* Continue with 31bit startup code in head31.S */
-       l       %r13,4f-.LPG0(%r13)
+       l       %r13,5f-.LPG0(%r13)
        b       0(%r13)
        .align  8
-4:     .long   startup_continue
+5:     .long   startup_continue
 #endif
 
        .align  8
-5:     .long   0x7fffffff,0xffffffff
+6:     .long   0x7fffffff,0xffffffff
 
 #include "head_kdump.S"