diff options
-rw-r--r-- | pc-bios/s390-ccw.img | bin | 46704 -> 42608 bytes | |||
-rw-r--r-- | pc-bios/s390-ccw/dasd-ipl.c | 3 | ||||
-rw-r--r-- | pc-bios/s390-ccw/jump2ipl.c | 2 | ||||
-rw-r--r-- | pc-bios/s390-ccw/main.c | 6 | ||||
-rw-r--r-- | pc-bios/s390-ccw/s390-arch.h | 3 | ||||
-rw-r--r-- | pc-bios/s390-netboot.img | bin | 71328 -> 67232 bytes |
6 files changed, 13 insertions, 1 deletions
diff --git a/pc-bios/s390-ccw.img b/pc-bios/s390-ccw.img Binary files differindex 4e4b3207c4..5aaeac9f79 100644 --- a/pc-bios/s390-ccw.img +++ b/pc-bios/s390-ccw.img diff --git a/pc-bios/s390-ccw/dasd-ipl.c b/pc-bios/s390-ccw/dasd-ipl.c index 0fc879bb8e..71cbae2f16 100644 --- a/pc-bios/s390-ccw/dasd-ipl.c +++ b/pc-bios/s390-ccw/dasd-ipl.c @@ -100,6 +100,9 @@ static void make_readipl(void) { Ccw0 *ccwIplRead = (Ccw0 *)0x00; + /* Clear out any existing data */ + memset(ccwIplRead, 0, sizeof(Ccw0)); + /* Create Read IPL ccw at address 0 */ ccwIplRead->cmd_code = CCW_CMD_READ_IPL; ccwIplRead->cda = 0x00; /* Read into address 0x00 in main memory */ diff --git a/pc-bios/s390-ccw/jump2ipl.c b/pc-bios/s390-ccw/jump2ipl.c index fbae45b03c..b9c70d64a5 100644 --- a/pc-bios/s390-ccw/jump2ipl.c +++ b/pc-bios/s390-ccw/jump2ipl.c @@ -78,7 +78,7 @@ void jump_to_low_kernel(void) * kernel start address (when jumping to the PSW-at-zero address instead, * the kernel startup code fails when we booted from a network device). */ - if (!memcmp((char *)0x10008, "S390EP", 6)) { + if (!memcmp((char *)S390EP, "S390EP", 6)) { jump_to_IPL_code(KERN_IMAGE_START); } diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c index fc4bfaa455..5d2b7ba94d 100644 --- a/pc-bios/s390-ccw/main.c +++ b/pc-bios/s390-ccw/main.c @@ -178,6 +178,12 @@ static void boot_setup(void) memcpy(lpmsg + 10, loadparm_str, 8); sclp_print(lpmsg); + /* + * Clear out any potential S390EP magic (see jump_to_low_kernel()), + * so we don't taint our decision-making process during a reboot. + */ + memset((char *)S390EP, 0, 6); + have_iplb = store_iplb(&iplb); } diff --git a/pc-bios/s390-ccw/s390-arch.h b/pc-bios/s390-ccw/s390-arch.h index 6da44d4436..a741488aaa 100644 --- a/pc-bios/s390-ccw/s390-arch.h +++ b/pc-bios/s390-ccw/s390-arch.h @@ -95,6 +95,9 @@ typedef struct LowCore { extern LowCore *lowcore; +/* Location of "S390EP" in a Linux binary (see arch/s390/boot/head.S) */ +#define S390EP 0x10008 + static inline void set_prefix(uint32_t address) { asm volatile("spx %0" : : "m" (address) : "memory"); diff --git a/pc-bios/s390-netboot.img b/pc-bios/s390-netboot.img Binary files differindex 3532f70f6f..120bd40ca9 100644 --- a/pc-bios/s390-netboot.img +++ b/pc-bios/s390-netboot.img |