Merge commit 'kumar/kumar-next' into next
[sfrench/cifs-2.6.git] / arch / s390 / kernel / head.S
index 0cf59bb7a857d40eba3ecd9445a470af6b68d68d..ec7e35f6055b238dc3c18eaeff09054ec7ecfb3f 100644 (file)
@@ -35,6 +35,7 @@
 #define ARCH_OFFSET    0
 #endif
 
+.section ".text.head","ax"
 #ifndef CONFIG_IPL
        .org   0
        .long  0x00080000,0x80000000+startup    # Just a restart PSW
@@ -418,24 +419,6 @@ start:
 .gotr:
        l       %r10,.tbl               # EBCDIC to ASCII table
        tr      0(240,%r8),0(%r10)
-       stidp   __LC_CPUID              # Are we running on VM maybe
-       cli     __LC_CPUID,0xff
-       bnz     .test
-       .long   0x83300060              # diag 3,0,x'0060' - storage size
-       b       .done
-.test:
-       mvc     0x68(8),.pgmnw          # set up pgm check handler
-       l       %r2,.fourmeg
-       lr      %r3,%r2
-       bctr    %r3,%r0                 # 4M-1
-.loop: iske    %r0,%r3
-       ar      %r3,%r2
-.pgmx:
-       sr      %r3,%r2
-       la      %r3,1(%r3)
-.done:
-       l       %r1,.memsize
-       st      %r3,ARCH_OFFSET(%r1)
        slr     %r0,%r0
        st      %r0,INITRD_SIZE+ARCH_OFFSET-PARMAREA(%r11)
        st      %r0,INITRD_START+ARCH_OFFSET-PARMAREA(%r11)
@@ -443,9 +426,6 @@ start:
 .tbl:  .long   _ebcasc                 # translate table
 .cmd:  .long   COMMAND_LINE            # address of command line buffer
 .parm: .long   PARMAREA
-.memsize: .long memory_size
-.fourmeg: .long 0x00400000             # 4M
-.pgmnw:        .long   0x00080000,.pgmx
 .lowcase:
        .byte 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07
        .byte 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f
@@ -481,6 +461,55 @@ start:
        .byte 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7
        .byte 0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff
 
+#
+# startup-code at 0x10000, running in absolute addressing mode
+# this is called either by the ipl loader or directly by PSW restart
+# or linload or SALIPL
+#
+       .org    0x10000
+startup:basr   %r13,0                  # get base
+.LPG0:
+
+#ifndef CONFIG_MARCH_G5
+       # check processor version against MARCH_{G5,Z900,Z990,Z9_109,Z10}
+       stidp   __LC_CPUID              # store cpuid
+       lhi     %r0,(3f-2f) / 2
+       la      %r1,2f-.LPG0(%r13)
+0:     clc     __LC_CPUID+4(2),0(%r1)
+       jne     3f
+       lpsw    1f-.LPG0(13)            # machine type not good enough, crash
+       .align 16
+1:     .long   0x000a0000,0x00000000
+2:
+#if defined(CONFIG_MARCH_Z10)
+       .short 0x9672, 0x2064, 0x2066, 0x2084, 0x2086, 0x2094, 0x2096
+#elif defined(CONFIG_MARCH_Z9_109)
+       .short 0x9672, 0x2064, 0x2066, 0x2084, 0x2086
+#elif defined(CONFIG_MARCH_Z990)
+       .short 0x9672, 0x2064, 0x2066
+#elif defined(CONFIG_MARCH_Z900)
+       .short 0x9672
+#endif
+3:     la      %r1,2(%r1)
+       brct    %r0,0b
+#endif
+
+       l       %r13,0f-.LPG0(%r13)
+       b       0(%r13)
+0:     .long   startup_continue
+
+#
+# params at 10400 (setup.h)
+#
+       .org    PARMAREA
+       .long   0,0                     # IPL_DEVICE
+       .long   0,0                     # INITRD_START
+       .long   0,0                     # INITRD_SIZE
+
+       .org    COMMAND_LINE
+       .byte   "root=/dev/ram0 ro"
+       .byte   0
+
 #ifdef CONFIG_64BIT
 #include "head64.S"
 #else