summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/meson.build1
-rw-r--r--lib/xe/xe_ggtt.c22
-rw-r--r--lib/xe/xe_ggtt.h21
-rw-r--r--lib/xe/xe_mmio.h3
4 files changed, 45 insertions, 2 deletions
diff --git a/lib/meson.build b/lib/meson.build
index 12d78de20..3001b473e 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -126,6 +126,7 @@ lib_sources = [
'igt_msm.c',
'igt_dsc.c',
'igt_hook.c',
+ 'xe/xe_ggtt.c',
'xe/xe_gt.c',
'xe/xe_ioctl.c',
'xe/xe_legacy.c',
diff --git a/lib/xe/xe_ggtt.c b/lib/xe/xe_ggtt.c
new file mode 100644
index 000000000..96b189b7a
--- /dev/null
+++ b/lib/xe/xe_ggtt.c
@@ -0,0 +1,22 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright(c) 2026 Intel Corporation. All rights reserved.
+ */
+
+#include "igt.h"
+#include "xe/xe_ggtt.h"
+
+xe_ggtt_pte_mask_t xe_ggtt_get_gpa_mask(int pf_fd)
+{
+ if (IS_TIGERLAKE(intel_get_drm_devid(pf_fd)))
+ return TGL_GGTT_PTE_ADDR_MASK;
+
+ return GGTT_PTE_ADDR_MASK;
+}
+
+uint64_t xe_ggtt_pte_get_gpa(int pf_fd, xe_ggtt_pte_t pte)
+{
+ xe_ggtt_pte_mask_t mask = xe_ggtt_get_gpa_mask(pf_fd);
+
+ return (uint64_t)((pte & mask) >> GGTT_PTE_ADDR_SHIFT);
+}
diff --git a/lib/xe/xe_ggtt.h b/lib/xe/xe_ggtt.h
new file mode 100644
index 000000000..5e4038591
--- /dev/null
+++ b/lib/xe/xe_ggtt.h
@@ -0,0 +1,21 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright(c) 2026 Intel Corporation. All rights reserved.
+ */
+
+#ifndef __XE_GGTT_H__
+#define __XE_GGTT_H__
+
+#include <stdint.h>
+
+#define GGTT_PTE_ADDR_MASK GENMASK_ULL(45, 12)
+#define TGL_GGTT_PTE_ADDR_MASK GENMASK_ULL(38, 12)
+#define GGTT_PTE_ADDR_SHIFT 12
+
+typedef uint64_t xe_ggtt_pte_t;
+typedef uint64_t xe_ggtt_pte_mask_t;
+
+xe_ggtt_pte_mask_t xe_ggtt_get_gpa_mask(int pf_fd);
+uint64_t xe_ggtt_pte_get_gpa(int pf_fd, xe_ggtt_pte_t pte);
+
+#endif /* __XE_GGTT_H__ */
diff --git a/lib/xe/xe_mmio.h b/lib/xe/xe_mmio.h
index 030c50a2e..65aea65ea 100644
--- a/lib/xe/xe_mmio.h
+++ b/lib/xe/xe_mmio.h
@@ -5,6 +5,7 @@
#include "lib/intel_io.h"
#include "lib/igt_sizes.h"
+#include "lib/xe/xe_ggtt.h"
#ifndef XE_MMIO_H
#define XE_MMIO_H
@@ -12,8 +13,6 @@
#define TILE_MMIO_SIZE SZ_16M
#define GGTT_OFFSET_IN_TILE SZ_8M
-typedef uint64_t xe_ggtt_pte_t;
-
struct xe_mmio {
int fd;
bool init;