[S390] Add processor type march=z10 and a processor type safety check.
This patch adds the code generation option for IBM System z10 and adds a check in head[31,64].S to prevents the execution of a kernel compiled for a new processor type on an old machine. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
b3b59d3339
commit
e37f50e181
@ -230,6 +230,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
|
||||
|
@ -34,6 +34,7 @@ cflags-$(CONFIG_MARCH_G5) += $(call cc-option,-march=g5)
|
||||
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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
Loading…
Reference in New Issue
Block a user