[PATCH] drm/xe/xe_lpg: Port 2 WAs from i915 to Xe

Lucas De Marchi lucas.demarchi at intel.com
Wed Jan 15 15:25:13 UTC 2025


On Wed, Jan 15, 2025 at 01:30:48PM +0530, Aradhya Bhatia wrote:
>Port Wa_16021333562 and Wa_14016712196 for Xe_LPG_MD (G:12.70), and
>Xe_LPG_LG (G:12.71) MeteorLake (MTL) platforms, from drm/i915 to drm/xe.
>
>Also fix the lineage number of Wa_18013179988 for the MTL platform.
>
>Signed-off-by: Aradhya Bhatia <aradhya.bhatia at intel.com>
>---
> drivers/gpu/drm/xe/xe_gt_mcr.c     | 3 +++
> drivers/gpu/drm/xe/xe_guc_ads.c    | 5 +++++
> drivers/gpu/drm/xe/xe_oa.c         | 3 +--
> drivers/gpu/drm/xe/xe_ring_ops.c   | 3 +++
> drivers/gpu/drm/xe/xe_wa_oob.rules | 2 ++
> 5 files changed, 14 insertions(+), 2 deletions(-)
>
>diff --git a/drivers/gpu/drm/xe/xe_gt_mcr.c b/drivers/gpu/drm/xe/xe_gt_mcr.c
>index a1676b787fdc..0471baff635d 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
>diff --git a/drivers/gpu/drm/xe/xe_guc_ads.c b/drivers/gpu/drm/xe/xe_guc_ads.c
>index fab259adc380..8ef044ddd682 100644
>--- a/drivers/gpu/drm/xe/xe_guc_ads.c
>+++ b/drivers/gpu/drm/xe/xe_guc_ads.c
>@@ -376,6 +376,11 @@ static void guc_waklv_init(struct xe_guc_ads *ads)
> 					GUC_WORKAROUND_KLV_ID_BACK_TO_BACK_RCS_ENGINE_RESET,
> 					&offset, &remain);
>
>+	if (XE_WA(gt, 16021333562))
>+		guc_waklv_enable_simple(ads,
>+					GUC_WORKAROUND_KLV_BLOCK_INTERRUPTS_WHEN_MGSR_BLOCKED,
>+					&offset, &remain);
>+
> 	size = guc_ads_waklv_size(ads) - remain;
> 	if (!size)
> 		return;
>diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
>index eeb96b5f49e2..90d62e621d3e 100644
>--- a/drivers/gpu/drm/xe/xe_oa.c
>+++ b/drivers/gpu/drm/xe/xe_oa.c
>@@ -1854,9 +1854,8 @@ u32 xe_oa_timestamp_frequency(struct xe_gt *gt)
> 	u32 reg, shift;
>
> 	/*
>-	 * Wa_18013179988:dg2
>+	 * Wa_18013179988:dg2/mtl
> 	 * Wa_14015568240:pvc
>-	 * Wa_14015846243:mtl

why is this not doing something like below

	if (XE_WA(gt, 18013179988) || XE_WA(gt, 14015568240))

instead of the platform switch?

14015568240 seems just to be a duplicate of 18013179988, just with a
different lineage. AFAICS WA 18013179988_14015568240 could span from
graphics version 12.55 to 12.74 and stop checking the platform.

this could be done in a different commit and this one just leaves this
hunk out

> 	 */
> 	switch (gt_to_xe(gt)->info.platform) {
> 	case XE_DG2:
>diff --git a/drivers/gpu/drm/xe/xe_ring_ops.c b/drivers/gpu/drm/xe/xe_ring_ops.c
>index 9f327f27c072..22c226c30df9 100644
>--- a/drivers/gpu/drm/xe/xe_ring_ops.c
>+++ b/drivers/gpu/drm/xe/xe_ring_ops.c
>@@ -192,6 +192,9 @@ static int emit_render_cache_flush(struct xe_sched_job *job, u32 *dw, int i)
> 	else if (job->q->class == XE_ENGINE_CLASS_COMPUTE)
> 		flags &= ~PIPE_CONTROL_3D_ENGINE_FLAGS;
>
>+	if (XE_WA(gt, 14016712196))
>+		i = emit_pipe_control(dw, i, 0, PIPE_CONTROL_DEPTH_CACHE_FLUSH, 0, 0);
>+
> 	return emit_pipe_control(dw, i, PIPE_CONTROL0_HDC_PIPELINE_FLUSH, flags, 0, 0);
> }
>
>diff --git a/drivers/gpu/drm/xe/xe_wa_oob.rules b/drivers/gpu/drm/xe/xe_wa_oob.rules
>index 40438c3d9b72..4872c5d21610 100644
>--- a/drivers/gpu/drm/xe/xe_wa_oob.rules
>+++ b/drivers/gpu/drm/xe/xe_wa_oob.rules
>@@ -42,3 +42,5 @@
> no_media_l3	MEDIA_VERSION(3000)
> 14022866841	GRAPHICS_VERSION(3000), GRAPHICS_STEP(A0, B0)
> 		MEDIA_VERSION(3000), MEDIA_STEP(A0, B0)
>+16021333562	GRAPHICS_VERSION_RANGE(1270, 1271)

from wa db it seems this should go back as far as TGL (12.00)

Lucas De Marchi

>+14016712196	GRAPHICS_VERSION_RANGE(1270, 1271)
>
>base-commit: 3318ef9888d5b4f5c5a9473180fd0b16e9ef266d
>-- 
>2.34.1
>


More information about the Intel-xe mailing list