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

Merge tag 'drm-intel-gt-next-2023-06-08' of...

Merge tag 'drm-intel-gt-next-2023-06-08' of git://anongit.freedesktop.org/drm/drm-intel

 into drm-next

UAPI Changes:

- I915_GEM_CREATE_EXT_SET_PAT for Mesa on Meteorlake.

Driver Changes:

Fixes/improvements/new stuff:

- Use large rings for compute contexts (Chris Wilson)
- Better logging/debug of unexpected GuC communication issues (Michal Wajdeczko)
- Clear out entire reports after reading if not power of 2 size (Ashutosh Dixit)
- Limit lmem allocation size to succeed on SmallBars (Andrzej Hajda)
- perf/OA capture robustness improvements on DG2 (Umesh Nerlige Ramappa)
- Fix error code in intel_gsc_uc_heci_cmd_submit_nonpriv() (Dan Carpenter)

Future platform enablement:

- Add workaround 14016712196 (Tejas Upadhyay)
- HuC loading for MTL (Daniele Ceraolo Spurio)
- Allow user to set cache at BO creation (Fei Yang)

Miscellaneous:

- Use system include style for drm headers (Jani Nikula)
- Drop legacy CTB definitions (Michal Wajdeczko)
- Turn off the timer to sample frequencies when GT is parked (Ashutosh Dixit)
- Make PMU sample array two-dimensional (Ashutosh Dixit)
- Use the correct error value when kernel_context() fails (Andi Shyti)
- Fix second parameter type of pre-gen8 pte_encode callbacks (Nathan Chancellor)
- Fix parameter in gmch_ggtt_insert_{entries, page}() (Nathan Chancellor)
- Fix size_t format specifier in gsccs_send_message() (Nathan Chancellor)
- Use the fdinfo helper (Tvrtko Ursulin)
- Add some missing error propagation (Tvrtko Ursulin)
- Reduce I915_MAX_GT to 2 (Matt Atwood)
- Rename I915_PMU_MAX_GTS to I915_PMU_MAX_GT (Matt Atwood)
- Remove some obsolete definitions (John Harrison)

Merges:

- Merge drm/drm-next into drm-intel-gt-next (Tvrtko Ursulin)

Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
From: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/ZIH09fqe5v5yArsu@tursulin-desk
parents 959294e4 24335848
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -157,6 +157,7 @@ config DRM_I915_SW_FENCE_CHECK_DAG
config DRM_I915_DEBUG_GUC
	bool "Enable additional driver debugging for GuC"
	depends on DRM_I915
	select STACKDEPOT
	default n
	help
	  Choose this option to turn on extra driver debugging that may affect
+5 −1
Original line number Diff line number Diff line
@@ -964,6 +964,10 @@ static int intel_context_set_gem(struct intel_context *ce,
	RCU_INIT_POINTER(ce->gem_context, ctx);

	GEM_BUG_ON(intel_context_is_pinned(ce));

	if (ce->engine->class == COMPUTE_CLASS)
		ce->ring_size = SZ_512K;
	else
		ce->ring_size = SZ_16K;

	i915_vm_put(ce->vm);
+40 −0
Original line number Diff line number Diff line
@@ -245,6 +245,7 @@ struct create_ext {
	unsigned int n_placements;
	unsigned int placement_mask;
	unsigned long flags;
	unsigned int pat_index;
};

static void repr_placements(char *buf, size_t size,
@@ -394,11 +395,43 @@ static int ext_set_protected(struct i915_user_extension __user *base, void *data
	return 0;
}

static int ext_set_pat(struct i915_user_extension __user *base, void *data)
{
	struct create_ext *ext_data = data;
	struct drm_i915_private *i915 = ext_data->i915;
	struct drm_i915_gem_create_ext_set_pat ext;
	unsigned int max_pat_index;

	BUILD_BUG_ON(sizeof(struct drm_i915_gem_create_ext_set_pat) !=
		     offsetofend(struct drm_i915_gem_create_ext_set_pat, rsvd));

	/* Limiting the extension only to Meteor Lake */
	if (!IS_METEORLAKE(i915))
		return -ENODEV;

	if (copy_from_user(&ext, base, sizeof(ext)))
		return -EFAULT;

	max_pat_index = INTEL_INFO(i915)->max_pat_index;

	if (ext.pat_index > max_pat_index) {
		drm_dbg(&i915->drm, "PAT index is invalid: %u\n",
			ext.pat_index);
		return -EINVAL;
	}

	ext_data->pat_index = ext.pat_index;

	return 0;
}

static const i915_user_extension_fn create_extensions[] = {
	[I915_GEM_CREATE_EXT_MEMORY_REGIONS] = ext_set_placements,
	[I915_GEM_CREATE_EXT_PROTECTED_CONTENT] = ext_set_protected,
	[I915_GEM_CREATE_EXT_SET_PAT] = ext_set_pat,
};

#define PAT_INDEX_NOT_SET	0xffff
/**
 * i915_gem_create_ext_ioctl - Creates a new mm object and returns a handle to it.
 * @dev: drm device pointer
@@ -418,6 +451,7 @@ i915_gem_create_ext_ioctl(struct drm_device *dev, void *data,
	if (args->flags & ~I915_GEM_CREATE_EXT_FLAG_NEEDS_CPU_ACCESS)
		return -EINVAL;

	ext_data.pat_index = PAT_INDEX_NOT_SET;
	ret = i915_user_extensions(u64_to_user_ptr(args->extensions),
				   create_extensions,
				   ARRAY_SIZE(create_extensions),
@@ -454,5 +488,11 @@ i915_gem_create_ext_ioctl(struct drm_device *dev, void *data,
	if (IS_ERR(obj))
		return PTR_ERR(obj);

	if (ext_data.pat_index != PAT_INDEX_NOT_SET) {
		i915_gem_object_set_pat_index(obj, ext_data.pat_index);
		/* Mark pat_index is set by UMD */
		obj->pat_set_by_user = true;
	}

	return i915_gem_publish(obj, file, &args->size, &args->handle);
}
+6 −0
Original line number Diff line number Diff line
@@ -208,6 +208,12 @@ bool i915_gem_object_can_bypass_llc(struct drm_i915_gem_object *obj)
	if (!(obj->flags & I915_BO_ALLOC_USER))
		return false;

	/*
	 * Always flush cache for UMD objects at creation time.
	 */
	if (obj->pat_set_by_user)
		return true;

	/*
	 * EHL and JSL add the 'Bypass LLC' MOCS entry, which should make it
	 * possible for userspace to bypass the GTT caching bits set by the
+10 −4
Original line number Diff line number Diff line
@@ -348,8 +348,10 @@ static int live_parallel_switch(void *arg)
				continue;

			ce = intel_context_create(data[m].ce[0]->engine);
			if (IS_ERR(ce))
			if (IS_ERR(ce)) {
				err = PTR_ERR(ce);
				goto out;
			}

			err = intel_context_pin(ce);
			if (err) {
@@ -369,8 +371,10 @@ static int live_parallel_switch(void *arg)

		worker = kthread_create_worker(0, "igt/parallel:%s",
					       data[n].ce[0]->engine->name);
		if (IS_ERR(worker))
		if (IS_ERR(worker)) {
			err = PTR_ERR(worker);
			goto out;
		}

		data[n].worker = worker;
	}
@@ -399,8 +403,10 @@ static int live_parallel_switch(void *arg)
			}
		}

		if (igt_live_test_end(&t))
			err = -EIO;
		if (igt_live_test_end(&t)) {
			err = err ?: -EIO;
			break;
		}
	}

out:
Loading