[PATCH v2] drm/xe: Apply workaround 14016747170
Cavitt, Jonathan
jonathan.cavitt at intel.com
Tue Sep 3 14:17:34 UTC 2024
Hello,
To answer your questions:
1. Should it be FUSE4 instead of FUSE3?
I think my use of FUSE3 here was an artifact from when I was applying a different workaround to the same location that applied the same change. I’d have to get external confirmation about that, though, and see which of the two would be more appropriate to use here.
2. Was there any particular reason for just adding an if(wa) and not using an if(wa)/else condition similar to i915 implementation?
The else condition was already covered during variable initialization. Breaking the initialization stage into declaration and conditional initialization seemed unnecessary given such.
I hope this helps
-Jonathan Cavitt
From: Pottumuttu, Sai Teja <sai.teja.pottumuttu at intel.com>
Sent: Monday, September 2, 2024 4:16 AM
To: Cavitt, Jonathan <jonathan.cavitt at intel.com>; intel-xe at lists.freedesktop.org
Cc: Gupta, saurabhg <saurabhg.gupta at intel.com>; Zuo, Alex <alex.zuo at intel.com>; Roper, Matthew D <matthew.d.roper at intel.com>; jani.nikula at linux.intel.com; Chauhan, Shekhar <shekhar.chauhan at intel.com>
Subject: Re: [PATCH v2] drm/xe: Apply workaround 14016747170
On 30-08-2024 21:41, Jonathan-Cavitt wrote:
Some revisions of MTL do not properly report the correct value from the
FUSE3_MBC_MEDIA register. This results in the wrong value being
reported for the l3 mask.
Should it be FUSE4 instead of FUSE3?
Use the recommended replacement register in this case.
Signed-off-by: Jonathan-Cavitt <jonathan.cavitt at intel.com><mailto:jonathan.cavitt at intel.com>
CC: Matt Roper <matthew.d.roper at intel.com><mailto:matthew.d.roper at intel.com>
CC: Jani Nikula <jani.nikula at linux.intel.com><mailto:jani.nikula at linux.intel.com>
---
v2: Update includes ordering (Jani)
drivers/gpu/drm/xe/regs/xe_gt_regs.h | 3 +++
drivers/gpu/drm/xe/xe_gt_mcr.c | 8 ++++++++
drivers/gpu/drm/xe/xe_gt_topology.c | 9 +++++++++
drivers/gpu/drm/xe/xe_wa_oob.rules | 1 +
4 files changed, 21 insertions(+)
diff --git a/drivers/gpu/drm/xe/regs/xe_gt_regs.h b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
index 0d1a4a9f4e119..e0d735a5a7fa1 100644
--- a/drivers/gpu/drm/xe/regs/xe_gt_regs.h
+++ b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
@@ -522,6 +522,9 @@
#define FORCEWAKE_MT(bit) BIT(bit)
#define FORCEWAKE_MT_MASK(bit) BIT((bit) + 16)
+#define MTL_GT_ACTIVITY_FACTOR XE_REG(0x138010)
+#define MTL_GT_L3_EXC_MASK REG_GENMASK(5, 3)
+
#define MTL_MEDIA_PERF_LIMIT_REASONS XE_REG(0x138030)
#define MTL_MEDIA_MC6 XE_REG(0x138048)
diff --git a/drivers/gpu/drm/xe/xe_gt_mcr.c b/drivers/gpu/drm/xe/xe_gt_mcr.c
index 7d7bd0be6233e..3253eaefb18b3 100644
--- a/drivers/gpu/drm/xe/xe_gt_mcr.c
+++ b/drivers/gpu/drm/xe/xe_gt_mcr.c
@@ -5,6 +5,8 @@
#include "xe_gt_mcr.h"
+#include <generated/xe_wa_oob.h>
+
#include "regs/xe_gt_regs.h"
#include "xe_assert.h"
#include "xe_gt.h"
@@ -14,6 +16,7 @@
#include "xe_guc_hwconfig.h"
#include "xe_mmio.h"
#include "xe_sriov.h"
+#include "xe_wa.h"
/**
* DOC: GT Multicast/Replicated (MCR) Register Support
@@ -245,6 +248,11 @@ static void init_steering_l3bank(struct xe_gt *gt)
u32 bank_mask = REG_FIELD_GET(GT_L3_EXC_MASK,
xe_mmio_read32(gt, XEHP_FUSE4));
+ /* Wa_14016747170 */
+ if (XE_WA(gt, 14016747170))
+ bank_mask = REG_FIELD_GET(MTL_GT_L3_EXC_MASK,
+ xe_mmio_read32(gt, MTL_GT_ACTIVITY_FACTOR));
+
Was there any particular reason for just adding an if(wa) and not using an if(wa)/else condition similar to i915 implementation?
CC: Shekhar Chauhan <shekhar.chauhan at intel.com><mailto:shekhar.chauhan at intel.com>
/*
* Group selects mslice, instance selects bank within mslice.
* Bank 0 is always valid _except_ when the bank mask is 010b.
diff --git a/drivers/gpu/drm/xe/xe_gt_topology.c b/drivers/gpu/drm/xe/xe_gt_topology.c
index 0662f71c6ede7..f1946ce0d937b 100644
--- a/drivers/gpu/drm/xe/xe_gt_topology.c
+++ b/drivers/gpu/drm/xe/xe_gt_topology.c
@@ -8,10 +8,13 @@
#include <linux/bitmap.h>
#include <linux/compiler.h>
+#include <generated/xe_wa_oob.h>
+
#include "regs/xe_gt_regs.h"
#include "xe_assert.h"
#include "xe_gt.h"
#include "xe_mmio.h"
+#include "xe_wa.h"
static void
load_dss_mask(struct xe_gt *gt, xe_dss_mask_t mask, int numregs, ...)
@@ -144,6 +147,12 @@ load_l3_bank_mask(struct xe_gt *gt, xe_l3_bank_mask_t l3_bank_mask)
u32 fuse4 = xe_mmio_read32(gt, XEHP_FUSE4);
u32 bank_val = REG_FIELD_GET(GT_L3_EXC_MASK, fuse4);
+ /* Wa_14016747170 */
+ if (XE_WA(gt, 14016747170)) {
+ fuse4 = xe_mmio_read32(gt, MTL_GT_ACTIVITY_FACTOR);
+ bank_val = REG_FIELD_GET(MTL_GT_L3_EXC_MASK, fuse4);
+ }
+
bitmap_set_value8(per_mask_bit, 0x3, 0);
gen_l3_mask_from_pattern(xe, per_node, per_mask_bit, 2, bank_val);
gen_l3_mask_from_pattern(xe, l3_bank_mask, per_node, 4,
diff --git a/drivers/gpu/drm/xe/xe_wa_oob.rules b/drivers/gpu/drm/xe/xe_wa_oob.rules
index 920ca50601466..5bac4123b5db1 100644
--- a/drivers/gpu/drm/xe/xe_wa_oob.rules
+++ b/drivers/gpu/drm/xe/xe_wa_oob.rules
@@ -37,3 +37,4 @@
16023588340 GRAPHICS_VERSION(2001)
14019789679 GRAPHICS_VERSION(1255)
GRAPHICS_VERSION_RANGE(1270, 2004)
+14016747170 GRAPHICS_VERSION_RANGE(1270, 1271), GRAPHICS_STEP(A0, B0)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/intel-xe/attachments/20240903/c657c1c4/attachment-0001.htm>
More information about the Intel-xe
mailing list