This patch set aims to support unaligned access to xHCI Capability Registers.
To achieve this, we introduce the emulation of an unaligned access through multiple aligned accesses. This patch set also adds a test device and several tests using this device to verify that the emulation functions correctly. Using these changes, unaligned access to xHCI Capability Registers is now supported. During development, I required a lot of 'MemoryRegionOps' structs with its own read/write functions for tests. In the QEMU project, a large number of similar functions or structs are often written in '.inc' files. I followed this approach for the test functions but would appreciate feedback on whether this is appropriate. --- v1 ... v2: - Fix the typo of ops size of big-l-valid. - Replaced the huge macro blocks with dynamic loops that fill in the `MemoryRegionOps` arrays at runtime. - Remove test cases valid.unaligned = false,impl.unaligned = true. - Modification to the memory document about the alignment issue. - Update the npcm7xx_fiu, mx_pic and risc-v-iommu configuration to align with the unaligned-access policy. - Document memory.rst clarify that .valid=true,.impl=false causes split unaligned accesses (may have side effects); forbid .valid=false,.impl=true via assertion. --- CJ Chen (4): doc/devel/memory.rst: additional explanation for unaligned access hw/riscv: iommu-trap: remove .impl.unaligned = true hw: npcm7xx_fiu and mx_pic change .impl.unaligned = true system/memory: assert on invalid unaligned combo Tomoyuki Hirose (5): hw/nvme/ctrl: specify the 'valid' field in MemoryRegionOps system/memory: support unaligned access hw/usb/hcd-xhci: allow unaligned access to Capability Registers hw/misc: add test device for memory access tests/qtest: add test for memory region access docs/devel/memory.rst | 18 + hw/misc/Kconfig | 4 + hw/misc/memaccess-testdev.c | 331 +++++++++++++++ hw/misc/meson.build | 1 + hw/nvme/ctrl.c | 5 + hw/riscv/riscv-iommu.c | 1 - hw/ssi/npcm7xx_fiu.c | 3 + hw/usb/hcd-xhci.c | 4 +- hw/xtensa/mx_pic.c | 3 + include/hw/misc/memaccess-testdev.h | 104 +++++ system/memory.c | 148 +++++-- system/physmem.c | 8 - tests/qtest/memaccess-test.c | 597 ++++++++++++++++++++++++++++ tests/qtest/meson.build | 9 + 14 files changed, 1198 insertions(+), 38 deletions(-) create mode 100644 hw/misc/memaccess-testdev.c create mode 100644 include/hw/misc/memaccess-testdev.h create mode 100644 tests/qtest/memaccess-test.c base-commit: 5836af0783213b9355a6bbf85d9e6bc4c9c9363f -- 2.25.1