diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c index 236e2c937f734669f0c6d47449e32efae92e667c..9a73820fd1f18774f7299c4b075b97b39bcf6e13 100644 --- a/hw/s390x/ipl.c +++ b/hw/s390x/ipl.c @@ -238,6 +238,12 @@ static uint64_t s390_update_iplstate(S390IPLState *ipl) ipl->cssid = ccw_dev->sch->cssid; ipl->ssid = ccw_dev->sch->ssid; ipl->devno = ccw_dev->sch->devno; + ipl->iplb.len = cpu_to_be32(S390_IPLB_MIN_CCW_LEN); + ipl->iplb.blk0_len = + cpu_to_be32(S390_IPLB_MIN_CCW_LEN - S390_IPLB_HEADER_LEN); + ipl->iplb.pbt = S390_IPL_TYPE_CCW; + ipl->iplb.ccw.devno = cpu_to_be16(ccw_dev->sch->devno); + ipl->iplb_valid = true; goto out; } } @@ -292,6 +298,7 @@ static void s390_ipl_reset(DeviceState *dev) if (!ipl->reipl_requested) { ipl->iplb_valid = false; + memset(&ipl->iplb, 0, sizeof(IplParameterBlock)); } ipl->reipl_requested = false; } diff --git a/hw/s390x/ipl.h b/hw/s390x/ipl.h index 08f1d5c385e2a568e1a9ebfb407239c17a5d7b28..0b7f6cbecb5e195248902c50423065eec04f9c8d 100644 --- a/hw/s390x/ipl.h +++ b/hw/s390x/ipl.h @@ -102,6 +102,7 @@ typedef struct S390IPLState S390IPLState; #define S390_IPL_TYPE_FCP 0x00 #define S390_IPL_TYPE_CCW 0x02 +#define S390_IPLB_HEADER_LEN 8 #define S390_IPLB_MIN_CCW_LEN 200 #define S390_IPLB_MIN_FCP_LEN 384