On Tue, 1 Jul 2025 at 17:07, Cornelia Huck <coh...@redhat.com> wrote: > > On Mon, Jun 30 2025, Peter Maydell <peter.mayd...@linaro.org> wrote: > > > On Tue, 17 Jun 2025 at 16:41, Cornelia Huck <coh...@redhat.com> wrote: > >> > >> Generated against Linux 6.15. > >> > >> Reviewed-by: Sebastian Ott <seb...@redhat.com> > >> Reviewed-by: Eric Auger <eric.au...@redhat.com> > >> Signed-off-by: Cornelia Huck <coh...@redhat.com> > > > > Stripping out all the lines that just moved around, > > here are the additions: > > > >> +DEF(ID_AFR0_EL1, 3, 0, 0, 1, 3) > > > > This is ARMCPU::id_afr0. If we want to store this in > > the idregs[] array that's fine but we ought to move it. > > > > I guess the *afr* regs fell into the cracks because they were not in the > isar struct -- makes sense to move them. > > (This reg "must be interpreted with" MIDR_EL1; I'm wondering if that has > any implications once we enlighten guests with possible midr/revidr/aidr > values.)
It just means that the contents are entirely implementation defined, so you can't tell what they mean unless you first look at MIDR_EL1 to find out what your implementation is. (Linux doesn't appear to ever look at the AFR0 registers.) > >> +DEF(ID_AA64PFR2_EL1, 3, 0, 0, 4, 2) > > > >> +DEF(ID_AA64FPFR0_EL1, 3, 0, 0, 4, 7) > > > >> +DEF(ID_AA64DFR2_EL1, 3, 0, 0, 5, 2) > > > > These are all ID registers we don't implement yet > > because we don't implement any features that are > > described in them (i.e. our implementation is RAZ/WI). > > I guess it's OK to list them here, though we won't > > do anything with the array entry. > > I don't think it hurts to include them, it makes things easier when we > want to deal with non-zero values in there via kvm. > > > > >> +DEF(ID_AA64AFR0_EL1, 3, 0, 0, 5, 4) > > > > ARMCPU::id_aa64afr0 > > > >> +DEF(ID_AA64AFR1_EL1, 3, 0, 0, 5, 5) > > > > ARMCPU::id_aa64afr1 > > > >> +DEF(ID_AA64ISAR3_EL1, 3, 0, 0, 6, 3) > > > >> +DEF(ID_AA64MMFR4_EL1, 3, 0, 0, 7, 4) > > > > More ID regs for features we don't implement yet. > > > >> +DEF(CCSIDR_EL1, 3, 1, 0, 0, 0) > > > > CCSIDR_EL1 isn't a single ID register, it's an array > > of them (indexed by CCSELR_EL1). We keep them in > > ARMCPU::ccsidr[]. I don't think it makes sense to > > have an entry in isar.idregs[] for this. > > Hm, IIUC, kvm gets the correct CCSIDR_EL1 under the covers already > (i.e. no array). There's support in the KVM GET_ONE_REG API for reading and writing the full array (see KVM_REG_ARM_DEMUX_ID_CCSIDR). We just don't bother in QEMU at the moment because we never need the values in userspace. > >> +DEF(CLIDR_EL1, 3, 1, 0, 0, 1) > > > > ARMCPU::clidr > > > >> +DEF(CCSIDR2_EL1, 3, 1, 0, 0, 2) > > > > This is an array too. > > Currently, kvm handles this as undef. That seems like a missing feature in KVM -- it ought to be implemented on anything where ID_AA64MMFR2.CCIDX says we have FEAT_CCIDX (which means that the whole cache ID format changes and the info is split between CCSIDR and CCSIDR2). > >> +DEF(GMID_EL1, 3, 1, 0, 0, 4) > > > > Another ID register for a feature we don't yet implement > > (and a slightly oddball one in that it should UNDEF > > until we do implement FEAT_MTE2). > > > >> +DEF(SMIDR_EL1, 3, 1, 0, 0, 6) > > > > We implement this as a fixed zero in helper.c. > > Undef in kvm. Probably because KVM doesn't have support for SME in guests yet ? > > > >> +DEF(DCZID_EL0, 3, 3, 0, 0, 7) > > > > We construct the value of this one in aa64_dczid_read() > > based on ARMCPU::dcz_blocksize plus some runtime info. > > That one's another bit of a headache (I didn't manage to spot kvm code > dealing with it.) The hardware handles it for you -- inside the guest, the value of the DZP bit depends on HCR_EL2.TDZ (and maybe also SCTLR_EL1.DZE). The value of DCZID_EL0.BS has to match the real host CPU anyway because you can't change the block size that the DC ZVA insn is going to use. (You could trap DCZID_EL0 accesses via HFGRTR_EL2.DCZID_EL0 if you really wanted to, but you'd also need to trap-and-emulate the DC ZVA insns, which is a lot of effort for something no guest is really going to notice the difference on.) -- PMM