@@ -772,10 +772,6 @@ static int gen8_append_oa_reports(struct i915_perf_stream *stream,
772
772
* The reason field includes flags identifying what
773
773
* triggered this specific report (mostly timer
774
774
* triggered or e.g. due to a context switch).
775
- *
776
- * In MMIO triggered reports, some platforms do not set the
777
- * reason bit in this field and it is valid to have a reason
778
- * field of zero.
779
775
*/
780
776
reason = oa_report_reason (stream , report );
781
777
ctx_id = oa_context_id (stream , report32 );
@@ -787,8 +783,41 @@ static int gen8_append_oa_reports(struct i915_perf_stream *stream,
787
783
*
788
784
* Note: that we don't clear the valid_ctx_bit so userspace can
789
785
* understand that the ID has been squashed by the kernel.
786
+ *
787
+ * Update:
788
+ *
789
+ * On XEHP platforms the behavior of context id valid bit has
790
+ * changed compared to prior platforms. To describe this, we
791
+ * define a few terms:
792
+ *
793
+ * context-switch-report: This is a report with the reason type
794
+ * being context-switch. It is generated when a context switches
795
+ * out.
796
+ *
797
+ * context-valid-bit: A bit that is set in the report ID field
798
+ * to indicate that a valid context has been loaded.
799
+ *
800
+ * gpu-idle: A condition characterized by a
801
+ * context-switch-report with context-valid-bit set to 0.
802
+ *
803
+ * On prior platforms, context-id-valid bit is set to 0 only
804
+ * when GPU goes idle. In all other reports, it is set to 1.
805
+ *
806
+ * On XEHP platforms, context-valid-bit is set to 1 in a context
807
+ * switch report if a new context switched in. For all other
808
+ * reports it is set to 0.
809
+ *
810
+ * This change in behavior causes an issue with MMIO triggered
811
+ * reports. MMIO triggered reports have the markers in the
812
+ * context ID field and the context-valid-bit is 0. The logic
813
+ * below to squash the context ID would render the report
814
+ * useless since the user will not be able to find it in the OA
815
+ * buffer. Since MMIO triggered reports exist only on XEHP,
816
+ * we should avoid squashing these for XEHP platforms.
790
817
*/
791
- if (oa_report_ctx_invalid (stream , report )) {
818
+
819
+ if (oa_report_ctx_invalid (stream , report ) &&
820
+ GRAPHICS_VER_FULL (stream -> engine -> i915 ) < IP_VER (12 , 50 )) {
792
821
ctx_id = INVALID_CTX_ID ;
793
822
oa_context_id_squash (stream , report32 );
794
823
}
0 commit comments