On 5/28/2024 13:21, Matt Roper wrote:
On Fri, May 24, 2024 at 06:41:20PM -0700, john.c.harri...@intel.com wrote:
From: John Harrison <john.c.harri...@intel.com>
Enable another workaround that is implemented inside the GuC.

Signed-off-by: John Harrison <john.c.harri...@intel.com>
---
  drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h |  1 +
  drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c    | 32 ++++++++++++-------
  2 files changed, 21 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h 
b/drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h
index 525587cfe1af9..37ff539a6963d 100644
--- a/drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h
+++ b/drivers/gpu/drm/i915/gt/uc/abi/guc_klvs_abi.h
@@ -106,6 +106,7 @@ enum {
   */
  enum {
        GUC_WORKAROUND_KLV_SERIALIZED_RA_MODE                           = 
0x9001,
+       GUC_WORKAROUND_KLV_BLOCK_INTERRUPTS_WHEN_MGSR_BLOCKED           = 
0x9002,
  };
#endif /* _ABI_GUC_KLVS_ABI_H */
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c 
b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
index c606bb5e3b7b0..6c382785bc60b 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ads.c
@@ -815,23 +815,23 @@ guc_capture_prep_lists(struct intel_guc *guc)
        return PAGE_ALIGN(total_size);
  }
-/* Wa_14019159160 */
-static u32 guc_waklv_ra_mode(struct intel_guc *guc, u32 offset, u32 remain)
+static void guc_waklv_enable_simple(struct intel_guc *guc,
+                                   u32 klv_id, u32 *offset, u32 *remain)
  {
        u32 size;
        u32 klv_entry[] = {
                /* 16:16 key/length */
-               FIELD_PREP(GUC_KLV_0_KEY, 
GUC_WORKAROUND_KLV_SERIALIZED_RA_MODE) |
+               FIELD_PREP(GUC_KLV_0_KEY, klv_id) |
                FIELD_PREP(GUC_KLV_0_LEN, 0),
                /* 0 dwords data */
        };
size = sizeof(klv_entry);
-       GEM_BUG_ON(remain < size);
+       GEM_BUG_ON(*remain < size);
- iosys_map_memcpy_to(&guc->ads_map, offset, klv_entry, size);
-
-       return size;
+       iosys_map_memcpy_to(&guc->ads_map, *offset, klv_entry, size);
+       *offset += size;
+       *remain -= size;
  }
static void guc_waklv_init(struct intel_guc *guc)
@@ -850,11 +850,19 @@ static void guc_waklv_init(struct intel_guc *guc)
        remain = guc_ads_waklv_size(guc);
/* Wa_14019159160 */
-       if (IS_GFX_GT_IP_RANGE(gt, IP_VER(12, 70), IP_VER(12, 71))) {
-               size = guc_waklv_ra_mode(guc, offset, remain);
-               offset += size;
-               remain -= size;
-       }
+       if (IS_GFX_GT_IP_RANGE(gt, IP_VER(12, 70), IP_VER(12, 71)))
+               guc_waklv_enable_simple(guc,
+                                       GUC_WORKAROUND_KLV_SERIALIZED_RA_MODE,
+                                       &offset, &remain);
+
+       /* Wa_14019882105 */
Is this the right number?  When I look up Wa_14019882105 in the
workaround database, it only lists it as being relevant to A steppings
of G:20.04.  I don't see entries for 12.70/12.71.  Did it go by a
different lineage number on the older platforms?
Argh. Copied the wrong number. 2105 is the Xe version, the Gen12 version is 16021333562. I think it is two separate actual issues, hence two different w/a numbers, but the w/a itself is the same for both. Hmm, looks ike 3562 should also be enabled for 12.74. Not sure how I missed that, unless that is a recent update?
Also, I notice the Wa_14019159160 we had just above this workaround is
missing handling for graphics version 12.74.
12.74 is ARL? I think extending that is on my todo list as well. I have just been leaving updates to 160 until later because that one is horrific. It needs extending to DG2 as well but a whole bunch of tests start to fail when it is enabled because they need to be re-written to cope with the broken hardware.
John.


Matt

+       if ((GUC_FIRMWARE_VER(guc) >= MAKE_GUC_VER(70, 21, 1)) &&
+           (IS_GFX_GT_IP_RANGE(gt, IP_VER(12, 70), IP_VER(12, 71)) ||
+            IS_MEDIA_GT_IP_RANGE(gt, IP_VER(13, 0), IP_VER(13, 0)) ||
+            IS_DG2(gt->i915)))
+               guc_waklv_enable_simple(guc,
+                                       
GUC_WORKAROUND_KLV_BLOCK_INTERRUPTS_WHEN_MGSR_BLOCKED,
+                                       &offset, &remain);
size = guc_ads_waklv_size(guc) - remain;
        if (!size)
--
2.43.2



Reply via email to