On 10/13/2026 7:42 PM, Pierrick Bouvier wrote:
On 10/13/2026 5:24 PM, Brian Cain wrote:
On 10/13/2026 4:55 PM, Pierrick Bouvier wrote:
On 10/9/2026 12:25 PM, Brian Cain wrote:
Add the lock_verify test case to verify the k0/tlblock behavior, add the
minivm tests to cover start() and more.
Signed-off-by: Brian Cain <[email protected]>
---
tests/functional/hexagon/meson.build | 1 +
tests/functional/hexagon/test_minivm.py | 43 +++++++++++++++++++++++
tests/functional/hexagon/test_systests.py | 3 ++
3 files changed, 47 insertions(+)
create mode 100755 tests/functional/hexagon/test_minivm.py
diff --git a/tests/functional/hexagon/meson.build b/tests/functional/
hexagon/meson.build
index 44053e64676..e182bc98a06 100644
--- a/tests/functional/hexagon/meson.build
+++ b/tests/functional/hexagon/meson.build
@@ -3,6 +3,7 @@
tests_hexagon_system_thorough = [
'arch_tests',
'systests',
+ 'minivm',
]
test_hexagon_timeouts = {
diff --git a/tests/functional/hexagon/test_minivm.py b/tests/
functional/hexagon/test_minivm.py
new file mode 100755
index 00000000000..a70edbcc987
--- /dev/null
+++ b/tests/functional/hexagon/test_minivm.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python3
+#
+# Copyright(c) 2024-2025 Qualcomm Innovation Center, Inc. All Rights
Reserved.
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+from qemu_test import QemuSystemTest, Asset, skipBigDataTest
+
+class MiniVMTest(QemuSystemTest):
+ '''
+ minivm is a Hexagon hypervisor that implements the Hexagon VM
+ specification. These test cases boot minivm and then load test
cases
+ to the address specified by MiniVMTest.GUEST_ENTRY and
+ execute a minvm-guest program to exercise minivm virtualization
+ features.
+ '''
+ timeout = 180
+ GUEST_ENTRY = 0xc0000000
+ REPO = 'https://artifacts.codelinaro.org/artifactory'
+ ASSET_TARBALL = \
+ Asset(f'{REPO}/codelinaro-toolchain-for-hexagon/'
+ '19.1.5/hexagon_minivm_2024_Dec_15.tar.gz',
+
'd7920b5ff14bed5a10b23ada7d4eb927ede08635281f25067e0d5711feee2c2a')
+
+ @skipBigDataTest()
+ def test_minivm(self):
+ self.set_machine('sim')
+ self.archive_extract(self.ASSET_TARBALL)
+ rootfs_path = self.scratch_file('hexagon-unknown-linux-musl-
rootfs')
+ kernel_path = f'{rootfs_path}/boot/minivm'
+
+ for test_case in ('test_mmu', 'test_interrupts',
'test_processors'):
+ with self.subTest(test_case=test_case):
+ vm = self.get_vm(name=test_case)
+ vm.add_args('-kernel', kernel_path, '-device',
+ f'loader,addr={hex(self.GUEST_ENTRY)},'
+ f'file={rootfs_path}/boot/{test_case}')
+ vm.launch()
+ vm.wait()
+ self.assertEqual(vm.exitcode(), 0)
+
In case we decide to extend that with many other sub testcases, it could
be useful to define real sub tests. Just a suggestion though, it's not
necessary for the only 3 tests we have at the moment.
OBTW confession time - the subTest() was merely hackery because the
tarball includes a large-ish filesystem. It was a sparse file before
archive+compression but effectively now it's dense. I just did this to
avoid the time spent extracting for each test. The extraction time
dominates the test duration.
So maybe there's a better approach to consider w/o subTest()?
After checking it's indeed a bit slow.
Would that be possible to reduce test_mmu (culprit, 2.5GB) image size to
something under 100MB?
Beyond time, it would save disk space also.
Ok - I'll see about that.
Regards,
Pierrick