Commit 260d15c45b for qemu.org
commit 260d15c45b938511ade1992d7ff3efe47b7519bf
Author: Brian Cain <brian.cain@oss.qualcomm.com>
Date: Thu Jul 16 12:15:55 2026 -0700
tests/functional/hexagon: add arch_tests functional test
Add new test cases from hexagon-arch-tests to exercise exceptions,
guest mode.
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
Signed-off-by: Brian Cain <brian.cain@oss.qualcomm.com>
diff --git a/MAINTAINERS b/MAINTAINERS
index ec56e5c557..74fc43f5f2 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1357,6 +1357,7 @@ F: hw/hexagon/
F: include/hw/hexagon/
F: configs/devices/hexagon-softmmu/default.mak
F: docs/system/hexagon/
+F: tests/functional/hexagon/
F: docs/devel/hexagon-sys.rst
LoongArch Machines
diff --git a/tests/functional/hexagon/meson.build b/tests/functional/hexagon/meson.build
new file mode 100644
index 0000000000..2b5a1a8f26
--- /dev/null
+++ b/tests/functional/hexagon/meson.build
@@ -0,0 +1,5 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+tests_hexagon_system_thorough = [
+ 'arch_tests',
+]
diff --git a/tests/functional/hexagon/test_arch_tests.py b/tests/functional/hexagon/test_arch_tests.py
new file mode 100755
index 0000000000..54a1412c59
--- /dev/null
+++ b/tests/functional/hexagon/test_arch_tests.py
@@ -0,0 +1,57 @@
+#!/usr/bin/env python3
+#
+# Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+from qemu_test import QemuSystemTest, Asset
+from qemu_test.cmd import wait_for_console_pattern
+
+
+class ArchTestsUart(QemuSystemTest):
+ """
+ Hexagon architecture verification tests
+
+ These are bare-metal tests from hexagon-arch-tests that exercise
+ system functionality.
+
+ Tests output results via UART.
+ """
+ timeout = 60
+
+ ASSET_TARBALL = Asset(
+ "https://github.com/qualcomm/qemu-hexagon-testing/releases/"
+ "download/v0.2.5/arch_tests_uart.tar.gz",
+ "edb4f37b877a3a72a0e10920477458a43b40045d34398fee8cb763fefd342f4f",
+ )
+
+ def run_uart_test(self, test_name: str,
+ machine: str = "virt") -> None:
+ """
+ Run an arch test binary and verify PASS via UART console output.
+ """
+ self.set_machine(machine)
+ self.archive_extract(self.ASSET_TARBALL)
+ target_bin = self.scratch_file('arch_tests_uart_package',
+ 'bin', test_name)
+ self.vm.set_console()
+ self.set_vm_arg("-display", "none")
+ self.set_vm_arg("-kernel", target_bin)
+ self.vm.launch()
+ wait_for_console_pattern(self, "PASS")
+
+ def test_exceptions(self) -> None:
+ """Tests exception delivery for trap instructions, privilege
+ violations, and verifies SSR cause codes and ELR values.
+ """
+ self.run_uart_test("test_exceptions")
+
+ def test_guest_mode(self) -> None:
+ """Tests guest mode entry/exit via CCR configuration, verifying
+ GSR fields, GELR, and guest event vector table dispatch.
+ """
+ self.run_uart_test("test_guest_mode")
+
+
+if __name__ == "__main__":
+ QemuSystemTest.main()
diff --git a/tests/functional/meson.build b/tests/functional/meson.build
index c158197c4b..c7362dd00e 100644
--- a/tests/functional/meson.build
+++ b/tests/functional/meson.build
@@ -14,6 +14,7 @@ subdir('aarch64')
subdir('alpha')
subdir('arm')
subdir('avr')
+subdir('hexagon')
subdir('hppa')
subdir('i386')
subdir('loongarch64')