Skip to content

Commit ee11d2d

Browse files
unerligejnikula
authored andcommitted
drm/i915/perf: Update handling of MMIO triggered reports
On XEHP platforms user is not able to find MMIO triggered reports in the OA buffer since i915 squashes the context ID fields. These context ID fields hold the MMIO trigger markers. Update logic to not squash the context ID fields of MMIO triggered reports. Fixes: cba94bb ("drm/i915/perf: Determine context valid in OA reports") Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com> Reviewed-by: Ashutosh Dixit <ashutosh.dixit@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20231219000543.1087706-1-umesh.nerlige.ramappa@intel.com (cherry picked from commit 0c68132) Signed-off-by: Jani Nikula <jani.nikula@intel.com>
1 parent 2bd7a06 commit ee11d2d

File tree

1 file changed

+34
-5
lines changed

1 file changed

+34
-5
lines changed

drivers/gpu/drm/i915/i915_perf.c

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -772,10 +772,6 @@ static int gen8_append_oa_reports(struct i915_perf_stream *stream,
772772
* The reason field includes flags identifying what
773773
* triggered this specific report (mostly timer
774774
* 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.
779775
*/
780776
reason = oa_report_reason(stream, report);
781777
ctx_id = oa_context_id(stream, report32);
@@ -787,8 +783,41 @@ static int gen8_append_oa_reports(struct i915_perf_stream *stream,
787783
*
788784
* Note: that we don't clear the valid_ctx_bit so userspace can
789785
* 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.
790817
*/
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)) {
792821
ctx_id = INVALID_CTX_ID;
793822
oa_context_id_squash(stream, report32);
794823
}

0 commit comments

Comments
 (0)