Commit 502d2d8e authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'drm-xe-next-fixes-2026-01-29' of...

Merge tag 'drm-xe-next-fixes-2026-01-29' of https://gitlab.freedesktop.org/drm/xe/kernel

 into drm-next

- Reduce LRC timestamp stuck message on VFs to notice (Brost)
- Disable GuC Power DCC strategy on PTL (Vinay)
- Unregister drm device on probe error (Lin)

Signed-off-by: default avatarDave Airlie <airlied@redhat.com>

From: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patch.msgid.link/aXuyrtsnlAOmj_OB@intel.com
parents 8fbe215d 96c2c72b
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1017,6 +1017,7 @@ int xe_device_probe(struct xe_device *xe)

err_unregister_display:
	xe_display_unregister(xe);
	drm_dev_unregister(&xe->drm);

	return err;
}
+34 −0
Original line number Diff line number Diff line
@@ -1198,6 +1198,36 @@ int xe_guc_pc_set_power_profile(struct xe_guc_pc *pc, const char *buf)
	return ret;
}

static int pc_action_set_dcc(struct xe_guc_pc *pc, bool enable)
{
	int ret;

	ret = pc_action_set_param(pc,
				  SLPC_PARAM_TASK_ENABLE_DCC,
				  enable);
	if (!ret)
		return pc_action_set_param(pc,
					   SLPC_PARAM_TASK_DISABLE_DCC,
					   !enable);
	else
		return ret;
}

static int pc_modify_defaults(struct xe_guc_pc *pc)
{
	struct xe_device *xe = pc_to_xe(pc);
	struct xe_gt *gt = pc_to_gt(pc);
	int ret = 0;

	if (xe->info.platform == XE_PANTHERLAKE) {
		ret = pc_action_set_dcc(pc, false);
		if (unlikely(ret))
			xe_gt_err(gt, "Failed to modify DCC default: %pe\n", ERR_PTR(ret));
	}

	return ret;
}

/**
 * xe_guc_pc_start - Start GuC's Power Conservation component
 * @pc: Xe_GuC_PC instance
@@ -1249,6 +1279,10 @@ int xe_guc_pc_start(struct xe_guc_pc *pc)
			   ktime_ms_delta(ktime_get(), earlier));
	}

	ret = pc_modify_defaults(pc);
	if (ret)
		return ret;

	ret = pc_init_freqs(pc);
	if (ret)
		return ret;
+8 −3
Original line number Diff line number Diff line
@@ -1317,9 +1317,14 @@ static bool check_timeout(struct xe_exec_queue *q, struct xe_sched_job *job)

	ctx_timestamp = lower_32_bits(xe_lrc_timestamp(q->lrc[0]));
	if (ctx_timestamp == job->sample_timestamp) {
		if (IS_SRIOV_VF(gt_to_xe(gt)))
			xe_gt_notice(gt, "Check job timeout: seqno=%u, lrc_seqno=%u, guc_id=%d, timestamp stuck",
				     xe_sched_job_seqno(job),
				     xe_sched_job_lrc_seqno(job), q->guc->id);
		else
			xe_gt_warn(gt, "Check job timeout: seqno=%u, lrc_seqno=%u, guc_id=%d, timestamp stuck",
			   xe_sched_job_seqno(job), xe_sched_job_lrc_seqno(job),
			   q->guc->id);
				   xe_sched_job_seqno(job),
				   xe_sched_job_lrc_seqno(job), q->guc->id);

		return xe_sched_invalidate_job(job, 0);
	}