[PATCH v4 6/7] tests/functional/riscv64: Add boot test for Milk-V Duo board
Kuan-Wei Chiu <[email protected]>
| Newsgroups | org.nongnu.qemu-devel,org.nongnu.qemu-riscv |
|---|---|
| Message-ID | <[email protected]> |
Add a functional boot test for the Milk-V Duo board to validate the end-to-end boot flow. $ ./build/run ./tests/functional/riscv64/test_milkv_duo.py TAP version 13 ok 1 test_milkv_duo.MilkvDuoMachine.test_riscv64_milkv_duo 1..1 Signed-off-by: Kuan-Wei Chiu <[email protected]> --- MAINTAINERS | 1 + tests/functional/riscv64/meson.build | 1 + tests/functional/riscv64/test_milkv_duo.py | 50 ++++++++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100755 tests/functional/riscv64/test_milkv_duo.py diff --git a/MAINTAINERS b/MAINTAINERS index 245eb7bb58..3f79334c59 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1861,6 +1861,7 @@ F: hw/riscv/milkv_duo.c F: include/hw/char/dw8250.h F: include/hw/misc/cv1800b_clk.h F: include/hw/riscv/cv1800b.h +F: tests/functional/riscv64/test_milkv_duo.py F: tests/qtest/milkv-duo-test.c RX Machines diff --git a/tests/functional/riscv64/meson.build b/tests/functional/riscv64/meson.build index d1a3e6c2bf..8a4f1d00f9 100644 --- a/tests/functional/riscv64/meson.build +++ b/tests/functional/riscv64/meson.build @@ -18,4 +18,5 @@ tests_riscv64_system_thorough = [ 'sifive_u', 'tt_atlantis', 'tuxrun', + 'milkv_duo', ] diff --git a/tests/functional/riscv64/test_milkv_duo.py b/tests/functional/riscv64/test_milkv_duo.py new file mode 100755 index 0000000000..aff247e61f --- /dev/null +++ b/tests/functional/riscv64/test_milkv_duo.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 +# +# Functional test that boots a Linux kernel on a Milk-V Duo machine +# +# Copyright (c) 2026 Kuan-Wei Chiu <[email protected]> +# +# SPDX-License-Identifier: GPL-2.0-or-later + +from qemu_test import LinuxKernelTest, Asset +from qemu_test import wait_for_console_pattern + +class MilkvDuoMachine(LinuxKernelTest): + + timeout = 120 + + ASSET_KERNEL = Asset( + 'https://github.com/visitorckw/milkv-duo-qemu-assets/releases/download/v1.0/Image', + '3f157ecfcb86d28bfcff9fd3c1a43f60a8513b1919739fdc9a4d946aba35b2af' + ) + ASSET_DTB = Asset( + 'https://github.com/visitorckw/milkv-duo-qemu-assets/releases/download/v1.0/cv1800b-milkv-duo.dtb', + '2a5d165f64c4b2d55bba282b2974941ab223f6f5220c2e7721e35ab81311c098' + ) + ASSET_ROOTFS = Asset( + 'https://github.com/visitorckw/milkv-duo-qemu-assets/releases/download/v1.0/rootfs.ext4', + '9e7de9222ab4a79d1291866453aa47cd67a543216df6159bf9b42d055240a676' + ) + + def test_riscv64_milkv_duo(self): + self.set_machine('milkv-duo') + + kernel_path = self.ASSET_KERNEL.fetch() + dtb_path = self.ASSET_DTB.fetch() + rootfs_path = self.ASSET_ROOTFS.fetch() + + self.vm.set_console() + self.vm.add_args('-bios', 'default', + '-kernel', kernel_path, + '-dtb', dtb_path, + '-drive', f'file={rootfs_path},format=raw,id=sd-card,snapshot=on', + '-device', 'sd-card,drive=sd-card', + '-append', 'console=ttyS0,115200 root=/dev/mmcblk0 rootwait earlycon') + + self.vm.launch() + + wait_for_console_pattern(self, 'Booting Linux on hartid') + wait_for_console_pattern(self, 'Run /sbin/init as init process') + +if __name__ == '__main__': + LinuxKernelTest.main() -- 2.55.0.766.g2966f0265a-goog