mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-30 14:33:24 -04:00
Merge tag 'drm-xe-next-fixes-2026-08-13' of https://gitlab.freedesktop.org/drm/xe/kernel into drm-next
Couple drm-ras fixes, a probe failure clean-up fix, a GT freq boundaries fixes for BMG/CRI and a Media engines/slice fix. Signed-off-by: Dave Airlie <airlied@redhat.com> From: Rodrigo Vivi <rodrigo.vivi@intel.com> Link: https://patch.msgid.link/an4NGzsYN9MOTFII@intel.com
This commit is contained in:
@@ -1141,7 +1141,18 @@ int xe_device_probe(struct xe_device *xe)
|
||||
if (err)
|
||||
goto err_unregister_display;
|
||||
|
||||
return devm_add_action_or_reset(xe->drm.dev, xe_device_sanitize, xe);
|
||||
/*
|
||||
* Process and log any errors detected by hardware. Possible results can
|
||||
* include declaring the device as wedged, which must be done only after
|
||||
* xe_device_wedged_fini() is registered.
|
||||
*/
|
||||
xe_ras_process_errors(xe);
|
||||
|
||||
err = devm_add_action_or_reset(xe->drm.dev, xe_device_sanitize, xe);
|
||||
if (err)
|
||||
goto err_unregister_display;
|
||||
|
||||
return 0;
|
||||
|
||||
err_unregister_display:
|
||||
xe_display_unregister(xe);
|
||||
|
||||
@@ -199,6 +199,9 @@ int xe_drm_ras_init(struct xe_device *xe)
|
||||
struct drm_ras_node *node;
|
||||
int err;
|
||||
|
||||
if (!xe->info.has_drm_ras)
|
||||
return 0;
|
||||
|
||||
node = drmm_kcalloc(&xe->drm, DRM_XE_RAS_ERR_SEV_MAX, sizeof(*node), GFP_KERNEL);
|
||||
if (!node)
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -443,11 +443,16 @@ static void init_steering_dss(struct xe_gt *gt)
|
||||
|
||||
static void init_steering_oaddrm(struct xe_gt *gt)
|
||||
{
|
||||
u64 hwe_mask = XE_HW_ENGINE_VCS0 | XE_HW_ENGINE_VECS0;
|
||||
|
||||
/* TODO: Add 'VD per SCMI' and 'VE per SCMI' values into 'struct xe_media_desc' */
|
||||
if (MEDIA_VERx100(gt_to_xe(gt)) >= 3500)
|
||||
hwe_mask |= XE_HW_ENGINE_VCS1 | XE_HW_ENGINE_VECS1;
|
||||
/*
|
||||
* First instance is only terminated if the entire first media slice
|
||||
* is absent (i.e., no VCS0 or VECS0).
|
||||
* is absent (i.e., no engines in hwe_mask).
|
||||
*/
|
||||
if (gt->info.engine_mask & (XE_HW_ENGINE_VCS0 | XE_HW_ENGINE_VECS0))
|
||||
if (gt->info.engine_mask & hwe_mask)
|
||||
gt->steering[OADDRM].group_target = 0;
|
||||
else
|
||||
gt->steering[OADDRM].group_target = 1;
|
||||
|
||||
@@ -911,6 +911,7 @@ static bool pc_needs_min_freq_change(struct xe_guc_pc *pc)
|
||||
static int pc_adjust_freq_bounds(struct xe_guc_pc *pc)
|
||||
{
|
||||
int ret;
|
||||
u32 min_freq;
|
||||
|
||||
lockdep_assert_held(&pc->freq_lock);
|
||||
|
||||
@@ -933,8 +934,14 @@ static int pc_adjust_freq_bounds(struct xe_guc_pc *pc)
|
||||
* Same thing happens for Server platforms where min is listed as
|
||||
* RPMax
|
||||
*/
|
||||
if (pc_get_min_freq(pc) > pc->rp0_freq)
|
||||
min_freq = pc_get_min_freq(pc);
|
||||
if (min_freq > pc->rp0_freq) {
|
||||
ret = pc_set_min_freq(pc, pc->rp0_freq);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
min_freq = pc->rp0_freq;
|
||||
}
|
||||
|
||||
/*
|
||||
* Setting GT RP min frequency to 1.2GHz by default for
|
||||
@@ -947,8 +954,8 @@ static int pc_adjust_freq_bounds(struct xe_guc_pc *pc)
|
||||
* we aren't expecting high power output across board
|
||||
*
|
||||
*/
|
||||
if (pc_needs_min_freq_change(pc))
|
||||
ret = pc_set_min_freq(pc, max(BMG_MIN_FREQ, pc_get_min_freq(pc)));
|
||||
if (pc_needs_min_freq_change(pc) && min_freq < BMG_MIN_FREQ)
|
||||
ret = pc_set_min_freq(pc, BMG_MIN_FREQ);
|
||||
|
||||
out:
|
||||
return ret;
|
||||
|
||||
@@ -681,9 +681,6 @@ void xe_ras_init(struct xe_device *xe)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (!xe->info.has_drm_ras)
|
||||
return;
|
||||
|
||||
xe_drm_ras_init(xe);
|
||||
|
||||
if (!xe->info.has_sysctrl)
|
||||
@@ -692,12 +689,6 @@ void xe_ras_init(struct xe_device *xe)
|
||||
if (IS_ENABLED(CONFIG_PCIEAER))
|
||||
ras_usp_aer_init(xe);
|
||||
|
||||
/*
|
||||
* During probe, process and log any errors detected by firmware while the driver was not
|
||||
* loaded. Critical errors such as Punit and CSC are reported through Pcode init failure,
|
||||
* causing the driver to enter survivability mode.
|
||||
*/
|
||||
xe_ras_process_errors(xe);
|
||||
ret = devm_device_add_group(xe->drm.dev, &gpu_health_group);
|
||||
if (ret)
|
||||
xe_err(xe, "Failed to create GPU health sysfs, err=%d\n", ret);
|
||||
|
||||
Reference in New Issue
Block a user