Commit 6ef07838 authored by John Harrison's avatar John Harrison
Browse files

drm/i915/guc: Enable w/a 16021333562 for DG2, MTL and ARL



Enable another workaround that is implemented inside the GuC.

v2: Use the correct Gen12 w/a id rather than the Xe version (review
feedback from Matthew R) also extend to include ARL.

Signed-off-by: default avatarJohn Harrison <John.C.Harrison@Intel.com>
Reviewed-by: default avatarJulia Filipchuk <julia.filipchuk@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240528230515.479395-1-John.C.Harrison@Intel.com
parent ca1a4533
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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 */
+20 −12
Original line number Diff line number Diff line
@@ -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);

	iosys_map_memcpy_to(&guc->ads_map, offset, klv_entry, size);
	GEM_BUG_ON(*remain < 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_16021333562 */
	if ((GUC_FIRMWARE_VER(guc) >= MAKE_GUC_VER(70, 21, 1)) &&
	    (IS_GFX_GT_IP_RANGE(gt, IP_VER(12, 70), IP_VER(12, 74)) ||
	     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)