[igt-dev] [PATCH i-g-t 18/23] i915/perf: Fix DG2 A0 report header
Umesh Nerlige Ramappa
umesh.nerlige.ramappa at intel.com
Mon Aug 22 23:56:52 UTC 2022
Timestamp is still 32 bits in DG2 A0. Fix that. Specify variants of DG2
that have the OA format header bug
Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa at intel.com>
---
tests/i915/perf.c | 45 ++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 44 insertions(+), 1 deletion(-)
diff --git a/tests/i915/perf.c b/tests/i915/perf.c
index 52de5d38..6951735b 100644
--- a/tests/i915/perf.c
+++ b/tests/i915/perf.c
@@ -40,6 +40,7 @@
#include "i915/gem.h"
#include "i915/perf.h"
+#include "i915_pciids.h"
#include "igt.h"
#include "igt_perf.h"
#include "igt_sysfs.h"
@@ -503,6 +504,47 @@ cs_timestamp_frequency(int fd)
return value;
}
+/*
+ * Hacky ways until IGT is fully aware of steppings:
+ *
+ * WA is permanent for G11. For other DG2s, bug is fixed from B0 onwards.
+ * Steps A0 and A1 correspond to 0 and 1 revid values.
+ */
+struct perf_dev_info {
+ bool is_dg2_g11;
+};
+
+static const struct perf_dev_info dg2_g11_info = {
+ .is_dg2_g11 = true,
+};
+
+static const struct pci_id_match perf_dev_match[] = {
+ INTEL_DG2_G11_IDS(&dg2_g11_info),
+};
+
+static const struct perf_dev_info *__dev_info(uint32_t device_id)
+{
+ static const struct perf_dev_info *cache;
+ static int _iter;
+
+ if (_iter)
+ goto out;
+
+ for (_iter = 0; _iter < ARRAY_SIZE(perf_dev_match); _iter++)
+ if (device_id == perf_dev_match[_iter].device_id)
+ cache = (void *) perf_dev_match[_iter].match_data;
+
+out:
+ return cache;
+}
+
+#define IS_DG2_G11(__d) (__dev_info(__d) ? __dev_info(__d)->is_dg2_g11 : false)
+#define IS_DG2_A0(__d) (IS_DG2(__d) && (intel_perf->devinfo.revision == 0))
+#define IS_DG2_A1(__d) (IS_DG2(__d) && (intel_perf->devinfo.revision == 1))
+
+#define HAS_OA_FORMAT_64BIT_HDR_BUG(__d) \
+ (IS_DG2_G11(__d) || IS_DG2_A0(__d) || IS_DG2_A1(__d))
+
static uint64_t
cs_timebase_scale(uint32_t u32_delta)
{
@@ -514,7 +556,8 @@ oa_timestamp(const uint32_t *report, enum drm_i915_oa_format format)
{
struct oa_format fmt = get_oa_format(format);
- return fmt.report_hdr_64bit ? *(uint64_t *)&report[2] : report[1];
+ return fmt.report_hdr_64bit && !HAS_OA_FORMAT_64BIT_HDR_BUG(devid) ?
+ *(uint64_t *)&report[2] : report[1];
}
static uint64_t
--
2.25.1
More information about the igt-dev
mailing list