[igt-dev] [PATCH i-g-t 04/16] drm-uapi/xe_drm: Remove MMIO ioctl and align with latest uapi
Rodrigo Vivi
rodrigo.vivi at intel.com
Tue Sep 19 14:19:47 UTC 2023
From: Francois Dugast <francois.dugast at intel.com>
Align with commit ("drm/xe/uapi: Remove MMIO ioctl")
Signed-off-by: Francois Dugast <francois.dugast at intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi at intel.com>
---
include/drm-uapi/xe_drm.h | 31 +-
tests/intel-ci/xe-fast-feedback.testlist | 2 -
tests/intel/xe_mmio.c | 91 ------
tests/meson.build | 1 -
tools/meson.build | 1 -
tools/xe_reg.c | 366 -----------------------
6 files changed, 4 insertions(+), 488 deletions(-)
delete mode 100644 tests/intel/xe_mmio.c
delete mode 100644 tools/xe_reg.c
diff --git a/include/drm-uapi/xe_drm.h b/include/drm-uapi/xe_drm.h
index 078edd9f8..1d869f5e8 100644
--- a/include/drm-uapi/xe_drm.h
+++ b/include/drm-uapi/xe_drm.h
@@ -106,11 +106,10 @@ struct xe_user_extension {
#define DRM_XE_EXEC_QUEUE_CREATE 0x06
#define DRM_XE_EXEC_QUEUE_DESTROY 0x07
#define DRM_XE_EXEC 0x08
-#define DRM_XE_MMIO 0x09
-#define DRM_XE_EXEC_QUEUE_SET_PROPERTY 0x0a
-#define DRM_XE_WAIT_USER_FENCE 0x0b
-#define DRM_XE_VM_MADVISE 0x0c
-#define DRM_XE_EXEC_QUEUE_GET_PROPERTY 0x0d
+#define DRM_XE_EXEC_QUEUE_SET_PROPERTY 0x09
+#define DRM_XE_WAIT_USER_FENCE 0x0a
+#define DRM_XE_VM_MADVISE 0x0b
+#define DRM_XE_EXEC_QUEUE_GET_PROPERTY 0x0c
/* Must be kept compact -- no holes */
#define DRM_IOCTL_XE_DEVICE_QUERY DRM_IOWR(DRM_COMMAND_BASE + DRM_XE_DEVICE_QUERY, struct drm_xe_device_query)
@@ -123,7 +122,6 @@ struct xe_user_extension {
#define DRM_IOCTL_XE_EXEC_QUEUE_GET_PROPERTY DRM_IOWR(DRM_COMMAND_BASE + DRM_XE_EXEC_QUEUE_GET_PROPERTY, struct drm_xe_exec_queue_get_property)
#define DRM_IOCTL_XE_EXEC_QUEUE_DESTROY DRM_IOW(DRM_COMMAND_BASE + DRM_XE_EXEC_QUEUE_DESTROY, struct drm_xe_exec_queue_destroy)
#define DRM_IOCTL_XE_EXEC DRM_IOW(DRM_COMMAND_BASE + DRM_XE_EXEC, struct drm_xe_exec)
-#define DRM_IOCTL_XE_MMIO DRM_IOWR(DRM_COMMAND_BASE + DRM_XE_MMIO, struct drm_xe_mmio)
#define DRM_IOCTL_XE_EXEC_QUEUE_SET_PROPERTY DRM_IOW(DRM_COMMAND_BASE + DRM_XE_EXEC_QUEUE_SET_PROPERTY, struct drm_xe_exec_queue_set_property)
#define DRM_IOCTL_XE_WAIT_USER_FENCE DRM_IOWR(DRM_COMMAND_BASE + DRM_XE_WAIT_USER_FENCE, struct drm_xe_wait_user_fence)
#define DRM_IOCTL_XE_VM_MADVISE DRM_IOW(DRM_COMMAND_BASE + DRM_XE_VM_MADVISE, struct drm_xe_vm_madvise)
@@ -939,27 +937,6 @@ struct drm_xe_exec {
__u64 reserved[2];
};
-struct drm_xe_mmio {
- /** @extensions: Pointer to the first extension struct, if any */
- __u64 extensions;
-
- __u32 addr;
-
-#define DRM_XE_MMIO_8BIT 0x0
-#define DRM_XE_MMIO_16BIT 0x1
-#define DRM_XE_MMIO_32BIT 0x2
-#define DRM_XE_MMIO_64BIT 0x3
-#define DRM_XE_MMIO_BITS_MASK 0x3
-#define DRM_XE_MMIO_READ 0x4
-#define DRM_XE_MMIO_WRITE 0x8
- __u32 flags;
-
- __u64 value;
-
- /** @reserved: Reserved */
- __u64 reserved[2];
-};
-
/**
* struct drm_xe_wait_user_fence - wait user fence
*
diff --git a/tests/intel-ci/xe-fast-feedback.testlist b/tests/intel-ci/xe-fast-feedback.testlist
index 610cc958c..a9fe43b08 100644
--- a/tests/intel-ci/xe-fast-feedback.testlist
+++ b/tests/intel-ci/xe-fast-feedback.testlist
@@ -141,8 +141,6 @@ igt at xe_mmap@bad-object
igt at xe_mmap@system
igt at xe_mmap@vram
igt at xe_mmap@vram-system
-igt at xe_mmio@mmio-timestamp
-igt at xe_mmio@mmio-invalid
igt at xe_pm_residency@gt-c6-on-idle
igt at xe_prime_self_import@basic-with_one_bo
igt at xe_prime_self_import@basic-with_fd_dup
diff --git a/tests/intel/xe_mmio.c b/tests/intel/xe_mmio.c
deleted file mode 100644
index 9ac544770..000000000
--- a/tests/intel/xe_mmio.c
+++ /dev/null
@@ -1,91 +0,0 @@
-// SPDX-License-Identifier: MIT
-/*
- * Copyright © 2023 Intel Corporation
- */
-
-/**
- * TEST: Test if mmio feature
- * Category: Software building block
- * Sub-category: mmio
- * Functionality: mmap
- */
-
-#include "igt.h"
-
-#include "xe_drm.h"
-#include "xe/xe_ioctl.h"
-#include "xe/xe_query.h"
-
-#include <string.h>
-
-#define RCS_TIMESTAMP 0x2358
-
-/**
- * SUBTEST: mmio-timestamp
- * Test category: functionality test
- * Description:
- * Try to run mmio ioctl with 32 and 64 bits and check it a timestamp
- * matches
- */
-
-static void test_xe_mmio_timestamp(int fd)
-{
- int ret;
- struct drm_xe_mmio mmio = {
- .addr = RCS_TIMESTAMP,
- .flags = DRM_XE_MMIO_READ | DRM_XE_MMIO_64BIT,
- };
- ret = igt_ioctl(fd, DRM_IOCTL_XE_MMIO, &mmio);
- if (!ret)
- igt_debug("RCS_TIMESTAMP 64b = 0x%llx\n", mmio.value);
- igt_assert(!ret);
- mmio.flags = DRM_XE_MMIO_READ | DRM_XE_MMIO_32BIT;
- mmio.value = 0;
- ret = igt_ioctl(fd, DRM_IOCTL_XE_MMIO, &mmio);
- if (!ret)
- igt_debug("RCS_TIMESTAMP 32b = 0x%llx\n", mmio.value);
- igt_assert(!ret);
-}
-
-
-/**
- * SUBTEST: mmio-invalid
- * Test category: negative test
- * Description: Try to run mmio ioctl with 8, 16 and 32 and 64 bits mmio
- */
-
-static void test_xe_mmio_invalid(int fd)
-{
- int ret;
- struct drm_xe_mmio mmio = {
- .addr = RCS_TIMESTAMP,
- .flags = DRM_XE_MMIO_READ | DRM_XE_MMIO_8BIT,
- };
- ret = igt_ioctl(fd, DRM_IOCTL_XE_MMIO, &mmio);
- igt_assert(ret);
- mmio.flags = DRM_XE_MMIO_READ | DRM_XE_MMIO_16BIT;
- mmio.value = 0;
- ret = igt_ioctl(fd, DRM_IOCTL_XE_MMIO, &mmio);
- igt_assert(ret);
- mmio.addr = RCS_TIMESTAMP;
- mmio.flags = DRM_XE_MMIO_READ | DRM_XE_MMIO_64BIT;
- mmio.value = 0x1;
- ret = igt_ioctl(fd, DRM_IOCTL_XE_MMIO, &mmio);
- igt_assert(ret);
-}
-
-igt_main
-{
- int fd;
-
- igt_fixture
- fd = drm_open_driver(DRIVER_XE);
-
- igt_subtest("mmio-timestamp")
- test_xe_mmio_timestamp(fd);
- igt_subtest("mmio-invalid")
- test_xe_mmio_invalid(fd);
-
- igt_fixture
- drm_close_driver(fd);
-}
diff --git a/tests/meson.build b/tests/meson.build
index 31492bf7b..7c67b22d4 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -292,7 +292,6 @@ intel_xe_progs = [
'xe_live_ktest',
'xe_media_fill',
'xe_mmap',
- 'xe_mmio',
'xe_module_load',
'xe_noexec_ping_pong',
'xe_pm',
diff --git a/tools/meson.build b/tools/meson.build
index 21e244c24..ac79d8b58 100644
--- a/tools/meson.build
+++ b/tools/meson.build
@@ -42,7 +42,6 @@ tools_progs = [
'intel_gvtg_test',
'dpcd_reg',
'lsgpu',
- 'xe_reg',
]
tool_deps = igt_deps
tool_deps += zlib
diff --git a/tools/xe_reg.c b/tools/xe_reg.c
deleted file mode 100644
index 1f7b384d3..000000000
--- a/tools/xe_reg.c
+++ /dev/null
@@ -1,366 +0,0 @@
-// SPDX-License-Identifier: MIT
-/*
- * Copyright © 2021 Intel Corporation
- */
-
-#include "igt.h"
-#include "igt_device_scan.h"
-
-#include "xe_drm.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#define DECL_XE_MMIO_READ_FN(bits) \
-static inline uint##bits##_t \
-xe_mmio_read##bits(int fd, uint32_t reg) \
-{ \
- struct drm_xe_mmio mmio = { \
- .addr = reg, \
- .flags = DRM_XE_MMIO_READ | DRM_XE_MMIO_##bits##BIT, \
- }; \
-\
- igt_assert_eq(igt_ioctl(fd, DRM_IOCTL_XE_MMIO, &mmio), 0); \
-\
- return mmio.value;\
-}\
-static inline void \
-xe_mmio_write##bits(int fd, uint32_t reg, uint##bits##_t value) \
-{ \
- struct drm_xe_mmio mmio = { \
- .addr = reg, \
- .flags = DRM_XE_MMIO_WRITE | DRM_XE_MMIO_##bits##BIT, \
- .value = value, \
- }; \
-\
- igt_assert_eq(igt_ioctl(fd, DRM_IOCTL_XE_MMIO, &mmio), 0); \
-}
-
-DECL_XE_MMIO_READ_FN(8)
-DECL_XE_MMIO_READ_FN(16)
-DECL_XE_MMIO_READ_FN(32)
-DECL_XE_MMIO_READ_FN(64)
-
-static void print_help(FILE *fp)
-{
- fprintf(fp, "usage: xe_reg read REG1 [REG2]...\n");
- fprintf(fp, " xe_reg write REG VALUE\n");
-}
-
-enum ring {
- RING_UNKNOWN = -1,
- RING_RCS0,
- RING_BCS0,
-};
-
-static const struct ring_info {
- enum ring ring;
- const char *name;
- uint32_t mmio_base;
-} ring_info[] = {
- {RING_RCS0, "rcs0", 0x02000, },
- {RING_BCS0, "bcs0", 0x22000, },
-};
-
-static const struct ring_info *ring_info_for_name(const char *name)
-{
- int i;
-
- for (i = 0; i < ARRAY_SIZE(ring_info); i++)
- if (strcmp(name, ring_info[i].name) == 0)
- return &ring_info[i];
-
- return NULL;
-}
-
-struct reg_info {
- const char *name;
- bool is_ring;
- uint32_t addr_low;
- uint32_t addr_high;
-} reg_info[] = {
-#define REG32(name, addr) { #name, false, addr }
-#define REG64(name, low, high) { #name, false, low, high }
-#define RING_REG32(name, addr) { #name, true, addr }
-#define RING_REG64(name, low, high) { #name, true, low, high }
-
- RING_REG64(ACTHD, 0x74, 0x5c),
- RING_REG32(BB_ADDR_DIFF, 0x154),
- RING_REG64(BB_ADDR, 0x140, 0x168),
- RING_REG32(BB_PER_CTX_PTR, 0x2c0),
- RING_REG64(EXECLIST_STATUS, 0x234, 0x238),
- RING_REG64(EXECLIST_SQ0, 0x510, 0x514),
- RING_REG64(EXECLIST_SQ1, 0x518, 0x51c),
- RING_REG32(HWS_PGA, 0x80),
- RING_REG32(INDIRECT_CTX, 0x1C4),
- RING_REG32(INDIRECT_CTX_OFFSET, 0x1C8),
- RING_REG32(NOPID, 0x94),
- RING_REG64(PML4E, 0x270, 0x274),
- RING_REG32(RING_BUFFER_CTL, 0x3c),
- RING_REG32(RING_BUFFER_HEAD, 0x34),
- RING_REG32(RING_BUFFER_START, 0x38),
- RING_REG32(RING_BUFFER_TAIL, 0x30),
- RING_REG64(SBB_ADDR, 0x114, 0x11c),
- RING_REG32(SBB_STATE, 0x118),
-
-#undef REG32
-#undef REG64
-#undef RING_REG32
-#undef RING_REG64
-};
-
-static const struct reg_info *reg_info_for_name(const char *name)
-{
- int i;
-
- for (i = 0; i < ARRAY_SIZE(reg_info); i++)
- if (strcmp(name, reg_info[i].name) == 0)
- return ®_info[i];
-
- return NULL;
-}
-
-static int print_reg_for_info(int xe, FILE *fp, const struct reg_info *reg,
- const struct ring_info *ring)
-{
- if (reg->is_ring) {
- if (!ring) {
- fprintf(stderr, "%s is a ring register but --ring "
- "not set\n", reg->name);
- return EXIT_FAILURE;
- }
-
- if (reg->addr_high) {
- uint32_t low = xe_mmio_read32(xe, reg->addr_low +
- ring->mmio_base);
- uint32_t high = xe_mmio_read32(xe, reg->addr_high +
- ring->mmio_base);
-
- fprintf(fp, "%s[%s] = 0x%08x %08x\n", reg->name,
- ring->name, high, low);
- } else {
- uint32_t value = xe_mmio_read32(xe, reg->addr_low +
- ring->mmio_base);
-
- fprintf(fp, "%s[%s] = 0x%08x\n", reg->name,
- ring->name, value);
- }
- } else {
- if (reg->addr_high) {
- uint32_t low = xe_mmio_read32(xe, reg->addr_low);
- uint32_t high = xe_mmio_read32(xe, reg->addr_high);
-
- fprintf(fp, "%s = 0x%08x %08x\n", reg->name, high, low);
- } else {
- uint32_t value = xe_mmio_read32(xe, reg->addr_low);
-
- fprintf(fp, "%s = 0x%08x\n", reg->name, value);
- }
- }
-
- return 0;
-}
-
-static void print_reg_for_addr(int xe, FILE *fp, uint32_t addr)
-{
- uint32_t value = xe_mmio_read32(xe, addr);
-
- fprintf(fp, "MMIO[0x%05x] = 0x%08x\n", addr, value);
-}
-
-enum opt {
- OPT_UNKNOWN = '?',
- OPT_END = -1,
- OPT_DEVICE,
- OPT_RING,
- OPT_ALL,
-};
-
-static int read_reg(int argc, char *argv[])
-{
- int xe, i, err, index;
- unsigned long reg_addr;
- char *endp = NULL;
- const struct ring_info *ring = NULL;
- enum opt opt;
- bool dump_all = false;
-
- static struct option options[] = {
- { "device", required_argument, NULL, OPT_DEVICE },
- { "ring", required_argument, NULL, OPT_RING },
- { "all", no_argument, NULL, OPT_ALL },
- };
-
- for (opt = 0; opt != OPT_END; ) {
- opt = getopt_long(argc, argv, "", options, &index);
-
- switch (opt) {
- case OPT_DEVICE:
- igt_device_filter_add(optarg);
- break;
- case OPT_RING:
- ring = ring_info_for_name(optarg);
- if (!ring) {
- fprintf(stderr, "invalid ring: %s\n", optarg);
- return EXIT_FAILURE;
- }
- break;
- case OPT_ALL:
- dump_all = true;
- break;
- case OPT_END:
- break;
- case OPT_UNKNOWN:
- return EXIT_FAILURE;
- }
- }
-
- argc -= optind;
- argv += optind;
-
- xe = drm_open_driver(DRIVER_XE);
- if (dump_all) {
- for (i = 0; i < ARRAY_SIZE(reg_info); i++) {
- if (reg_info[i].is_ring != !!ring)
- continue;
-
- print_reg_for_info(xe, stdout, ®_info[i], ring);
- }
- } else {
- for (i = 0; i < argc; i++) {
- const struct reg_info *reg = reg_info_for_name(argv[i]);
- if (reg) {
- err = print_reg_for_info(xe, stdout, reg, ring);
- if (err)
- return err;
- continue;
- }
- reg_addr = strtoul(argv[i], &endp, 16);
- if (!reg_addr || reg_addr >= (4 << 20) || *endp) {
- fprintf(stderr, "invalid reg address '%s'\n",
- argv[i]);
- return EXIT_FAILURE;
- }
- print_reg_for_addr(xe, stdout, reg_addr);
- }
- }
-
- return 0;
-}
-
-static int write_reg_for_info(int xe, const struct reg_info *reg,
- const struct ring_info *ring,
- uint64_t value)
-{
- if (reg->is_ring) {
- if (!ring) {
- fprintf(stderr, "%s is a ring register but --ring "
- "not set\n", reg->name);
- return EXIT_FAILURE;
- }
-
- xe_mmio_write32(xe, reg->addr_low + ring->mmio_base, value);
- if (reg->addr_high) {
- xe_mmio_write32(xe, reg->addr_high + ring->mmio_base,
- value >> 32);
- }
- } else {
- xe_mmio_write32(xe, reg->addr_low, value);
- if (reg->addr_high)
- xe_mmio_write32(xe, reg->addr_high, value >> 32);
- }
-
- return 0;
-}
-
-static void write_reg_for_addr(int xe, uint32_t addr, uint32_t value)
-{
- xe_mmio_write32(xe, addr, value);
-}
-
-static int write_reg(int argc, char *argv[])
-{
- int xe, index;
- unsigned long reg_addr;
- char *endp = NULL;
- const struct ring_info *ring = NULL;
- enum opt opt;
- const char *reg_name;
- const struct reg_info *reg;
- uint64_t value;
-
- static struct option options[] = {
- { "device", required_argument, NULL, OPT_DEVICE },
- { "ring", required_argument, NULL, OPT_RING },
- };
-
- for (opt = 0; opt != OPT_END; ) {
- opt = getopt_long(argc, argv, "", options, &index);
-
- switch (opt) {
- case OPT_DEVICE:
- igt_device_filter_add(optarg);
- break;
- case OPT_RING:
- ring = ring_info_for_name(optarg);
- if (!ring) {
- fprintf(stderr, "invalid ring: %s\n", optarg);
- return EXIT_FAILURE;
- }
- break;
- case OPT_END:
- break;
- case OPT_UNKNOWN:
- return EXIT_FAILURE;
- default:
- break;
- }
- }
-
- argc -= optind;
- argv += optind;
-
- if (argc != 2) {
- print_help(stderr);
- return EXIT_FAILURE;
- }
-
- reg_name = argv[0];
- value = strtoull(argv[1], &endp, 0);
- if (*endp) {
- fprintf(stderr, "Invalid register value: %s\n", argv[1]);
- return EXIT_FAILURE;
- }
-
- xe = drm_open_driver(DRIVER_XE);
-
- reg = reg_info_for_name(reg_name);
- if (reg)
- return write_reg_for_info(xe, reg, ring, value);
-
- reg_addr = strtoul(reg_name, &endp, 16);
- if (!reg_addr || reg_addr >= (4 << 20) || *endp) {
- fprintf(stderr, "invalid reg address '%s'\n", reg_name);
- return EXIT_FAILURE;
- }
- write_reg_for_addr(xe, reg_addr, value);
-
- return 0;
-}
-
-int main(int argc, char *argv[])
-{
- if (argc < 2) {
- print_help(stderr);
- return EXIT_FAILURE;
- }
-
- if (strcmp(argv[1], "read") == 0)
- return read_reg(argc - 1, argv + 1);
- else if (strcmp(argv[1], "write") == 0)
- return write_reg(argc - 1, argv + 1);
-
- fprintf(stderr, "invalid sub-command: %s", argv[1]);
- return EXIT_FAILURE;
-}
--
2.41.0
More information about the igt-dev
mailing list