blob: 0834398c3b16448814aebbe94f62ba5d8593e5dc [file]
#!/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")
def test_int_steering(self) -> None:
"""Tests interrupt steering via priority-based routing to
specific threads using STID priority and iassignw.
"""
self.run_uart_test("test_int_steering")
def test_cache(self) -> None:
"""Tests cache operations: dckill/ickill, l2kill, dczeroa,
dccleaninva, cache disable/enable, barriers, and dcinva/dccleana.
"""
self.run_uart_test("test_cache")
def test_l2vic(self) -> None:
"""Tests the L2VIC interrupt controller: enable readback,
interrupt type readback, VID capture, and the fast interface.
"""
self.run_uart_test("test_l2vic")
def test_threads(self) -> None:
"""Tests hardware thread management: start/stop, MODECTL state,
per-thread HTID, shared memory, wait/resume, STID priority, and
SCHEDCFG/BESTWAIT readback.
"""
self.run_uart_test("test_threads")
def test_tlb_mmu(self) -> None:
"""Tests TLB/MMU operations: write/read/probe/invalidate,
global entries, multiple entries, overwrite, ASID matching,
and permission checks.
"""
self.run_uart_test("test_tlb_mmu")
def test_user_mode(self) -> None:
"""Tests user mode / privilege transitions: supervisor mode,
SSR UM/IE/XE/CE/PE bits, and the trap0 user-mode exit handler.
"""
self.run_uart_test("test_user_mode")
if __name__ == "__main__":
QemuSystemTest.main()