Hi Chao,

On 2026/1/28 20:09, Chao Liu wrote:
Hi,

This patch series adds a bare-metal qtest for the RISC-V IOMMU using the
iommu-testdev framework. The test exercises address translation paths
without requiring a full guest OS boot.


Thanks a lot for working on this and for sending the series.

It's great to see iommu-testdev being used so soon — it’s only been a week since it was added, and you already have a nice RISC-V IOMMU translation test based on it.


Best regards,

Tao



Motivation
----------

The existing RISC-V IOMMU qtest (riscv-iommu-test.c) focuses on PCI device
enumeration and register-level validation:
- PCI configuration space verification (vendor/device ID)
- Register reset value checks
- Queue initialization procedures (CQ/FQ/PQ)

However, it does not test the actual address translation functionality.
This new test fills that gap by using iommu-testdev to trigger DMA
transactions and validate the IOMMU's translation logic.

Comparison with Existing Test
-----------------------------

| Feature               | riscv-iommu-test.c | iommu-riscv-test.c (new) |
|-----------------------|--------------------|--------------------------|
| PCI config            | Yes                | No                       |
| Register reset        | Yes                | No                       |
| Queue init            | Yes                | Yes (via helper)         |
| Bare translation      | No                 | Yes                      |
| S-stage (SV39)        | No                 | Yes                      |
| G-stage (SV39x4)      | No                 | Yes                      |
| Nested translation    | No                 | Yes                      |
| DMA verification      | No                 | Yes                      |
| Uses iommu-testdev    | No                 | Yes                      |

The new test provides:
- Device context (DC) configuration and validation
- SV39 page table walks for S-stage translation
- SV39x4 page table walks for G-stage translation
- Nested translation combining both stages
- FCTL register constraint validation
- End-to-end DMA verification

Note: The current implementation only supports SV39/SV39x4. Support for
SV48/SV48x4/SV57/SV57x4 can be added in future patches.

Testing
-------

QTEST_QEMU_BINARY=./build/qemu-system-riscv64 \
   ./build/tests/qtest/iommu-riscv-test --tap -k

Question for Maintainers
------------------------

The existing riscv-iommu-test.c and the new iommu-riscv-test.c serve
complementary purposes. Would it be beneficial to merge these two tests
into a single source file for easier maintenance? This would consolidate
all RISC-V IOMMU testing in one place while preserving both the
register-level and translation-level test coverage.

Thanks,
Chao

Chao Liu (2):
   tests/qtest/libqos: Add RISC-V IOMMU helper library
   tests/qtest: Add RISC-V IOMMU bare-metal test

  MAINTAINERS                          |   2 +
  tests/qtest/iommu-riscv-test.c       | 279 +++++++++++++++++++
  tests/qtest/libqos/meson.build       |   2 +-
  tests/qtest/libqos/qos-riscv-iommu.c | 400 +++++++++++++++++++++++++++
  tests/qtest/libqos/qos-riscv-iommu.h | 172 ++++++++++++
  tests/qtest/meson.build              |   5 +-
  6 files changed, 858 insertions(+), 2 deletions(-)
  create mode 100644 tests/qtest/iommu-riscv-test.c
  create mode 100644 tests/qtest/libqos/qos-riscv-iommu.c
  create mode 100644 tests/qtest/libqos/qos-riscv-iommu.h

--
2.52.0




Reply via email to