All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Alex Bennée" <alex.bennee@linaro.org>
To: qemu-devel@nongnu.org
Cc: damien.hedde@greensocs.com,
	"Peter Maydell" <peter.maydell@linaro.org>,
	luis.machado@linaro.org, richard.henderson@linaro.org,
	"open list:ARM TCG CPUs" <qemu-arm@nongnu.org>,
	alan.hayward@arm.com, "Alex Bennée" <alex.bennee@linaro.org>
Subject: [PATCH  v6 19/22] tests/tcg/aarch64: add SVE iotcl test
Date: Wed,  5 Feb 2020 17:10:28 +0000	[thread overview]
Message-ID: <20200205171031.22582-20-alex.bennee@linaro.org> (raw)
In-Reply-To: <20200205171031.22582-1-alex.bennee@linaro.org>

This is a fairly bare-bones test of setting the various vector sizes
for SVE which will only fail if the PR_SVE_SET_VL can't reduce the
user-space vector length by powers of 2.

However we will also be able to use it in a future test which
exercises the GDB stub.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

---
v3
  - use index to fill zreg
  - CROSS_CC_HAS_SVE
v5
  - merge conflicts
v6
  - drop id check
---
 tests/tcg/aarch64/sve-ioctls.c    | 70 +++++++++++++++++++++++++++++++
 tests/tcg/aarch64/Makefile.target |  4 ++
 2 files changed, 74 insertions(+)
 create mode 100644 tests/tcg/aarch64/sve-ioctls.c

diff --git a/tests/tcg/aarch64/sve-ioctls.c b/tests/tcg/aarch64/sve-ioctls.c
new file mode 100644
index 00000000000..9544dffa0ee
--- /dev/null
+++ b/tests/tcg/aarch64/sve-ioctls.c
@@ -0,0 +1,70 @@
+/*
+ * SVE ioctls tests
+ *
+ * Test the SVE width setting ioctls work and provide a base for
+ * testing the gdbstub.
+ *
+ * Copyright (c) 2019 Linaro Ltd
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+#include <sys/prctl.h>
+#include <asm/hwcap.h>
+#include <stdio.h>
+#include <sys/auxv.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+#ifndef HWCAP_CPUID
+#define HWCAP_CPUID (1 << 11)
+#endif
+
+#define SVE_MAX_QUADS  (2048 / 128)
+#define BYTES_PER_QUAD (128 / 8)
+
+#define get_cpu_reg(id) ({                                      \
+            unsigned long __val;                                \
+            asm("mrs %0, "#id : "=r" (__val));                  \
+            __val;                                              \
+        })
+
+static int do_sve_ioctl_test(void)
+{
+    int i, res, init_vq;
+
+    res = prctl(PR_SVE_GET_VL, 0, 0, 0, 0);
+    if (res < 0) {
+        printf("FAILED to PR_SVE_GET_VL (%d)", res);
+        return -1;
+    }
+    init_vq = res & PR_SVE_VL_LEN_MASK;
+
+    for (i = init_vq; i > 15; i /= 2) {
+        printf("Checking PR_SVE_SET_VL=%d\n", i);
+        res = prctl(PR_SVE_SET_VL, i, 0, 0, 0, 0);
+        if (res < 0) {
+            printf("FAILED to PR_SVE_SET_VL (%d)", res);
+            return -1;
+        }
+        asm("index z0.b, #0, #1\n"
+            ".global __sve_ld_done\n"
+            "__sve_ld_done:\n"
+            "mov z0.b, #0\n"
+            : /* no outputs kept */
+            : /* no inputs */
+            : "memory", "z0");
+    }
+    printf("PASS\n");
+    return 0;
+}
+
+int main(int argc, char **argv)
+{
+    /* we also need to probe for the ioctl support */
+    if (getauxval(AT_HWCAP) & HWCAP_SVE) {
+        return do_sve_ioctl_test();
+    } else {
+        printf("SKIP: no HWCAP_SVE on this system\n");
+        return 0;
+    }
+}
diff --git a/tests/tcg/aarch64/Makefile.target b/tests/tcg/aarch64/Makefile.target
index b61b53e4dd1..c879932ff6c 100644
--- a/tests/tcg/aarch64/Makefile.target
+++ b/tests/tcg/aarch64/Makefile.target
@@ -47,6 +47,10 @@ ifneq ($(DOCKER_IMAGE)$(CROSS_CC_HAS_SVE),)
 AARCH64_TESTS += sysregs
 sysregs: CFLAGS+=-march=armv8.1-a+sve
 
+# SVE ioctl test
+AARCH64_TESTS += sve-ioctls
+sve-ioctls: CFLAGS+=-march=armv8.1-a+sve
+
 ifneq ($(HAVE_GDB_BIN),)
 GDB_SCRIPT=$(SRC_PATH)/tests/guest-debug/run-test.py
 
-- 
2.20.1



  parent reply	other threads:[~2020-02-05 17:27 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-05 17:10 [PATCH v6 00/22] gdbstub refactor and SVE support Alex Bennée
2020-02-05 17:10 ` [PATCH v6 01/22] gdbstub: make GDBState static and have common init function Alex Bennée
2020-02-05 17:10 ` [PATCH v6 02/22] gdbstub: stop passing GDBState * around and use global Alex Bennée
2020-02-05 17:10 ` [PATCH v6 03/22] gdbstub: move str_buf to GDBState and use GString Alex Bennée
2020-02-05 17:10 ` [PATCH v6 04/22] gdbstub: move mem_buf to GDBState and use GByteArray Alex Bennée
2020-02-05 17:10 ` [PATCH v6 05/22] gdbstub: add helper for 128 bit registers Alex Bennée
2020-02-05 17:10 ` [PATCH v6 06/22] target/arm: use gdb_get_reg helpers Alex Bennée
2020-02-05 17:10 ` [PATCH v6 07/22] target/m68k: " Alex Bennée
2020-02-05 17:10 ` [PATCH v6 08/22] target/i386: " Alex Bennée
2020-02-06 11:14   ` Richard Henderson
2020-02-05 17:10 ` [PATCH v6 09/22] gdbstub: extend GByteArray to read register helpers Alex Bennée
2020-02-05 17:10   ` Alex Bennée
2020-02-05 17:10 ` [PATCH v6 10/22] target/arm: prepare for multiple dynamic XMLs Alex Bennée
2020-02-05 17:10 ` [PATCH v6 11/22] target/arm: explicitly encode regnum in our XML Alex Bennée
2020-02-05 17:10 ` [PATCH v6 12/22] target/arm: default SVE length to 64 bytes for linux-user Alex Bennée
2020-02-06 11:19   ` Richard Henderson
2020-02-05 17:10 ` [PATCH v6 13/22] target/arm: generate xml description of our SVE registers Alex Bennée
2020-02-06 11:20   ` Richard Henderson
2020-02-06 11:20   ` Richard Henderson
2020-02-05 17:10 ` [PATCH v6 14/22] target/arm: don't bother with id_aa64pfr0_read for USER_ONLY Alex Bennée
2020-02-05 17:10 ` [PATCH v6 15/22] tests/tcg/aarch64: userspace system register test Alex Bennée
2020-02-05 17:10 ` [PATCH v6 16/22] configure: allow user to specify what gdb to use Alex Bennée
2020-02-05 17:10 ` [PATCH v6 17/22] tests/guest-debug: add a simple test runner Alex Bennée
2020-02-05 17:10 ` [PATCH v6 18/22] tests/tcg/aarch64: add a gdbstub testcase for SVE registers Alex Bennée
2020-02-05 17:10 ` Alex Bennée [this message]
2020-02-05 17:10 ` [PATCH v6 20/22] tests/tcg/aarch64: add test-sve-ioctl guest-debug test Alex Bennée
2020-02-05 17:10 ` [PATCH v6 21/22] gdbstub: change GDBState.last_packet to GByteArray Alex Bennée
2020-02-05 17:10 ` [PATCH v6 22/22] gdbstub: do not split gdb_monitor_write payload Alex Bennée
2020-02-05 18:00 ` [PATCH v6 00/22] gdbstub refactor and SVE support no-reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200205171031.22582-20-alex.bennee@linaro.org \
    --to=alex.bennee@linaro.org \
    --cc=alan.hayward@arm.com \
    --cc=damien.hedde@greensocs.com \
    --cc=luis.machado@linaro.org \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.