[igt-dev] [PATCH i-g-t 18/23] i915/perf: Fix DG2 A0 report header
Umesh Nerlige Ramappa
umesh.nerlige.ramappa at intel.com
Tue Sep 6 18:37:07 UTC 2022
On Tue, Sep 06, 2022 at 05:17:14PM +0300, Lionel Landwerlin wrote:
>On 23/08/2022 21:30, Umesh Nerlige Ramappa wrote:
>>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.
>
>
>Do you have the Wa number for reference?
Should be - 1608133521, the corresponding kernel patch is
https://patchwork.freedesktop.org/patch/498940/?series=107584&rev=2
Thanks,
Umesh
>
>
>>+ */
>>+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
>
>
More information about the igt-dev
mailing list