Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP2:GA
qemu.3557
0137-pc-bios-s390-ccw-store-proper-subsy.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0137-pc-bios-s390-ccw-store-proper-subsy.patch of Package qemu.3557
From 95fd4697405c7d8d2bf8bfeb907992c7205b428e Mon Sep 17 00:00:00 2001 From: Christian Borntraeger <borntraeger@de.ibm.com> Date: Tue, 1 Jul 2014 12:17:41 +0200 Subject: [PATCH] pc-bios/s390-ccw: store proper subsystem information word MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit POP chapter 17 requires to store a subsystem information word at 184 during IPL. Furthermore bytes 188-191 should be zero. The bootmap might contain data blocks that are written to the first page. We have to write these values after we processed the bootmap and before the final IPL. Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com> Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com> (cherry picked from commit f2879a5c9e45e8432d15deea84fdf53586e9949c) Signed-off-by: Andreas Färber <afaerber@suse.de> --- pc-bios/s390-ccw/bootmap.c | 2 ++ pc-bios/s390-ccw/main.c | 17 ++++++++++++++++- pc-bios/s390-ccw/s390-ccw.h | 1 + 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/pc-bios/s390-ccw/bootmap.c b/pc-bios/s390-ccw/bootmap.c index fa2ca26..46d681e 100644 --- a/pc-bios/s390-ccw/bootmap.c +++ b/pc-bios/s390-ccw/bootmap.c @@ -50,6 +50,8 @@ static void jump_to_IPL_2(void) static void jump_to_IPL_code(uint64_t address) { + /* store the subsystem information _after_ the bootmap was loaded */ + write_subsystem_identification(); /* * The IPL PSW is at address 0. We also must not overwrite the * content of non-BIOS memory after we loaded the guest, so we diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c index 5c33766..014ae09 100644 --- a/pc-bios/s390-ccw/main.c +++ b/pc-bios/s390-ccw/main.c @@ -12,6 +12,22 @@ char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE))); uint64_t boot_value; +struct subchannel_id blk_schid = { .one = 1 }; + +/* + * Priniciples of Operations (SA22-7832-09) chapter 17 requires that + * a subsystem-identification is at 184-187 and bytes 188-191 are zero + * after list-directed-IPL and ccw-IPL. + */ +void write_subsystem_identification(void) +{ + struct subchannel_id *schid = (struct subchannel_id *) 184; + uint32_t *zeroes = (uint32_t *) 188; + + *schid = blk_schid; + *zeroes = 0; +} + void virtio_panic(const char *string) { @@ -22,7 +38,6 @@ void virtio_panic(const char *string) static void virtio_setup(uint64_t dev_info) { - struct subchannel_id blk_schid = { .one = 1 }; struct schib schib; int i; int r; diff --git a/pc-bios/s390-ccw/s390-ccw.h b/pc-bios/s390-ccw/s390-ccw.h index b6c0a5b..a7015ab 100644 --- a/pc-bios/s390-ccw/s390-ccw.h +++ b/pc-bios/s390-ccw/s390-ccw.h @@ -50,6 +50,7 @@ void disabled_wait(void); /* main.c */ void virtio_panic(const char *string); +void write_subsystem_identification(void); /* sclp-ascii.c */ void sclp_print(const char *string);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor