]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/xe: extend Wa_15015404425 to apply to PTL
authorMatt Atwood <matthew.s.atwood@intel.com>
Wed, 9 Jul 2025 22:16:05 +0000 (15:16 -0700)
committerLucas De Marchi <lucas.demarchi@intel.com>
Thu, 10 Jul 2025 22:36:31 +0000 (15:36 -0700)
Wa_15015404425 only needs to be applied on PTL platforms with an A step
compute die. There is no way to map PCI revid to the compute die
stepping. The easiest way to figure out compute die stepping our end is
to map the media IP's stepping to the compute die. For PTL, compute die
has an A stepping if and only if the media IP's stepping is also A-step
(This relationship is determined on a per platform basis and just
happens to be this way on PTL).

In addition this workaround is a chicken-and-egg problem. Wa_15015404425
requires that all register reads be preceded by four dummy MMIO writes
(including during early driver  init and even pre-OS firmware). The
driver needs to perform some MMIO reads during init which include the
GMD_ID register that contains the Media IPs stepping. To handle this in
the safest manner assume the workaround applies to all of PTL during
driver probe and deactivate the workaround after.

The overall solution becomes a set of two workarounds:

15015404425 - a Device OOB workaround that's always active for PTL
* 15015404425_disable - a GT OOB workaround that applies to PTL
  platfroms with a B0 or later stepping

The first of these workarounds issues dummy MMIO writes we do when
reading registers. The second guards logic that disables the first once
we have the necessary information later in the probe process.

v2: rename SoC to device, avoid null pointer dereference, update commit
message.
v3: rebase
v5: move disable check into xe_device_probe to avoid linking in xe_wa
into xe_pci, reword commit message
v6: squash extension and b0 support into 1 patch

Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Matt Atwood <matthew.s.atwood@intel.com>
Link: https://lore.kernel.org/r/20250709221605.172516-7-matthew.s.atwood@intel.com
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
drivers/gpu/drm/xe/xe_device.c
drivers/gpu/drm/xe/xe_device_wa_oob.rules
drivers/gpu/drm/xe/xe_wa.h
drivers/gpu/drm/xe/xe_wa_oob.rules

index 28b76fb7285939c640e8d64e2dc1e1d88c8cd023..6dc84e4ed28155ae3cf9ad9dd42a020ff5312e2c 100644 (file)
@@ -68,6 +68,7 @@
 #include "xe_wait_user_fence.h"
 #include "xe_wa.h"
 
+#include <generated/xe_device_wa_oob.h>
 #include <generated/xe_wa_oob.h>
 
 static int xe_file_open(struct drm_device *dev, struct drm_file *file)
@@ -864,6 +865,10 @@ int xe_device_probe(struct xe_device *xe)
                        return err;
        }
 
+       if (xe->tiles->media_gt &&
+           XE_WA(xe->tiles->media_gt, 15015404425_disable))
+               XE_DEVICE_WA_DISABLE(xe, 15015404425);
+
        xe_nvm_init(xe);
 
        err = xe_heci_gsc_init(xe);
index b7d12ea4d65c99e64518489316e08123f66b8093..3a0c4ccc42249a491a31ec97f17052a47cf542e1 100644 (file)
@@ -1 +1,2 @@
 15015404425     PLATFORM(LUNARLAKE)
+               PLATFORM(PANTHERLAKE)
index c290f449716b4f13379337ba70a2a5e5ec2ced72..f3880c65cb8d546f1d871528411fde7390528dd5 100644 (file)
@@ -45,4 +45,9 @@ void xe_wa_dump(struct xe_gt *gt, struct drm_printer *p);
        test_bit(XE_DEVICE_WA_OOB_ ## id__, (xe__)->wa_active.oob);     \
 })
 
+#define XE_DEVICE_WA_DISABLE(xe__, id__) ({                            \
+       xe_assert(xe__, (xe__)->wa_active.oob_initialized);             \
+       clear_bit(XE_DEVICE_WA_OOB_ ## id__, (xe__)->wa_active.oob);    \
+})
+
 #endif
index e7ed5d583d68641cd19645575ae4ce772645eed5..e990f20eccfe3c1528a0947dbbea9bb2de903e18 100644 (file)
@@ -70,3 +70,5 @@ no_media_l3   MEDIA_VERSION(3000)
 # SoC workaround - currently applies to all platforms with the following
 # primary GT GMDID
 14022085890    GRAPHICS_VERSION(2001)
+
+15015404425_disable    PLATFORM(PANTHERLAKE), MEDIA_STEP(B0, FOREVER)