diff options
| -rw-r--r-- | drivers/gpu/drm/xe/xe_guc_pc.c | 5 | ||||
| -rw-r--r-- | drivers/gpu/drm/xe/xe_wa_oob.rules | 4 | 
2 files changed, 9 insertions, 0 deletions
diff --git a/drivers/gpu/drm/xe/xe_guc_pc.c b/drivers/gpu/drm/xe/xe_guc_pc.c index aedf59162709..39d2acb2f30f 100644 --- a/drivers/gpu/drm/xe/xe_guc_pc.c +++ b/drivers/gpu/drm/xe/xe_guc_pc.c @@ -51,6 +51,7 @@  #define LNL_MERT_FREQ_CAP	800  #define BMG_MERT_FREQ_CAP	2133 +#define BMG_MIN_FREQ		1200  #define SLPC_RESET_TIMEOUT_MS 5 /* roughly 5ms, but no need for precision */  #define SLPC_RESET_EXTENDED_TIMEOUT_MS 1000 /* To be used only at pc_start */ @@ -817,6 +818,7 @@ void xe_guc_pc_init_early(struct xe_guc_pc *pc)  static int pc_adjust_freq_bounds(struct xe_guc_pc *pc)  { +	struct xe_tile *tile = gt_to_tile(pc_to_gt(pc));  	int ret;  	lockdep_assert_held(&pc->freq_lock); @@ -843,6 +845,9 @@ static int pc_adjust_freq_bounds(struct xe_guc_pc *pc)  	if (pc_get_min_freq(pc) > pc->rp0_freq)  		ret = pc_set_min_freq(pc, pc->rp0_freq); +	if (XE_WA(tile->primary_gt, 14022085890)) +		ret = pc_set_min_freq(pc, max(BMG_MIN_FREQ, pc_get_min_freq(pc))); +  out:  	return ret;  } diff --git a/drivers/gpu/drm/xe/xe_wa_oob.rules b/drivers/gpu/drm/xe/xe_wa_oob.rules index 425cb401c276..b6ed8cfea938 100644 --- a/drivers/gpu/drm/xe/xe_wa_oob.rules +++ b/drivers/gpu/drm/xe/xe_wa_oob.rules @@ -59,3 +59,7 @@ no_media_l3	MEDIA_VERSION(3000)  		MEDIA_VERSION_RANGE(1301, 3000)  16026508708	GRAPHICS_VERSION_RANGE(1200, 3001)  		MEDIA_VERSION_RANGE(1300, 3000) + +# SoC workaround - currently applies to all platforms with the following +# primary GT GMDID +14022085890	GRAPHICS_VERSION(2001)  | 
