[Intel-xe] [PATCH v3 9/9] drm/xe/guc: Port workarounds to OOB infra
Lucas De Marchi
lucas.demarchi at intel.com
Tue May 16 22:19:50 UTC 2023
Let xe_guc.c start using XE_WA() for workarounds. The one missing
workaround is left with a "FIXME" since it's not properly implemented
yet.
Also, some changes were made to a few workarounds:
- Wa_22011383443 not implemented due to being an early PVC
stepping. Wa_16011759253 that has the same condition is the
one covering DG2.
- Wa_22011391025 and Wa_14012197797 were split in 2, since they
cover different steppings and we do want to report both as
implemented. The latter may eventually be removed due to being
early DG2 steppings, but the former should remain.
- Wa_22012727170 and Wa_22012727685 were split in 2 so both of
them can be reported as active, regardless if they (currently)
have the same rules.
- Wa_16015675438 and Wa_18020744125 were not checking by
platform or IP version, hence making them not future-proof.
Those workarounds should only be active in PVC and DG2,
besides the check for "no render engine".
DG2 system used for test:
XE_DG2 G12 56b2:0001 dgfx:1 gfx:Xe_HPG (12.55) media:Xe_HPM (12.55) ...
Stepping = (G:A1, M:A1, D:C0, B:**)
Output is as expected for the current OOB workarounds:
$ cat /sys/kernel/debug/dri/0/workarounds
...
OOB Workarounds
14014475959
22011391025
14012197797
16015675438
16016323070
Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
---
drivers/gpu/drm/xe/Makefile | 2 +-
drivers/gpu/drm/xe/xe_guc.c | 43 ++++++++----------------------
drivers/gpu/drm/xe/xe_wa_oob.rules | 16 +++++++++++
3 files changed, 28 insertions(+), 33 deletions(-)
diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index fcf04951a309..07af0d022263 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -38,7 +38,7 @@ $(XE_WA_OOB) &: $(obj)/xe_gen_wa_oob $(srctree)/$(src)/xe_wa_oob.rules
@mkdir -p $(@D)
$(call cmd,wa_oob)
-$(obj)/xe_wa.o: $(XE_WA_OOB)
+$(obj)/xe_wa.o $(obj)/xe_guc.o: $(XE_WA_OOB)
# Please keep these build lists sorted!
diff --git a/drivers/gpu/drm/xe/xe_guc.c b/drivers/gpu/drm/xe/xe_guc.c
index 1b5d0b6ad180..252a4bfe6d63 100644
--- a/drivers/gpu/drm/xe/xe_guc.c
+++ b/drivers/gpu/drm/xe/xe_guc.c
@@ -5,6 +5,7 @@
#include "xe_guc.h"
+#include "generated/xe_wa_oob.h"
#include "regs/xe_gt_regs.h"
#include "regs/xe_guc_regs.h"
#include "xe_bo.h"
@@ -20,6 +21,7 @@
#include "xe_mmio.h"
#include "xe_platform_types.h"
#include "xe_uc_fw.h"
+#include "xe_wa.h"
#include "xe_wopcm.h"
#define MEDIA_GUC_HOST_INTERRUPT XE_REG(0x190304)
@@ -136,29 +138,16 @@ static u32 guc_ctl_wa_flags(struct xe_guc *guc)
struct xe_gt *gt = guc_to_gt(guc);
u32 flags = 0;
- /* Wa_22012773006:gen11,gen12 < XeHP */
- if (GRAPHICS_VER(xe) >= 11 &&
- GRAPHICS_VERx100(xe) < 1250)
+ if (XE_WA(xe, 22012773006))
flags |= GUC_WA_POLLCS;
- /* Wa_16011759253 */
- /* Wa_22011383443 */
- if (IS_SUBPLATFORM_STEP(xe, XE_DG2, XE_SUBPLATFORM_DG2_G10, STEP_A0, STEP_B0))
+ if (XE_WA(xe, 16011759253))
flags |= GUC_WA_GAM_CREDITS;
- /* Wa_14014475959 */
- if (IS_PLATFORM_STEP(xe, XE_METEORLAKE, STEP_A0, STEP_B0) ||
- xe->info.platform == XE_DG2)
+ if (XE_WA(xe, 14014475959))
flags |= GUC_WA_HOLD_CCS_SWITCHOUT;
- /*
- * Wa_14012197797
- * Wa_22011391025
- *
- * The same WA bit is used for both and 22011391025 is applicable to
- * all DG2.
- */
- if (xe->info.platform == XE_DG2)
+ if (XE_WA(xe, 22011391025) || XE_WA(xe, 14012197797))
flags |= GUC_WA_DUAL_QUEUE;
/*
@@ -169,27 +158,17 @@ static u32 guc_ctl_wa_flags(struct xe_guc *guc)
if (GRAPHICS_VERx100(xe) < 1270)
flags |= GUC_WA_PRE_PARSER;
- /* Wa_16011777198 */
- if (IS_SUBPLATFORM_STEP(xe, XE_DG2, XE_SUBPLATFORM_DG2_G10, STEP_A0, STEP_C0) ||
- IS_SUBPLATFORM_STEP(xe, XE_DG2, XE_SUBPLATFORM_DG2_G11, STEP_A0,
- STEP_B0))
+ if (XE_WA(xe, 16011777198))
flags |= GUC_WA_RCS_RESET_BEFORE_RC6;
- /*
- * Wa_22012727170
- * Wa_22012727685
- */
- if (IS_SUBPLATFORM_STEP(xe, XE_DG2, XE_SUBPLATFORM_DG2_G10, STEP_A0, STEP_C0) ||
- IS_SUBPLATFORM_STEP(xe, XE_DG2, XE_SUBPLATFORM_DG2_G11, STEP_A0,
- STEP_FOREVER))
+ if (XE_WA(xe, 22012727170) || XE_WA(xe, 22012727685))
flags |= GUC_WA_CONTEXT_ISOLATION;
- /* Wa_16015675438, Wa_18020744125 */
- if (!xe_hw_engine_mask_per_class(gt, XE_ENGINE_CLASS_RENDER))
+ if ((XE_WA(xe, 16015675438) || XE_WA(xe, 16016323070)) &&
+ !xe_hw_engine_mask_per_class(gt, XE_ENGINE_CLASS_RENDER))
flags |= GUC_WA_RCS_REGS_IN_CCS_REGS_LIST;
- /* Wa_1509372804 */
- if (IS_PLATFORM_STEP(xe, XE_PVC, STEP_B0, STEP_C0))
+ if (XE_WA(xe, 1509372804))
flags |= GUC_WA_RENDER_RST_RC6_EXIT;
return flags;
diff --git a/drivers/gpu/drm/xe/xe_wa_oob.rules b/drivers/gpu/drm/xe/xe_wa_oob.rules
index e69de29bb2d1..060ff25496a7 100644
--- a/drivers/gpu/drm/xe/xe_wa_oob.rules
+++ b/drivers/gpu/drm/xe/xe_wa_oob.rules
@@ -0,0 +1,16 @@
+22012773006 GRAPHICS_VERSION_RANGE(1100, 1250)
+16011759253 SUBPLATFORM(DG2, G10), STEP(A0, B0)
+14014475959 PLATFORM(METEORLAKE), STEP(A0, B0)
+ PLATFORM(DG2)
+22011391025 PLATFORM(DG2)
+14012197797 PLATFORM(DG2), STEP(A0, B0)
+16011777198 SUBPLATFORM(DG2, G10), STEP(A0, C0)
+ SUBPLATFORM(DG2, G11), STEP(A0, B0)
+22012727170 SUBPLATFORM(DG2, G10), STEP(A0, C0)
+ SUBPLATFORM(DG2, G11), STEP(A0, FOREVER)
+22012727685 SUBPLATFORM(DG2, G10), STEP(A0, C0)
+ SUBPLATFORM(DG2, G11), STEP(A0, FOREVER)
+16015675438 PLATFORM(PVC)
+ PLATFORM(DG2)
+16016323070 PLATFORM(PVC)
+1509372804 PLATFORM(PVC), STEP(B0, C0)
--
2.40.1
More information about the Intel-xe
mailing list