On Wed, Jun 12, 2024 at 11:59:22AM +0100, Suzuki K Poulose wrote: > On 12/06/2024 11:40, Jean-Philippe Brucker wrote: > > On Wed, Jun 05, 2024 at 10:29:54AM +0100, Steven Price wrote: > > > From: Suzuki K Poulose <suzuki.poulose@xxxxxxx> > > > > > > Detect that the VM is a realm guest by the presence of the RSI > > > interface. > > > > > > If in a realm then all memory needs to be marked as RIPAS RAM initially, > > > the loader may or may not have done this for us. To be sure iterate over > > > all RAM and mark it as such. Any failure is fatal as that implies the > > > RAM regions passed to Linux are incorrect - which would mean failing > > > later when attempting to access non-existent RAM. > > > > > > Signed-off-by: Suzuki K Poulose <suzuki.poulose@xxxxxxx> > > > Co-developed-by: Steven Price <steven.price@xxxxxxx> > > > Signed-off-by: Steven Price <steven.price@xxxxxxx> > > > > > +static bool rsi_version_matches(void) > > > +{ > > > + unsigned long ver_lower, ver_higher; > > > + unsigned long ret = rsi_request_version(RSI_ABI_VERSION, > > > + &ver_lower, > > > + &ver_higher); > > > > There is a regression on QEMU TCG (in emulation mode, not running under KVM): > > > > qemu-system-aarch64 -M virt -cpu max -kernel Image -nographic > > > > This doesn't implement EL3 or EL2, so SMC is UNDEFINED (DDI0487J.a R_HMXQS), > > and we end up with an undef instruction exception. So this patch would > > also break hardware that only implements EL1 (I don't know if it exists). > > Thanks for the report, Could we not check ID_AA64PFR0_EL1.EL3 >= 0 ? I > think we do this for kvm-unit-tests, we need the same here. Good point, it also fixes this case and is simpler. It assumes RMM doesn't hide this field, but I can't think of a reason it would. This command won't work anymore: qemu-system-aarch64 -M virt,secure=on -cpu max -kernel Image -nographic implements EL3 and SMC still treated as undef. QEMU has a special case for starting at EL2 in this case, but I couldn't find what this is for. Treating SMC as undef is correct because SCR_EL3.SMD resets to an architectutally UNKNOWN value. But the architecture requires that the CPU resets to the highest implemented exception level (DDI0487J.a R_JYLQV). So in my opinion we can use the ID_AA64PFR0_EL1.EL3 field here, and breaking this particular configuration is not a problem: users shouldn't expect Linux to boot when EL3 is implemented and doesn't run a firmware. Thanks, Jean > > > Suzuki > > > > > The easiest fix is to detect the SMC conduit through the PSCI node in DT. > > SMCCC helpers already do this, but we can't use them this early in the > > boot. I tested adding an early probe to the PSCI driver to check this, see > > attached patches. > > > > Note that we do need to test the conduit after finding a PSCI node, > > because even though it doesn't implement EL2 in this configuration, QEMU > > still accepts PSCI HVCs in order to support SMP. > > > > Thanks, > > Jean > > >