]> www.infradead.org Git - users/hch/misc.git/commitdiff
drm/xe/guc: Enable w/a 14022293748 and 22019794406
authorJulia Filipchuk <julia.filipchuk@intel.com>
Mon, 5 Aug 2024 20:54:35 +0000 (13:54 -0700)
committerDaniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Thu, 8 Aug 2024 20:47:27 +0000 (13:47 -0700)
Enable workarounds for HW bug where render engine reset fails. Given
that we're bumping the minimum required GuC version to 70.29, we're
guaranteed to always have support for this KLV in the GuC.

v2: Enable KLV correctly for either workaround (Lucas)
v4: Add check for minimum supported GuC firmware version. Enable w/a for
hw version 20.01 too. (Daniele)
v5 (Daniele): remove now unneeded fw type and version checks (JohnH)

Signed-off-by: Julia Filipchuk <julia.filipchuk@intel.com>
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: John Harrison <John.C.Harrison@Intel.com>
Reviewed-by: John Harrison <John.C.Harrison@Intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240805205435.921921-1-daniele.ceraolospurio@intel.com
drivers/gpu/drm/xe/abi/guc_klvs_abi.h
drivers/gpu/drm/xe/xe_guc_ads.c
drivers/gpu/drm/xe/xe_wa_oob.rules

index 8f9f60b28306ea9d9fc2357ed93c4631977d14b0..6b30743a2f6cb80f47c3d056daf3d52efc667103 100644 (file)
@@ -351,6 +351,7 @@ enum xe_guc_klv_ids {
        GUC_WORKAROUND_KLV_ID_GAM_PFQ_SHADOW_TAIL_POLLING                               = 0x9005,
        GUC_WORKAROUND_KLV_ID_DISABLE_MTP_DURING_ASYNC_COMPUTE                          = 0x9007,
        GUC_WA_KLV_NP_RD_WRITE_TO_CLEAR_RCSM_AT_CGP_LATE_RESTORE                        = 0x9008,
+       GUC_WORKAROUND_KLV_ID_BACK_TO_BACK_RCS_ENGINE_RESET                             = 0x9009,
 };
 
 #endif
index 1c60b685dbc6d1b609f7a4f0897f8df816cb9154..d1902a8581ca11925ff2b6de74558cf46ca4937b 100644 (file)
@@ -24,6 +24,7 @@
 #include "xe_map.h"
 #include "xe_mmio.h"
 #include "xe_platform_types.h"
+#include "xe_uc_fw.h"
 #include "xe_wa.h"
 
 /* Slack of a few additional entries per engine */
@@ -367,6 +368,11 @@ static void guc_waklv_init(struct xe_guc_ads *ads)
                                          0xC40,
                                          &offset, &remain);
 
+       if (XE_WA(gt, 14022293748) || XE_WA(gt, 22019794406))
+               guc_waklv_enable_simple(ads,
+                                       GUC_WORKAROUND_KLV_ID_BACK_TO_BACK_RCS_ENGINE_RESET,
+                                       &offset, &remain);
+
        size = guc_ads_waklv_size(ads) - remain;
        if (!size)
                return;
index 540d38603f32b3faf963f0733a25897a8b4b6502..5cf27ff27ce65e603576ce1b223fa5618e1d811e 100644 (file)
 16022287689    GRAPHICS_VERSION(2001)
                GRAPHICS_VERSION(2004)
 13011645652    GRAPHICS_VERSION(2004)
+14022293748    GRAPHICS_VERSION(2001)
+               GRAPHICS_VERSION(2004)
+22019794406    GRAPHICS_VERSION(2001)
+               GRAPHICS_VERSION(2004)
 22019338487    MEDIA_VERSION(2000)
                GRAPHICS_VERSION(2001)
 22019338487_display    PLATFORM(LUNARLAKE)