From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tom Rini Date: Wed, 29 Jul 2020 09:44:02 -0400 Subject: [PATCH v3 5/5] arm: qemu: override flash accessors to use virtualizable instructions In-Reply-To: <20200707100711.7446-6-ardb@kernel.org> References: <20200707100711.7446-1-ardb@kernel.org> <20200707100711.7446-6-ardb@kernel.org> Message-ID: <20200729134402.GS6965@bill-the-cat> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On Tue, Jul 07, 2020 at 12:07:11PM +0200, Ard Biesheuvel wrote: > Some instructions in the ARM ISA have multiple output registers, such > as ldrd/ldp (load pair), where two registers are loaded from memory, > but also ldr with indexing, where the memory base register is incremented > as well when the value is loaded to the destination register. > > MMIO emulation under KVM is based on using the architecturally defined > syndrome information that is provided when an exception is taken to the > hypervisor. This syndrome information describes whether the instruction > that triggered the exception is a load or a store, what the faulting > address was, and which register was the destination register. > > This syndrome information can only describe one destination register, and > when the trapping instruction is one with multiple outputs, KVM throws an > error like > > kvm [615929]: Data abort outside memslots with no valid syndrome info > > on the host and kills the QEMU process with the following error: > > U-Boot 2020.07-rc3-00208-g88bd5b179360-dirty (Jun 06 2020 - 11:59:22 +0200) > > DRAM: 1 GiB > Flash: error: kvm run failed Function not implemented > R00=00000001 R01=00000040 R02=7ee0ce20 R03=00000000 > R04=7ffd9eec R05=00000004 R06=7ffda3f8 R07=00000055 > R08=7ffd9eec R09=7ef0ded0 R10=7ee0ce20 R11=00000000 > R12=00000004 R13=7ee0cdf8 R14=00000000 R15=7ff72d08 > PSR=200001d3 --C- A svc32 > QEMU: Terminated > > This means that, in order to run U-Boot in QEMU under KVM, we need to > avoid such instructions when accessing emulated devices. For the flash > in particular, which is a hybrid between a ROM (backed by a read-only > KVM memslot) when in array mode, and an emulated MMIO device (when in > write mode), we need to take care to only use instructions that KVM can > deal with when they trap. > > So override the flash read accessors that are used when running on QEMU > under KVM. Note that the the 64-bit wide read and write accessors have > been omitted: they are never used when running under QEMU given that it > does not emulate CFI flash that supports it. > > Signed-off-by: Ard Biesheuvel > Reviewed-by: Andre Przywara Applied to u-boot/master, thanks! -- Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 659 bytes Desc: not available URL: