drm/xe: Handle Wa_22010954014 and Wa_14022085890 as device workarounds

When Wa_22010954014 and Wa_14022085890 were first implemented, we didn't
have a device workaround infrastructure so we hacked them into the GT
workaround list.  Now that we have proper device workaround support,
move them to the proper place.  Note that Wa_14022085890 specifically
applies to BMG-G21 platforms, so this requires defining a BMG
subplatform to capture the correct subset of device IDs.

Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com>
Link: https://lore.kernel.org/r/20251013200944.2499947-40-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
This commit is contained in:
Matt Roper 2025-10-13 13:09:58 -07:00
parent 4d29240682
commit 78de8f8766
7 changed files with 17 additions and 9 deletions

View File

@ -1,3 +1,5 @@
22010954014 PLATFORM(DG2)
15015404425 PLATFORM(LUNARLAKE) 15015404425 PLATFORM(LUNARLAKE)
PLATFORM(PANTHERLAKE) PLATFORM(PANTHERLAKE)
22019338487_display PLATFORM(LUNARLAKE) 22019338487_display PLATFORM(LUNARLAKE)
14022085890 SUBPLATFORM(BATTLEMAGE, G21)

View File

@ -14,6 +14,7 @@
#include <drm/drm_managed.h> #include <drm/drm_managed.h>
#include <drm/drm_print.h> #include <drm/drm_print.h>
#include <generated/xe_device_wa_oob.h>
#include <generated/xe_wa_oob.h> #include <generated/xe_wa_oob.h>
#include "abi/guc_actions_slpc_abi.h" #include "abi/guc_actions_slpc_abi.h"
@ -886,7 +887,7 @@ static int pc_adjust_freq_bounds(struct xe_guc_pc *pc)
if (pc_get_min_freq(pc) > pc->rp0_freq) if (pc_get_min_freq(pc) > pc->rp0_freq)
ret = pc_set_min_freq(pc, pc->rp0_freq); ret = pc_set_min_freq(pc, pc->rp0_freq);
if (XE_GT_WA(tile->primary_gt, 14022085890)) if (XE_DEVICE_WA(tile_to_xe(tile), 14022085890))
ret = pc_set_min_freq(pc, max(BMG_MIN_FREQ, pc_get_min_freq(pc))); ret = pc_set_min_freq(pc, max(BMG_MIN_FREQ, pc_get_min_freq(pc)));
out: out:

View File

@ -335,6 +335,8 @@ static const struct xe_device_desc lnl_desc = {
.vm_max_level = 4, .vm_max_level = 4,
}; };
static const u16 bmg_g21_ids[] = { INTEL_BMG_G21_IDS(NOP), 0 };
static const struct xe_device_desc bmg_desc = { static const struct xe_device_desc bmg_desc = {
DGFX_FEATURES, DGFX_FEATURES,
PLATFORM(BATTLEMAGE), PLATFORM(BATTLEMAGE),
@ -349,6 +351,10 @@ static const struct xe_device_desc bmg_desc = {
.has_sriov = true, .has_sriov = true,
.max_gt_per_tile = 2, .max_gt_per_tile = 2,
.needs_scratch = true, .needs_scratch = true,
.subplatforms = (const struct xe_subplatform_desc[]) {
{ XE_SUBPLATFORM_BATTLEMAGE_G21, "G21", bmg_g21_ids },
{ }
},
.va_bits = 48, .va_bits = 48,
.vm_max_level = 4, .vm_max_level = 4,
}; };

View File

@ -34,6 +34,7 @@ enum xe_subplatform {
XE_SUBPLATFORM_DG2_G10, XE_SUBPLATFORM_DG2_G10,
XE_SUBPLATFORM_DG2_G11, XE_SUBPLATFORM_DG2_G11,
XE_SUBPLATFORM_DG2_G12, XE_SUBPLATFORM_DG2_G12,
XE_SUBPLATFORM_BATTLEMAGE_G21,
}; };
#endif #endif

View File

@ -1138,6 +1138,6 @@ void xe_wa_apply_tile_workarounds(struct xe_tile *tile)
if (IS_SRIOV_VF(tile->xe)) if (IS_SRIOV_VF(tile->xe))
return; return;
if (XE_GT_WA(tile->primary_gt, 22010954014)) if (XE_DEVICE_WA(tile->xe, 22010954014))
xe_mmio_rmw32(mmio, XEHP_CLOCK_GATE_DIS, 0, SGSI_SIDECLK_DIS); xe_mmio_rmw32(mmio, XEHP_CLOCK_GATE_DIS, 0, SGSI_SIDECLK_DIS);
} }

View File

@ -14,7 +14,6 @@
14016763929 SUBPLATFORM(DG2, G10) 14016763929 SUBPLATFORM(DG2, G10)
SUBPLATFORM(DG2, G12) SUBPLATFORM(DG2, G12)
16017236439 PLATFORM(PVC) 16017236439 PLATFORM(PVC)
22010954014 PLATFORM(DG2)
14019821291 MEDIA_VERSION_RANGE(1300, 2000) 14019821291 MEDIA_VERSION_RANGE(1300, 2000)
14015076503 MEDIA_VERSION(1300) 14015076503 MEDIA_VERSION(1300)
16020292621 GRAPHICS_VERSION(2004), GRAPHICS_STEP(A0, B0) 16020292621 GRAPHICS_VERSION(2004), GRAPHICS_STEP(A0, B0)
@ -74,9 +73,5 @@
16023683509 MEDIA_VERSION(2000), FUNC(xe_rtp_match_psmi_enabled) 16023683509 MEDIA_VERSION(2000), FUNC(xe_rtp_match_psmi_enabled)
MEDIA_VERSION(3000), MEDIA_STEP(A0, B0), FUNC(xe_rtp_match_psmi_enabled) MEDIA_VERSION(3000), MEDIA_STEP(A0, B0), FUNC(xe_rtp_match_psmi_enabled)
# SoC workaround - currently applies to all platforms with the following
# primary GT GMDID
14022085890 GRAPHICS_VERSION(2001)
15015404425_disable PLATFORM(PANTHERLAKE), MEDIA_STEP(B0, FOREVER) 15015404425_disable PLATFORM(PANTHERLAKE), MEDIA_STEP(B0, FOREVER)
16026007364 MEDIA_VERSION(3000) 16026007364 MEDIA_VERSION(3000)

View File

@ -849,7 +849,7 @@
MACRO__(0x64B0, ## __VA_ARGS__) MACRO__(0x64B0, ## __VA_ARGS__)
/* BMG */ /* BMG */
#define INTEL_BMG_IDS(MACRO__, ...) \ #define INTEL_BMG_G21_IDS(MACRO__, ...) \
MACRO__(0xE202, ## __VA_ARGS__), \ MACRO__(0xE202, ## __VA_ARGS__), \
MACRO__(0xE209, ## __VA_ARGS__), \ MACRO__(0xE209, ## __VA_ARGS__), \
MACRO__(0xE20B, ## __VA_ARGS__), \ MACRO__(0xE20B, ## __VA_ARGS__), \
@ -858,7 +858,10 @@
MACRO__(0xE210, ## __VA_ARGS__), \ MACRO__(0xE210, ## __VA_ARGS__), \
MACRO__(0xE211, ## __VA_ARGS__), \ MACRO__(0xE211, ## __VA_ARGS__), \
MACRO__(0xE212, ## __VA_ARGS__), \ MACRO__(0xE212, ## __VA_ARGS__), \
MACRO__(0xE216, ## __VA_ARGS__), \ MACRO__(0xE216, ## __VA_ARGS__)
#define INTEL_BMG_IDS(MACRO__, ...) \
INTEL_BMG_G21_IDS(MACRO__, __VA_ARGS__), \
MACRO__(0xE220, ## __VA_ARGS__), \ MACRO__(0xE220, ## __VA_ARGS__), \
MACRO__(0xE221, ## __VA_ARGS__), \ MACRO__(0xE221, ## __VA_ARGS__), \
MACRO__(0xE222, ## __VA_ARGS__), \ MACRO__(0xE222, ## __VA_ARGS__), \