On Thu, 23 Apr 2020 at 19:39, Andre Przywara <andre.przywara@xxxxxxx> wrote: > > Hi, > > an update for the CFI flash emulation, addressing Alex' comments and > adding direct mapping support. > The actual code changes to the flash emulation are minimal, mostly this > is about renaming and cleanups. > This versions now adds some patches. 1/5 is a required fix, the last > three patches add mapping support as an extension. See below. > > In addition to a branch with this series[1], I also put a git branch with > all the changes compared to v3[2] as separate patches on the server, please > have a look if you want to verify against a previous review. > > =============== > The EDK II UEFI firmware implementation requires some storage for the EFI > variables, which is typically some flash storage. > Since this is already supported on the EDK II side, and looks like a > generic standard, this series adds a CFI flash emulation to kvmtool. > > Patch 2/5 is the actual emulation code, patch 1/5 is a bug-fix for > registering MMIO devices, which is needed for this device. > Patches 3-5 add support for mapping the flash memory into guest, should > it be in read-array mode. For this to work, patch 3/5 is cherry-picked > from Alex' PCIe reassignable BAR series, to support removing a memslot > mapping. Patch 4/5 adds support for read-only mappings, while patch 5/5 > adds or removes the mapping based on the current state. > I am happy to squash 5/5 into 2/5, if we agree that patch 3/5 should be > merged either separately or the PCIe series is actually merged before > this one. > > This is one missing piece towards a working UEFI boot with kvmtool on > ARM guests, the other is to provide writable PCI BARs, which is WIP. > This series alone already enables UEFI boot, but only with virtio-mmio. > Excellent! Thanks for taking the time to implement the r/o memslot for the flash, it really makes the UEFI firmware much more usable. I will test this as soon as I get a chance, probably tomorrow. > > [1] http://www.linux-arm.org/git?p=kvmtool.git;a=log;h=refs/heads/cfi-flash/v4 > [2] http://www.linux-arm.org/git?p=kvmtool.git;a=log;h=refs/heads/cfi-flash/v3 > git://linux-arm.org/kvmtool.git (branches cfi-flash/v3 and cfi-flash/v4) > > Changelog v3 .. v4: > - Rename file to cfi-flash.c (dash instead of underscore). > - Unify macro names for states, modes and commands. > - Enforce one or two chips only. > - Comment on pow2_size() function. > - Use more consistent identifier spellings. > - Assign symbols to status register values. > - Drop RCR register emulation. > - Use numerical offsets instead of names for query offsets to match spec. > - Cleanup error path and reword info message in create_flash_device_file(). > - Add fix to allow non-virtio MMIO device emulations. > - Support tearing down and adding read-only memslots. > - Add read-only memslot mapping when in read mode. > > Changelog v2 .. v3: > - Breaking MMIO handling into three separate functions. > - Assing the flash base address in the memory map, but stay at 32 MB for now. > The MMIO area has been moved up to 48 MB, to never overlap with the > flash. > - Impose a limit of 16 MB for the flash size, mostly to fit into the > (for now) fixed memory map. > - Trim flash size down to nearest power-of-2, to match hardware. > - Announce forced flash size trimming. > - Rework the CFI query table slightly, to add the addresses as array > indicies. > - Fix error handling when creating the flash device. > - Fix pow2_size implementation for 0 and 1 as input values. > - Fix write buffer size handling. > - Improve some comments. > > Changelog v1 .. v2: > - Add locking for MMIO handling. > - Fold flash read into handler. > - Move pow2_size() into generic header. > - Spell out flash base address.