Commit 2c2d7a67 authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'drm-intel-gt-next-2022-08-24' of...

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

 into drm-next

UAPI Changes:

- Create gt/gtN/.defaults/ for per gt sysfs defaults

  Create a gt/gtN/.defaults/ directory (similar to
  engine/<engine-name>/.defaults/) to expose default parameter values for
  each gt in sysfs. This allows userspace to restore default parameter values
  after they have changed.

Driver Changes:

- Support GuC v69 in parallel to v70 (Daniele)
- Improve TLB invalidation to limit performance regression (Chris, Mauro)
- Expose per-gt RPS defaults in sysfs (Ashutosh)
- Suppress OOM warning for shmemfs object allocation failure (Chris, Nirmoy)
- Disable PCI resize on 32-bit machines (Nirmoy)
- Update DG2 to GuC v70.4.1 (John)
- Fix CCS data copying on DG2 during swapping (Matt A)
- Add DG2 performance tuning setting recommended by spec (Matt R)
- Add GuC <-> kernel time stamp translation information to error logs (John)
- Record GuC CTB info in error logs (John)

- Route semaphores to GuC for Gen12+ when enabled (Michal Wi, John)
- Improve resilency to bug #3575: Handle reset timeouts under unrelated kernel hangs (Chris, Ashutosh)
- Avoid system freeze by removing shared locking on freeing objects (Chris, Nirmoy)
- Demote GuC error "No response for request" into debug when expected (Zhanjun)
- Fix GuC capture size warning and bump the size (John)
- Use streaming loads to speed up dumping the GuC log (Chris, John)
- Don't abort on CTB_UNUSED status from GuC (John)
- Don't send spurious policy update for GuC child contexts (Daniele)
- Don't leak the CCS state (Matt A)

- Prefer drm_err over pr_err (John)
- Eliminate unused calc_ctrl_surf_instr_size (Matt A)
- Add dedicated function for non-ctx register tuning settings (Matt R)
- Style and typo fixes, documentation improvements (Jason Wang, Mauro)
- Selftest improvements (Matt B, Rahul, John)

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

From: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/YwYTCjA/Rhpd1n4A@jlahtine-mobl.ger.corp.intel.com
parents 1c23f9e6 5ece208a
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -75,7 +75,7 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
	if (size > resource_size(&mr->region))
		return -ENOMEM;

	if (sg_alloc_table(st, page_count, GFP_KERNEL))
	if (sg_alloc_table(st, page_count, GFP_KERNEL | __GFP_NOWARN))
		return -ENOMEM;

	/*
@@ -137,7 +137,7 @@ int shmem_sg_alloc_table(struct drm_i915_private *i915, struct sg_table *st,
				 * trigger the out-of-memory killer and for
				 * this we want __GFP_RETRY_MAYFAIL.
				 */
				gfp |= __GFP_RETRY_MAYFAIL;
				gfp |= __GFP_RETRY_MAYFAIL | __GFP_NOWARN;
			}
		} while (1);

@@ -209,7 +209,7 @@ static int shmem_get_pages(struct drm_i915_gem_object *obj)
	GEM_BUG_ON(obj->write_domain & I915_GEM_GPU_DOMAINS);

rebuild_st:
	st = kmalloc(sizeof(*st), GFP_KERNEL);
	st = kmalloc(sizeof(*st), GFP_KERNEL | __GFP_NOWARN);
	if (!st)
		return -ENOMEM;

+8 −0
Original line number Diff line number Diff line
@@ -55,6 +55,14 @@ static inline void intel_gt_pm_might_put(struct intel_gt *gt)
	for (tmp = 1, intel_gt_pm_get(gt); tmp; \
	     intel_gt_pm_put(gt), tmp = 0)

/**
 * with_intel_gt_pm_if_awake - if GT is PM awake, get a reference to prevent
 *	it to sleep, run some code and then asynchrously put the reference
 *	away.
 *
 * @gt: pointer to the gt
 * @wf: pointer to a temporary wakeref.
 */
#define with_intel_gt_pm_if_awake(gt, wf) \
	for (wf = intel_gt_pm_get_if_awake(gt); wf; intel_gt_pm_put_async(gt), wf = 0)

+11 −0
Original line number Diff line number Diff line
@@ -259,6 +259,9 @@
#define   GEN9_PREEMPT_GPGPU_COMMAND_LEVEL	GEN9_PREEMPT_GPGPU_LEVEL(1, 0)
#define   GEN9_PREEMPT_GPGPU_LEVEL_MASK		GEN9_PREEMPT_GPGPU_LEVEL(1, 1)

#define DRAW_WATERMARK				_MMIO(0x26c0)
#define   VERT_WM_VAL				REG_GENMASK(9, 0)

#define GEN12_GLOBAL_MOCS(i)			_MMIO(0x4000 + (i) * 4) /* Global MOCS regs */

#define RENDER_HWS_PGA_GEN7			_MMIO(0x4080)
@@ -374,6 +377,9 @@
#define CHICKEN_RASTER_1			_MMIO(0x6204)
#define   DIS_SF_ROUND_NEAREST_EVEN		REG_BIT(8)

#define CHICKEN_RASTER_2			_MMIO(0x6208)
#define   TBIMR_FAST_CLIP			REG_BIT(5)

#define VFLSKPD					_MMIO(0x62a8)
#define   DIS_OVER_FETCH_CACHE			REG_BIT(1)
#define   DIS_MULT_MISS_RD_SQUASH		REG_BIT(0)
@@ -1007,6 +1013,8 @@
#define   GEN11_LSN_UNSLCVC_GAFS_HALF_CL2_MAXALLOC	(1 << 9)
#define   GEN11_LSN_UNSLCVC_GAFS_HALF_SF_MAXALLOC	(1 << 7)

#define GUCPMTIMESTAMP				_MMIO(0xc3e8)

#define __GEN9_RCS0_MOCS0			0xc800
#define GEN9_GFX_MOCS(i)			_MMIO(__GEN9_RCS0_MOCS0 + (i) * 4)
#define __GEN9_VCS0_MOCS0			0xc900
@@ -1078,6 +1086,7 @@

#define GEN10_SAMPLER_MODE			_MMIO(0xe18c)
#define   ENABLE_SMALLPL			REG_BIT(15)
#define   SC_DISABLE_POWER_OPTIMIZATION_EBB	REG_BIT(9)
#define   GEN11_SAMPLER_ENABLE_HEADLESS_MSG	REG_BIT(5)

#define GEN9_HALF_SLICE_CHICKEN7		_MMIO(0xe194)
@@ -1123,6 +1132,8 @@

#define RT_CTRL					_MMIO(0xe530)
#define   DIS_NULL_QUERY			REG_BIT(10)
#define   STACKID_CTRL				REG_GENMASK(6, 5)
#define   STACKID_CTRL_512			REG_FIELD_PREP(STACKID_CTRL, 0x2)

#define EU_PERF_CNTL1				_MMIO(0xe558)
#define EU_PERF_CNTL5				_MMIO(0xe55c)
+5 −5
Original line number Diff line number Diff line
@@ -22,11 +22,6 @@ bool is_object_gt(struct kobject *kobj)
	return !strncmp(kobj->name, "gt", 2);
}

static struct intel_gt *kobj_to_gt(struct kobject *kobj)
{
	return container_of(kobj, struct intel_gt, sysfs_gt);
}

struct intel_gt *intel_gt_sysfs_get_drvdata(struct device *dev,
					    const char *name)
{
@@ -101,6 +96,10 @@ void intel_gt_sysfs_register(struct intel_gt *gt)
				 gt->i915->sysfs_gt, "gt%d", gt->info.id))
		goto exit_fail;

	gt->sysfs_defaults = kobject_create_and_add(".defaults", &gt->sysfs_gt);
	if (!gt->sysfs_defaults)
		goto exit_fail;

	intel_gt_sysfs_pm_init(gt, &gt->sysfs_gt);

	return;
@@ -113,5 +112,6 @@ void intel_gt_sysfs_register(struct intel_gt *gt)

void intel_gt_sysfs_unregister(struct intel_gt *gt)
{
	kobject_put(gt->sysfs_defaults);
	kobject_put(&gt->sysfs_gt);
}
+6 −0
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@
#include <linux/kobject.h>

#include "i915_gem.h" /* GEM_BUG_ON() */
#include "intel_gt_types.h"

struct intel_gt;

@@ -22,6 +23,11 @@ intel_gt_create_kobj(struct intel_gt *gt,
		     struct kobject *dir,
		     const char *name);

static inline struct intel_gt *kobj_to_gt(struct kobject *kobj)
{
	return container_of(kobj, struct intel_gt, sysfs_gt);
}

void intel_gt_sysfs_register(struct intel_gt *gt);
void intel_gt_sysfs_unregister(struct intel_gt *gt);
struct intel_gt *intel_gt_sysfs_get_drvdata(struct device *dev,
Loading