Commit 190eaa45 authored by Dave Airlie's avatar Dave Airlie
Browse files

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



Driver Changes:
- Skip address copy for sync-only execs (Lin)
- Fix a WA (Tvrtko)
- Derive mem_copy cap from graphics version (Nitin)
- Fix is_bound() pci_dev lifetime (Lin)
- xe nvm cleanup fixes (Lin)

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

From: Thomas Hellstrom <thomas.hellstrom@linux.intel.com>
Link: https://patch.msgid.link/aXu_JzBFb9YVFYW1@fedora
parents 2243afcd 8a44241b
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -347,11 +347,10 @@ static bool is_bound(struct xe_config_group_device *dev)
		return false;

	ret = pci_get_drvdata(pdev);
	pci_dev_put(pdev);

	if (ret)
		pci_dbg(pdev, "Already bound to driver\n");

	pci_dev_put(pdev);
	return ret;
}

+0 −2
Original line number Diff line number Diff line
@@ -984,8 +984,6 @@ void xe_device_remove(struct xe_device *xe)
{
	xe_display_unregister(xe);

	xe_nvm_fini(xe);

	drm_dev_unplug(&xe->drm);

	xe_bo_pci_dev_remove_all(xe);
+3 −3
Original line number Diff line number Diff line
@@ -190,9 +190,9 @@ int xe_exec_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
		goto err_syncs;
	}

	if (xe_exec_queue_is_parallel(q)) {
		err = copy_from_user(addresses, addresses_user, sizeof(u64) *
				     q->width);
	if (args->num_batch_buffer && xe_exec_queue_is_parallel(q)) {
		err = copy_from_user(addresses, addresses_user,
				     sizeof(u64) * q->width);
		if (err) {
			err = -EFAULT;
			goto err_syncs;
+1 −1
Original line number Diff line number Diff line
@@ -1185,7 +1185,7 @@ static ssize_t setup_invalidate_state_cache_wa(struct xe_lrc *lrc,
		return -ENOSPC;

	*cmd++ = MI_LOAD_REGISTER_IMM | MI_LRI_NUM_REGS(1);
	*cmd++ = CS_DEBUG_MODE1(0).addr;
	*cmd++ = CS_DEBUG_MODE2(0).addr;
	*cmd++ = _MASKED_BIT_ENABLE(INSTRUCTION_STATE_CACHE_INVALIDATE);

	return cmd - batch;
+27 −28
Original line number Diff line number Diff line
@@ -83,6 +83,27 @@ static bool xe_nvm_writable_override(struct xe_device *xe)
	return writable_override;
}

static void xe_nvm_fini(void *arg)
{
	struct xe_device *xe = arg;
	struct intel_dg_nvm_dev *nvm = xe->nvm;

	if (!xe->info.has_gsc_nvm)
		return;

	/* No access to internal NVM from VFs */
	if (IS_SRIOV_VF(xe))
		return;

	/* Nvm pointer should not be NULL here */
	if (WARN_ON(!nvm))
		return;

	auxiliary_device_delete(&nvm->aux_dev);
	auxiliary_device_uninit(&nvm->aux_dev);
	xe->nvm = NULL;
}

int xe_nvm_init(struct xe_device *xe)
{
	struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
@@ -132,39 +153,17 @@ int xe_nvm_init(struct xe_device *xe)
	ret = auxiliary_device_init(aux_dev);
	if (ret) {
		drm_err(&xe->drm, "xe-nvm aux init failed %d\n", ret);
		goto err;
		kfree(nvm);
		xe->nvm = NULL;
		return ret;
	}

	ret = auxiliary_device_add(aux_dev);
	if (ret) {
		drm_err(&xe->drm, "xe-nvm aux add failed %d\n", ret);
		auxiliary_device_uninit(aux_dev);
		goto err;
	}
	return 0;

err:
	kfree(nvm);
		xe->nvm = NULL;
		return ret;
	}

void xe_nvm_fini(struct xe_device *xe)
{
	struct intel_dg_nvm_dev *nvm = xe->nvm;

	if (!xe->info.has_gsc_nvm)
		return;

	/* No access to internal NVM from VFs */
	if (IS_SRIOV_VF(xe))
		return;

	/* Nvm pointer should not be NULL here */
	if (WARN_ON(!nvm))
		return;

	auxiliary_device_delete(&nvm->aux_dev);
	auxiliary_device_uninit(&nvm->aux_dev);
	xe->nvm = NULL;
	return devm_add_action_or_reset(xe->drm.dev, xe_nvm_fini, xe);
}
Loading