Commit b8de9b21 authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'drm-xe-fixes-2025-06-19' of https://gitlab.freedesktop.org/drm/xe/kernel into drm-fixes



Driver Changes:
- A workaround update (Vinay)
- Fix memset on iomem (Lucas)
- Fix early wedge on GuC Load failure (Daniele)

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

From: Thomas Hellstrom <thomas.hellstrom@linux.intel.com>
Link: https://lore.kernel.org/r/aFQ03kNzhbiNK7gW@fedora
parents 97aadc16 a39d082c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -118,7 +118,7 @@ static void xe_gt_enable_host_l2_vram(struct xe_gt *gt)
		xe_gt_mcr_multicast_write(gt, XE2_GAMREQSTRM_CTRL, reg);
	}

	xe_gt_mcr_multicast_write(gt, XEHPC_L3CLOS_MASK(3), 0x3);
	xe_gt_mcr_multicast_write(gt, XEHPC_L3CLOS_MASK(3), 0xF);
	xe_force_wake_put(gt_to_fw(gt), fw_ref);
}

+8 −0
Original line number Diff line number Diff line
@@ -137,6 +137,14 @@ void xe_gt_tlb_invalidation_reset(struct xe_gt *gt)
	struct xe_gt_tlb_invalidation_fence *fence, *next;
	int pending_seqno;

	/*
	 * we can get here before the CTs are even initialized if we're wedging
	 * very early, in which case there are not going to be any pending
	 * fences so we can bail immediately.
	 */
	if (!xe_guc_ct_initialized(&gt->uc.guc.ct))
		return;

	/*
	 * CT channel is already disabled at this point. No new TLB requests can
	 * appear.
+5 −2
Original line number Diff line number Diff line
@@ -514,6 +514,9 @@ void xe_guc_ct_disable(struct xe_guc_ct *ct)
 */
void xe_guc_ct_stop(struct xe_guc_ct *ct)
{
	if (!xe_guc_ct_initialized(ct))
		return;

	xe_guc_ct_set_state(ct, XE_GUC_CT_STATE_STOPPED);
	stop_g2h_handler(ct);
}
@@ -760,7 +763,7 @@ static int __guc_ct_send_locked(struct xe_guc_ct *ct, const u32 *action,
	u16 seqno;
	int ret;

	xe_gt_assert(gt, ct->state != XE_GUC_CT_STATE_NOT_INITIALIZED);
	xe_gt_assert(gt, xe_guc_ct_initialized(ct));
	xe_gt_assert(gt, !g2h_len || !g2h_fence);
	xe_gt_assert(gt, !num_g2h || !g2h_fence);
	xe_gt_assert(gt, !g2h_len || num_g2h);
@@ -1344,7 +1347,7 @@ static int g2h_read(struct xe_guc_ct *ct, u32 *msg, bool fast_path)
	u32 action;
	u32 *hxg;

	xe_gt_assert(gt, ct->state != XE_GUC_CT_STATE_NOT_INITIALIZED);
	xe_gt_assert(gt, xe_guc_ct_initialized(ct));
	lockdep_assert_held(&ct->fast_lock);

	if (ct->state == XE_GUC_CT_STATE_DISABLED)
+5 −0
Original line number Diff line number Diff line
@@ -22,6 +22,11 @@ void xe_guc_ct_snapshot_print(struct xe_guc_ct_snapshot *snapshot, struct drm_pr
void xe_guc_ct_snapshot_free(struct xe_guc_ct_snapshot *snapshot);
void xe_guc_ct_print(struct xe_guc_ct *ct, struct drm_printer *p, bool want_ctb);

static inline bool xe_guc_ct_initialized(struct xe_guc_ct *ct)
{
	return ct->state != XE_GUC_CT_STATE_NOT_INITIALIZED;
}

static inline bool xe_guc_ct_enabled(struct xe_guc_ct *ct)
{
	return ct->state == XE_GUC_CT_STATE_ENABLED;
+1 −1
Original line number Diff line number Diff line
@@ -1068,7 +1068,7 @@ int xe_guc_pc_start(struct xe_guc_pc *pc)
		goto out;
	}

	memset(pc->bo->vmap.vaddr, 0, size);
	xe_map_memset(xe, &pc->bo->vmap, 0, 0, size);
	slpc_shared_data_write(pc, header.size, size);

	earlier = ktime_get();
Loading