Browse Source
This patch adds a test case to test SME register exposure to a remote gdb debugging session. This test simply sets and reads SME registers. Signed-off-by: Vacha Bhavsar <vacha.bhavsar@oss.qualcomm.com> Message-id: 20250909161012.2561593-4-vacha.bhavsar@oss.qualcomm.com [PMM: fixed various python formatting nits] Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>pull/305/head
committed by
Peter Maydell
3 changed files with 152 additions and 0 deletions
@ -0,0 +1,117 @@ |
|||
# |
|||
# Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. |
|||
# |
|||
# SPDX-License-Identifier: GPL-2.0-or-later |
|||
|
|||
# |
|||
# Test the SME registers are visible and changeable via gdbstub |
|||
# |
|||
# This is launched via tests/guest-debug/run-test.py |
|||
# |
|||
|
|||
import argparse |
|||
import gdb |
|||
from test_gdbstub import main, report |
|||
|
|||
MAGIC = 0x01020304 |
|||
BASIC_ZA_TEST = 0 |
|||
TILE_SLICE_TEST = 0 |
|||
|
|||
|
|||
def run_test(): |
|||
"""Run the requested test(s) for SME ZA gdbstub support""" |
|||
|
|||
if BASIC_ZA_TEST: |
|||
run_basic_sme_za_gdbstub_support_test() |
|||
if TILE_SLICE_TEST: |
|||
run_basic_sme_za_tile_slice_gdbstub_support_test() |
|||
|
|||
|
|||
def run_basic_sme_za_gdbstub_support_test(): |
|||
"""Test reads and writes to the SME ZA register at the byte level""" |
|||
|
|||
frame = gdb.selected_frame() |
|||
rname = "za" |
|||
za = frame.read_register(rname) |
|||
report(True, "Reading %s" % rname) |
|||
|
|||
# Writing to the ZA register, byte by byte. |
|||
for i in range(0, 16): |
|||
for j in range(0, 16): |
|||
cmd = "set $za[%d][%d] = 0x01" % (i, j) |
|||
gdb.execute(cmd) |
|||
report(True, "%s" % cmd) |
|||
|
|||
# Reading from the ZA register, byte by byte. |
|||
for i in range(0, 16): |
|||
for j in range(0, 16): |
|||
reg = "$za[%d][%d]" % (i, j) |
|||
v = gdb.parse_and_eval(reg) |
|||
report(str(v.type) == "uint8_t", "size of %s" % (reg)) |
|||
report(v == 0x1, "%s is 0x%x" % (reg, 0x1)) |
|||
|
|||
|
|||
def run_basic_sme_za_tile_slice_gdbstub_support_test(): |
|||
"""Test reads and writes of SME ZA horizontal and vertical tile slices |
|||
|
|||
Test if SME ZA tile slices, both horizontal and vertical, |
|||
can be correctly read and written to. The sizes to test |
|||
are quadwords and doublewords. |
|||
""" |
|||
|
|||
sizes = {} |
|||
sizes["q"] = "uint128_t" |
|||
sizes["d"] = "uint64_t" |
|||
|
|||
# Accessing requested sizes of elements of ZA |
|||
for size in sizes: |
|||
|
|||
# Accessing various ZA tiles |
|||
for i in range(0, 4): |
|||
|
|||
# Accessing various horizontal slices for each ZA tile |
|||
for j in range(0, 4): |
|||
# Writing to various elements in each tile slice |
|||
for k in range(0, 4): |
|||
cmd = "set $za%dh%c%d[%d] = 0x%x" % (i, size, j, k, MAGIC) |
|||
gdb.execute(cmd) |
|||
report(True, "%s" % cmd) |
|||
|
|||
# Reading from the written elements in each tile slice |
|||
for k in range(0, 4): |
|||
reg = "$za%dh%c%d[%d]" % (i, size, j, k) |
|||
v = gdb.parse_and_eval(reg) |
|||
report(str(v.type) == sizes[size], "size of %s" % (reg)) |
|||
report(v == MAGIC, "%s is 0x%x" % (reg, MAGIC)) |
|||
|
|||
# Accessing various vertical slices for each ZA tile |
|||
for j in range(0, 4): |
|||
# Writing to various elements in each tile slice |
|||
for k in range(0, 4): |
|||
cmd = "set $za%dv%c%d[%d] = 0x%x" % (i, size, j, k, MAGIC) |
|||
gdb.execute(cmd) |
|||
report(True, "%s" % cmd) |
|||
|
|||
# Reading from the written elements in each tile slice |
|||
for k in range(0, 4): |
|||
reg = "$za%dv%c%d[%d]" % (i, size, j, k) |
|||
v = gdb.parse_and_eval(reg) |
|||
report(str(v.type) == sizes[size], "size of %s" % (reg)) |
|||
report(v == MAGIC, "%s is 0x%x" % (reg, MAGIC)) |
|||
|
|||
|
|||
parser = argparse.ArgumentParser(description="A gdbstub test for SME support") |
|||
parser.add_argument("--gdb_basic_za_test", |
|||
help="Enable test for basic SME ZA support", |
|||
action="store_true") |
|||
parser.add_argument("--gdb_tile_slice_test", |
|||
help="Enable test for ZA tile slice support", |
|||
action="store_true") |
|||
args = parser.parse_args() |
|||
|
|||
if args.gdb_basic_za_test: |
|||
BASIC_ZA_TEST = 1 |
|||
if args.gdb_tile_slice_test: |
|||
TILE_SLICE_TEST = 1 |
|||
|
|||
main(run_test, expected_arch="aarch64") |
|||
Loading…
Reference in new issue