On 7/11/25 5:10 PM, Zhuoying Cai wrote: > The secure-IPL-code-loading-attributes facility (SCLAF) > provides additional security during IPL. > > Availability of SCLAF is determined by byte 136 bit 3 of the > SCLP Read Info block. > > Signed-off-by: Zhuoying Cai <zy...@linux.ibm.com>
Aside from the comment I made in patch 17, LGTM. Reviewed-by: Collin Walling <wall...@linux.ibm.com> > --- > target/s390x/cpu_features.c | 1 + > target/s390x/cpu_features_def.h.inc | 1 + > target/s390x/cpu_models.c | 3 +++ > target/s390x/gen-features.c | 2 ++ > target/s390x/kvm/kvm.c | 3 +++ > 5 files changed, 10 insertions(+) > > diff --git a/target/s390x/cpu_features.c b/target/s390x/cpu_features.c > index 3f3d6a80af..8d5614fa59 100644 > --- a/target/s390x/cpu_features.c > +++ b/target/s390x/cpu_features.c > @@ -151,6 +151,7 @@ void s390_fill_feat_block(const S390FeatBitmap features, > S390FeatType type, > break; > case S390_FEAT_TYPE_SCLP_FAC_IPL: > clear_be_bit(s390_feat_def(S390_FEAT_SIPL)->bit, data); > + clear_be_bit(s390_feat_def(S390_FEAT_SCLAF)->bit, data); > break; > default: > return; > diff --git a/target/s390x/cpu_features_def.h.inc > b/target/s390x/cpu_features_def.h.inc > index 956bd8a123..2e91817d75 100644 > --- a/target/s390x/cpu_features_def.h.inc > +++ b/target/s390x/cpu_features_def.h.inc > @@ -142,6 +142,7 @@ DEF_FEAT(DIAG_320, "cstore", SCLP_FAC134, 5, "Provide > Certificate Store function > > /* Features exposed via SCLP SCCB Facilities byte 136 - 137 (bit numbers > relative to byte-136) */ > DEF_FEAT(SIPL, "sipl", SCLP_FAC_IPL, 1, "Secure-IPL facility") > +DEF_FEAT(SCLAF, "sclaf", SCLP_FAC_IPL, 3, > "Secure-IPL-code-loading-attributes facility") > > /* Features exposed via SCLP CPU info. */ > DEF_FEAT(SIE_F2, "sief2", SCLP_CPU, 4, "SIE: interception format 2 (Virtual > SIE)") > diff --git a/target/s390x/cpu_models.c b/target/s390x/cpu_models.c > index ab46204d9e..cb1c6b5350 100644 > --- a/target/s390x/cpu_models.c > +++ b/target/s390x/cpu_models.c > @@ -264,6 +264,7 @@ bool s390_has_feat(S390Feat feat) > case S390_FEAT_SIE_PFMFI: > case S390_FEAT_SIE_IBS: > case S390_FEAT_SIPL: > + case S390_FEAT_SCLAF: > case S390_FEAT_CONFIGURATION_TOPOLOGY: > return false; > break; > @@ -509,6 +510,8 @@ static void check_consistency(const S390CPUModel *model) > { S390_FEAT_DIAG_318, S390_FEAT_EXTENDED_LENGTH_SCCB }, > { S390_FEAT_DIAG_320, S390_FEAT_EXTENDED_LENGTH_SCCB }, > { S390_FEAT_SIPL, S390_FEAT_EXTENDED_LENGTH_SCCB }, > + { S390_FEAT_SCLAF, S390_FEAT_EXTENDED_LENGTH_SCCB }, > + { S390_FEAT_SCLAF, S390_FEAT_SIPL }, > { S390_FEAT_NNPA, S390_FEAT_VECTOR }, > { S390_FEAT_RDP, S390_FEAT_LOCAL_TLB_CLEARING }, > { S390_FEAT_UV_FEAT_AP, S390_FEAT_AP }, > diff --git a/target/s390x/gen-features.c b/target/s390x/gen-features.c > index 6ee9bad4c6..987e291cf9 100644 > --- a/target/s390x/gen-features.c > +++ b/target/s390x/gen-features.c > @@ -722,6 +722,7 @@ static uint16_t full_GEN16_GA1[] = { > S390_FEAT_UV_FEAT_AP_INTR, > S390_FEAT_DIAG_320, > S390_FEAT_SIPL, > + S390_FEAT_SCLAF, > }; > > static uint16_t full_GEN17_GA1[] = { > @@ -924,6 +925,7 @@ static uint16_t qemu_MAX[] = { > S390_FEAT_EXTENDED_LENGTH_SCCB, > S390_FEAT_DIAG_320, > S390_FEAT_SIPL, > + S390_FEAT_SCLAF, > }; > > /****** END FEATURE DEFS ******/ > diff --git a/target/s390x/kvm/kvm.c b/target/s390x/kvm/kvm.c > index fc9cad32a1..be3ad7316d 100644 > --- a/target/s390x/kvm/kvm.c > +++ b/target/s390x/kvm/kvm.c > @@ -2523,6 +2523,9 @@ bool kvm_s390_get_host_cpu_model(S390CPUModel *model, > Error **errp) > /* Secure-IPL facility is handled entirely within QEMU */ > set_bit(S390_FEAT_SIPL, model->features); > > + /* Secure-IPL-code-loading-attributes facility is handled entirely > within QEMU */ > + set_bit(S390_FEAT_SCLAF, model->features); > + > /* Test for Ultravisor features that influence secure guest behavior */ > query_uv_feat_guest(model->features); > -- Regards, Collin