]> git.ipfire.org Git - ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.31/patches.arch/s390-04-07-als.patch
Reenabled linux-xen, added patches for Xen Kernel Version 2.6.27.31,
[ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.arch / s390-04-07-als.patch
diff --git a/src/patches/suse-2.6.27.31/patches.arch/s390-04-07-als.patch b/src/patches/suse-2.6.27.31/patches.arch/s390-04-07-als.patch
new file mode 100644 (file)
index 0000000..a24a700
--- /dev/null
@@ -0,0 +1,175 @@
+From: Gerald Schaefer <geraldsc@de.ibm.com>
+Subject: kernel: Add processor type march=z10 and a processor type safety check.
+References: bnc#445100
+
+Description: This patch adds the code generation option for IBM System z10 and
+             adds a check in head[31,64].S to prevent the execution of a kernel
+             compiled for a new processor type on an old machine.
+
+Acked-by: John Jolly <jjolly@suse.de>
+---
+
+ arch/s390/Kconfig         |    8 +++++++
+ arch/s390/Makefile        |    1 
+ arch/s390/kernel/head.S   |   49 ++++++++++++++++++++++++++++++++++++++++++++++
+ arch/s390/kernel/head31.S |   27 ++-----------------------
+ arch/s390/kernel/head64.S |   23 ---------------------
+ 5 files changed, 61 insertions(+), 47 deletions(-)
+
+--- a/arch/s390/Kconfig
++++ b/arch/s390/Kconfig
+@@ -223,6 +223,14 @@ config MARCH_Z9_109
+         Class (z9 BC). The kernel will be slightly faster but will not
+         work on older machines such as the z990, z890, z900, and z800.
++config MARCH_Z10
++      bool "IBM System z10"
++      help
++        Select this to enable optimizations for IBM System z10. The
++        kernel will be slightly faster but will not work on older
++        machines such as the z990, z890, z900, z800, z9-109, z9-ec
++        and z9-bc.
++
+ endchoice
+ config PACK_STACK
+--- a/arch/s390/kernel/head31.S
++++ b/arch/s390/kernel/head31.S
+@@ -10,34 +10,13 @@
+  *
+  */
+-#
+-# 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:        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
+-
+       .org    0x11000
+ startup_continue:
+       basr    %r13,0                  # get base
+-.LPG1:        mvi     __LC_AR_MODE_ID,0       # set ESA flag (mode 0)
++.LPG1:
++
++      mvi     __LC_AR_MODE_ID,0       # set ESA flag (mode 0)
+       lctl    %c0,%c15,.Lctl-.LPG1(%r13) # load control registers
+       l       %r12,.Lparmaddr-.LPG1(%r13) # pointer to parameter area
+                                       # move IPL device to lowcore
+--- a/arch/s390/kernel/head64.S
++++ b/arch/s390/kernel/head64.S
+@@ -10,29 +10,6 @@
+  *
+  */
+-#
+-# 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:        l       %r13,0f-.LPG0(%r13)
+-      b       0(%r13)
+-0:    .long   startup_continue
+-
+-#
+-# params at 10400 (setup.h)
+-#
+-      .org    PARMAREA
+-      .quad   0                       # IPL_DEVICE
+-      .quad   0                       # INITRD_START
+-      .quad   0                       # INITRD_SIZE
+-
+-      .org    COMMAND_LINE
+-      .byte   "root=/dev/ram0 ro"
+-      .byte   0
+-
+       .org    0x11000
+ startup_continue:
+--- a/arch/s390/kernel/head.S
++++ b/arch/s390/kernel/head.S
+@@ -461,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
+--- a/arch/s390/Makefile
++++ b/arch/s390/Makefile
+@@ -34,6 +34,7 @@ cflags-$(CONFIG_MARCH_G5)   += $(call cc
+ cflags-$(CONFIG_MARCH_Z900) += $(call cc-option,-march=z900)
+ cflags-$(CONFIG_MARCH_Z990) += $(call cc-option,-march=z990)
+ cflags-$(CONFIG_MARCH_Z9_109) += $(call cc-option,-march=z9-109)
++cflags-$(CONFIG_MARCH_Z10) += $(call cc-option,-march=z10)
+ #KBUILD_IMAGE is necessary for make rpm
+ KBUILD_IMAGE  :=arch/s390/boot/image