From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6A4E010E1E9 for ; Tue, 25 Oct 2022 20:07:19 +0000 (UTC) From: Umesh Nerlige Ramappa To: igt-dev@lists.freedesktop.org Date: Tue, 25 Oct 2022 20:07:05 +0000 Message-Id: <20221025200709.83314-26-umesh.nerlige.ramappa@intel.com> In-Reply-To: <20221025200709.83314-1-umesh.nerlige.ramappa@intel.com> References: <20221025200709.83314-1-umesh.nerlige.ramappa@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [igt-dev] [PATCH 25/29] lib/i915/perf: add a raw timestamp utility List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" List-ID: From: Lionel Landwerlin Helpful to figure out the bitshifting needed in OA timestamp. Signed-off-by: Lionel Landwerlin Reviewed-by: Umesh Nerlige Ramappa --- lib/i915/perf.c | 21 +++++++++++++++++++++ lib/i915/perf.h | 4 ++++ tools/i915-perf/i915_perf_reader.c | 7 +++++++ 3 files changed, 32 insertions(+) diff --git a/lib/i915/perf.c b/lib/i915/perf.c index 4c1b75ad..2d309e57 100644 --- a/lib/i915/perf.c +++ b/lib/i915/perf.c @@ -881,3 +881,24 @@ uint64_t intel_perf_read_record_timestamp(const struct intel_perf *perf, return ts; } + +uint64_t intel_perf_read_record_timestamp_raw(const struct intel_perf *perf, + const struct intel_perf_metric_set *metric_set, + const struct drm_i915_perf_record_header *record) +{ + const uint32_t *report32 = (const uint32_t *)(record + 1); + uint64_t ts; + + switch (metric_set->perf_oa_format) { + case I915_OA_FORMAT_A24u40_A14u32_B8_C8: + case I915_OA_FORMAT_A32u40_A4u32_B8_C8: + case I915_OA_FORMAT_A45_B8_C8: + ts = report32[1]; + break; + + default: + assert(0); + } + + return ts; +} diff --git a/lib/i915/perf.h b/lib/i915/perf.h index a0dba342..8a2ef9e7 100644 --- a/lib/i915/perf.h +++ b/lib/i915/perf.h @@ -344,6 +344,10 @@ uint64_t intel_perf_read_record_timestamp(const struct intel_perf *perf, const struct intel_perf_metric_set *metric_set, const struct drm_i915_perf_record_header *record); +uint64_t intel_perf_read_record_timestamp_raw(const struct intel_perf *perf, + const struct intel_perf_metric_set *metric_set, + const struct drm_i915_perf_record_header *record); + #ifdef __cplusplus }; #endif diff --git a/tools/i915-perf/i915_perf_reader.c b/tools/i915-perf/i915_perf_reader.c index 92e43c19..9be1a9fc 100644 --- a/tools/i915-perf/i915_perf_reader.c +++ b/tools/i915-perf/i915_perf_reader.c @@ -252,6 +252,13 @@ main(int argc, char *argv[]) intel_perf_read_record_timestamp(reader.perf, reader.metric_set, reader.records[reader.n_records - 1])); + fprintf(stdout, "OA raw data timestamp range: 0x%016"PRIx64"-0x%016"PRIx64"\n", + intel_perf_read_record_timestamp_raw(reader.perf, + reader.metric_set, + reader.records[0]), + intel_perf_read_record_timestamp_raw(reader.perf, + reader.metric_set, + reader.records[reader.n_records - 1])); if (strcmp(reader.metric_set_uuid, reader.metric_set->hw_config_guid)) { fprintf(stdout, -- 2.25.1