drm/xe: Move Wa 1607983814 to oob
authorLucas De Marchi <lucas.demarchi@intel.com>
Tue, 29 Oct 2024 19:32:58 +0000 (12:32 -0700)
committerLucas De Marchi <lucas.demarchi@intel.com>
Fri, 1 Nov 2024 02:24:26 +0000 (19:24 -0700)
needs_wa_1607983814() predates wa_oob, so it was not being printed
in /sys/kernel/debug/dri/0/*/workarounds. Port it to OOB rules.
This makes the WA show up in debugfs. For TGL:

OOB Workarounds
1607983814
22012773006
1409600907

Eventually the RTP infra may add support for writing registers in a
loop, which would allow to keep track of the registers as well. But for
now, just listing it as OOB workaround is already an improvement.

Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20241029193258.749882-1-lucas.demarchi@intel.com
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
drivers/gpu/drm/xe/xe_guc_ads.c
drivers/gpu/drm/xe/xe_wa_oob.rules

index 4e746ae98888f50bacb4069168751cb02eadc2d0..943146e5b460d6b8806a1c35348bc35853019004 100644 (file)
@@ -231,11 +231,6 @@ static size_t guc_ads_size(struct xe_guc_ads *ads)
                guc_ads_private_data_size(ads);
 }
 
-static bool needs_wa_1607983814(struct xe_device *xe)
-{
-       return GRAPHICS_VERx100(xe) < 1250;
-}
-
 static size_t calculate_regset_size(struct xe_gt *gt)
 {
        struct xe_reg_sr_entry *sr_entry;
@@ -250,7 +245,7 @@ static size_t calculate_regset_size(struct xe_gt *gt)
 
        count += ADS_REGSET_EXTRA_MAX * XE_NUM_HW_ENGINES;
 
-       if (needs_wa_1607983814(gt_to_xe(gt)))
+       if (XE_WA(gt, 1607983814))
                count += LNCFCMOCS_REG_COUNT;
 
        return count * sizeof(struct guc_mmio_reg);
@@ -709,7 +704,6 @@ static unsigned int guc_mmio_regset_write(struct xe_guc_ads *ads,
                                          struct iosys_map *regset_map,
                                          struct xe_hw_engine *hwe)
 {
-       struct xe_device *xe = ads_to_xe(ads);
        struct xe_hw_engine *hwe_rcs_reset_domain =
                xe_gt_any_hw_engine_by_reset_domain(hwe->gt, XE_ENGINE_CLASS_RENDER);
        struct xe_reg_sr_entry *entry;
@@ -740,8 +734,7 @@ static unsigned int guc_mmio_regset_write(struct xe_guc_ads *ads,
                guc_mmio_regset_write_one(ads, regset_map, e->reg, count++);
        }
 
-       /* Wa_1607983814 */
-       if (needs_wa_1607983814(xe) && hwe->class == XE_ENGINE_CLASS_RENDER) {
+       if (XE_WA(hwe->gt, 1607983814) && hwe->class == XE_ENGINE_CLASS_RENDER) {
                for (i = 0; i < LNCFCMOCS_REG_COUNT; i++) {
                        guc_mmio_regset_write_one(ads, regset_map,
                                                  XELP_LNCFCMOCS(i), count++);
index bcd04464b85e887688882ab64c7b213e6efc319f..3ed12a85cc60f01c35715967d1573dc150b23b3c 100644 (file)
@@ -1,3 +1,4 @@
+1607983814     GRAPHICS_VERSION_RANGE(1200, 1210)
 22012773006    GRAPHICS_VERSION_RANGE(1200, 1250)
 14014475959    GRAPHICS_VERSION_RANGE(1270, 1271), GRAPHICS_STEP(A0, B0)
                PLATFORM(DG2)