Commit 10acca92 authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'drm-xe-next-fixes-2025-08-06' of...

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

 into drm-next

 - SRIOV: PF fixes and removal of need of module param (Michal)
 - Fix driver unbind around Devcoredump (Bala)
 - Mark xe driver as BROKEN if kernel page size is not 4kB (Simon)

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

From: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://lore.kernel.org/r/aJNXnIAp2Cq-2pZj@intel.com
parents 48bb97cf 022906af
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ config DRM_XE
	depends on KUNIT || !KUNIT
	depends on INTEL_VSEC || !INTEL_VSEC
	depends on X86_PLATFORM_DEVICES || !(X86 && ACPI)
	depends on PAGE_SIZE_4KB || COMPILE_TEST || BROKEN
	select INTERVAL_TREE
	# we need shmfs for the swappable backing store, and in particular
	# the shmem_readpage() which depends upon tmpfs
+4 −4
Original line number Diff line number Diff line
@@ -802,10 +802,6 @@ int xe_device_probe(struct xe_device *xe)
			return err;
	}

	err = xe_devcoredump_init(xe);
	if (err)
		return err;

	/*
	 * From here on, if a step fails, make sure a Driver-FLR is triggereed
	 */
@@ -870,6 +866,10 @@ int xe_device_probe(struct xe_device *xe)
	    XE_WA(xe->tiles->media_gt, 15015404425_disable))
		XE_DEVICE_WA_DISABLE(xe, 15015404425);

	err = xe_devcoredump_init(xe);
	if (err)
		return err;

	xe_nvm_init(xe);

	err = xe_heci_gsc_init(xe);
+56 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
#include "xe_gt_sriov_pf_migration.h"
#include "xe_gt_sriov_pf_service.h"
#include "xe_gt_sriov_printk.h"
#include "xe_guc_submit.h"
#include "xe_mmio.h"
#include "xe_pm.h"

@@ -47,9 +48,16 @@ static int pf_alloc_metadata(struct xe_gt *gt)

static void pf_init_workers(struct xe_gt *gt)
{
	xe_gt_assert(gt, IS_SRIOV_PF(gt_to_xe(gt)));
	INIT_WORK(&gt->sriov.pf.workers.restart, pf_worker_restart_func);
}

static void pf_fini_workers(struct xe_gt *gt)
{
	xe_gt_assert(gt, IS_SRIOV_PF(gt_to_xe(gt)));
	disable_work_sync(&gt->sriov.pf.workers.restart);
}

/**
 * xe_gt_sriov_pf_init_early - Prepare SR-IOV PF data structures on PF.
 * @gt: the &xe_gt to initialize
@@ -79,6 +87,21 @@ int xe_gt_sriov_pf_init_early(struct xe_gt *gt)
	return 0;
}

static void pf_fini_action(void *arg)
{
	struct xe_gt *gt = arg;

	pf_fini_workers(gt);
}

static int pf_init_late(struct xe_gt *gt)
{
	struct xe_device *xe = gt_to_xe(gt);

	xe_gt_assert(gt, IS_SRIOV_PF(xe));
	return devm_add_action_or_reset(xe->drm.dev, pf_fini_action, gt);
}

/**
 * xe_gt_sriov_pf_init - Prepare SR-IOV PF data structures on PF.
 * @gt: the &xe_gt to initialize
@@ -95,7 +118,15 @@ int xe_gt_sriov_pf_init(struct xe_gt *gt)
	if (err)
		return err;

	return xe_gt_sriov_pf_migration_init(gt);
	err = xe_gt_sriov_pf_migration_init(gt);
	if (err)
		return err;

	err = pf_init_late(gt);
	if (err)
		return err;

	return 0;
}

static bool pf_needs_enable_ggtt_guest_update(struct xe_device *xe)
@@ -230,3 +261,27 @@ void xe_gt_sriov_pf_restart(struct xe_gt *gt)
{
	pf_queue_restart(gt);
}

static void pf_flush_restart(struct xe_gt *gt)
{
	xe_gt_assert(gt, IS_SRIOV_PF(gt_to_xe(gt)));
	flush_work(&gt->sriov.pf.workers.restart);
}

/**
 * xe_gt_sriov_pf_wait_ready() - Wait until per-GT PF SR-IOV support is ready.
 * @gt: the &xe_gt
 *
 * This function can only be called on PF.
 *
 * Return: 0 on success or a negative error code on failure.
 */
int xe_gt_sriov_pf_wait_ready(struct xe_gt *gt)
{
	/* don't wait if there is another ongoing reset */
	if (xe_guc_read_stopped(&gt->uc.guc))
		return -EBUSY;

	pf_flush_restart(gt);
	return 0;
}
+1 −0
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@ struct xe_gt;
#ifdef CONFIG_PCI_IOV
int xe_gt_sriov_pf_init_early(struct xe_gt *gt);
int xe_gt_sriov_pf_init(struct xe_gt *gt);
int xe_gt_sriov_pf_wait_ready(struct xe_gt *gt);
void xe_gt_sriov_pf_init_hw(struct xe_gt *gt);
void xe_gt_sriov_pf_sanitize_hw(struct xe_gt *gt, unsigned int vfid);
void xe_gt_sriov_pf_stop_prepare(struct xe_gt *gt);
+3 −1
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@
#include "xe_gt_sriov_pf_policy.h"
#include "xe_gt_sriov_pf_service.h"
#include "xe_pm.h"
#include "xe_sriov_pf.h"

/*
 *      /sys/kernel/debug/dri/0/
@@ -205,7 +206,8 @@ static int CONFIG##_set(void *data, u64 val) \
		return -EOVERFLOW;						\
										\
	xe_pm_runtime_get(xe);							\
	err = xe_gt_sriov_pf_config_set_##CONFIG(gt, vfid, val);		\
	err = xe_sriov_pf_wait_ready(xe) ?:					\
	      xe_gt_sriov_pf_config_set_##CONFIG(gt, vfid, val);		\
	xe_pm_runtime_put(xe);							\
										\
	return err;								\
Loading