From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
Cc: intel-xe@lists.freedesktop.org, kernel-dev@igalia.com
Subject: Re: [PATCH v12 11/13] drm/xe: Force flush system memory AuxCCS framebuffers before scan out
Date: Fri, 26 Sep 2025 22:35:26 +0300 [thread overview]
Message-ID: <aNbq_j39EipWw_pV@intel.com> (raw)
In-Reply-To: <aNZDxGoYxVFfRNOu@intel.com>
On Fri, Sep 26, 2025 at 10:41:56AM +0300, Ville Syrjälä wrote:
> I reverse engineered this a bit and there's definitely a
> MOCS issue at play.
>
> First I noticed that if filled the entire MOCS table with
> UC the problem went away. I then filled the entire table
> with WB and essentially bisected what I need to make UC
> to fix it. And I had to repeat that same process starting
> from the other end of table.
>
> Looks like there is some undocumented magic in the hardware.
>
> MOCS 61 really is special:
> - MOCS 61 UC, others WB, select MOCS 61 -> no corruption
>
> MOCS 0 and 63 are special in other ways:
> - MOCS X UC, others WB, select MOCS X -> corruption
> - MOCS X+0 UC, others WB, select MOCS X -> corruption
> - MOCS X+63 UC, others WB, select MOCS X -> corruption
> - MOCS X+0+63 UC, others WB, select MOCS X -> no corruption
> where X != 61
OK, the MOCS 63 issue was caused by me having L3=WB still in
MOCS X. If I change MOCS X to L3=UC, MOCS 63 no longer makes
a difference. I suppose that means MOCS 63 is still used for
L3 evictions, even though bspec no longer mentions that fact
explicitly.
So MOCS 0 is the thing that really matters for CCS. And for
MOCS 0 only the LLC WB vs. UC selection matters. L3 WB vs. UC
doesn't seem to make any difference.
It's interesting that MOCS 60 is documented as a "CCS special case",
but in reality it's MOCS 0 that matters for CCS. I wonder if some
wires got crossed in the hw design and the wrong MOCS entry ended
up being used for CCS and no one noticed...
>
> I didn't actually test all values of X there, but I did spot
> check a handful of them.
>
> Also, ADL is affected, but TGL doesn't seem to be. Though I
> still need to check the situation on TGL a bit more thoroughly.
TGL actually works exactly the same as ADL. The only reason why
TGL worked correctly out of the box was that we use a different
MOCS table for TGL/RKL (IIRC because we started out with the
wrong table and early Mesa versions depended on that), and in
that table MOCS 0 is just 0x0, whereas on ADL MOCS 0 is WB.
And now I'm wondering how much performance we're leaving on
the floor with CCS by having a suboptimal MOCS 0 on TGL/RKL...
And I'm also curious about older platforms. I think those also
have MOCS 0 as UC. I'll need to test if those also have this
MOCS 0 special case for CCS...
--
Ville Syrjälä
Intel
next prev parent reply other threads:[~2025-09-26 19:35 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-23 10:07 [PATCH v12 00/13] AuxCCS handling and render compression modifiers Tvrtko Ursulin
2025-09-23 10:07 ` [PATCH v12 01/13] drm/xe/xelpg: Flush CCS when flushing caches Tvrtko Ursulin
2025-09-23 10:07 ` [PATCH v12 02/13] drm/xe/xelp: Quiesce memory traffic before invalidating AuxCCS Tvrtko Ursulin
2025-10-01 15:47 ` Rodrigo Vivi
2025-09-23 10:07 ` [PATCH v12 03/13] drm/xe/xelp: Support auxccs invalidation on blitter Tvrtko Ursulin
2025-09-23 10:07 ` [PATCH v12 04/13] drm/xe/xelp: Use MI_FLUSH_DW_CCS on auxccs platforms Tvrtko Ursulin
2025-09-23 10:07 ` [PATCH v12 05/13] drm/xe/xelp: Wait for AuxCCS invalidation to complete Tvrtko Ursulin
2025-09-23 10:07 ` [PATCH v12 06/13] drm/xe: Export xe_emit_aux_table_inv Tvrtko Ursulin
2025-09-23 10:08 ` [PATCH v12 07/13] drm/xe/xelp: Add AuxCCS invalidation to the indirect context workarounds Tvrtko Ursulin
2025-09-23 10:08 ` [PATCH v12 08/13] drm/xe: Flush GGTT writes after populating DPT Tvrtko Ursulin
2025-09-23 10:08 ` [PATCH v12 09/13] drm/xe: Handle DPT in system memory Tvrtko Ursulin
2025-09-23 10:08 ` [PATCH v12 10/13] drm/xe/display: Add support for AuxCCS Tvrtko Ursulin
2025-09-23 10:08 ` [PATCH v12 11/13] drm/xe: Force flush system memory AuxCCS framebuffers before scan out Tvrtko Ursulin
2025-09-23 10:19 ` Ville Syrjälä
2025-09-23 10:48 ` Tvrtko Ursulin
2025-09-23 12:01 ` Ville Syrjälä
2025-09-23 12:25 ` Tvrtko Ursulin
2025-09-23 13:20 ` Ville Syrjälä
2025-09-23 14:40 ` Tvrtko Ursulin
2025-09-23 14:52 ` Ville Syrjälä
2025-09-24 13:09 ` Tvrtko Ursulin
2025-09-24 22:35 ` Ville Syrjälä
2025-09-25 7:24 ` Tvrtko Ursulin
2025-09-25 10:08 ` Tvrtko Ursulin
2025-09-26 7:41 ` Ville Syrjälä
2025-09-26 19:35 ` Ville Syrjälä [this message]
2025-10-02 14:01 ` Tvrtko Ursulin
2025-10-02 14:36 ` Tvrtko Ursulin
2025-10-02 16:23 ` Ville Syrjälä
2025-10-02 17:04 ` Tvrtko Ursulin
2025-10-02 17:14 ` Ville Syrjälä
2025-10-02 22:02 ` Ville Syrjälä
2025-09-23 10:44 ` [PATCH v13 " Tvrtko Ursulin
2025-09-23 10:08 ` [PATCH v12 12/13] drm/xe: Do not use stolen memory for DPT on IGFX and AuxCCS Tvrtko Ursulin
2025-09-23 10:08 ` [PATCH v12 13/13] drm/i915/display: Expose AuxCCS frame buffer modifiers for Xe Tvrtko Ursulin
2025-09-23 10:15 ` ✗ CI.checkpatch: warning for AuxCCS handling and render compression modifiers (rev15) Patchwork
2025-09-23 10:16 ` ✓ CI.KUnit: success " Patchwork
2025-09-23 11:15 ` ✓ Xe.CI.BAT: " Patchwork
2025-09-23 11:21 ` ✗ CI.checkpatch: warning for AuxCCS handling and render compression modifiers (rev16) Patchwork
2025-09-23 11:22 ` ✓ CI.KUnit: success " Patchwork
2025-09-23 12:03 ` ✓ Xe.CI.BAT: " Patchwork
2025-09-23 13:26 ` ✗ Xe.CI.Full: failure for AuxCCS handling and render compression modifiers (rev15) Patchwork
2025-09-23 14:12 ` ✗ Xe.CI.Full: failure for AuxCCS handling and render compression modifiers (rev16) Patchwork
2025-09-23 20:12 ` [PATCH v12 00/13] AuxCCS handling and render compression modifiers Ville Syrjälä
2025-09-24 7:59 ` Tvrtko Ursulin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aNbq_j39EipWw_pV@intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=intel-xe@lists.freedesktop.org \
--cc=kernel-dev@igalia.com \
--cc=tvrtko.ursulin@igalia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.