[Intel-gfx] [PATCH 0/11 v4] drm/i915: Extra media engines for ATS
John.C.Harrison at Intel.com
John.C.Harrison at Intel.com
Tue Apr 2 23:30:01 UTC 2019
From: John Harrison <John.C.Harrison at Intel.com>
ATS has lots of extra media engines. This series adds support for them.
Note, a recent GuC FW is required - 32.0.3 is known to be good.
Version 31.0.1 causes a hang when i915 initialised the fifth VCS
engine.
v2: Clean up the I915_MAX_ENGINES define. Make assumptions about ATS
engine counts. [Tvrtko Ursulin]
v3: Rebase to a new location within the internal history and add a
NOT_UPSTREAM patch to disable the extra engines if the GuC FW in use
is too old to support them. [Daniele].
v4: Tweaks to GuC FW test (for module param overrides) and to
interrupt enabling (to support fused parts). [Daniele]
Signed-off-by: John Harrison <John.C.Harrison at Intel.com>
CC: Daniele Ceraolo Spurio <daniele.ceraolospurio at intel.com>
CC: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
---
baseline: 32a1e283d330638d2e5de8f89a9ff7c8512b75e8
pile-commit: 603f996d0b32c3733f4ce4e7263e9f40e0d263ce
range-diff:
-: ------------ > 142: ce1f037b197f drm/i915/selftests: Allow for larger engine counts
-: ------------ > 143: 61e8501f5afe drm/i915: Extra media engines for ATS - Part 1 (engine definitions)
-: ------------ > 144: eaf383e48944 drm/i915: Extra media engines for ATS - Part 2 (interrupts)
-: ------------ > 145: 7d107e0cde94 drm/i915: Extra media engines for ATS - Part 3 (reset)
-: ------------ > 146: 9d3d03cbd52d drm/i915: Extra media engines for ATS - Part 4 (FW)
-: ------------ > 147: e37f175dd42e drm/i915: Extra media engines for ATS - Part 5 (UAPI)
217: af2ca7c68d46 ! 223: bfbff755e80c drm/i915/ats: ATS has MMIO doorbells
-: ------------ > 239: facf506a7805 NOT_UPSTREAM: drm/i915: Disable extra engines on older GuC FW
275: 0ceb5bac58a5 < -: ------------ drm/i915/ats: Disable all display device information capabilities
-: ------------ > 282: f0213ad8ede3 drm/i915/ats: Disable all display device information capabilities
301: 643dcaa8783f ! 308: 960d8a3acefe drm/i915/guc: Support for VFPF relay messages
317: 2a3a78301cee ! 324: 3ccd2e3fca85 drm/i915: Add has_remote_tiles to device info
series | 7 +
...M-drm-i915-Disable-extra-engines-on-older.patch | 80 ++++++++
...-i915-Add-has_remote_tiles-to-device-info.patch | 4 +-
...tra-media-engines-for-ATS-Part-1-engine-d.patch | 218 +++++++++++++++++++++
...tra-media-engines-for-ATS-Part-2-interrup.patch | 97 +++++++++
...-Extra-media-engines-for-ATS-Part-3-reset.patch | 54 +++++
...915-Extra-media-engines-for-ATS-Part-4-FW.patch | 110 +++++++++++
...5-Extra-media-engines-for-ATS-Part-5-UAPI.patch | 30 +++
0001-drm-i915-ats-ATS-has-MMIO-doorbells.patch | 4 +-
...s-Disable-all-display-device-information-.patch | 8 +-
...-i915-guc-Support-for-VFPF-relay-messages.patch | 4 +-
...-selftests-Allow-for-larger-engine-counts.patch | 85 ++++++++
12 files changed, 691 insertions(+), 10 deletions(-)
diff --git a/series b/series
index e8645e80dbf9..4a072408dad2 100644
--- a/series
+++ b/series
@@ -141,6 +141,12 @@
0001-drm-i915-ats-ack-intr-through-master-control.patch
0001-FIXME-drm-i915-ats-context-status-and-descriptor-cha.patch
0001-drm-i915-ats-Handle-ATS-VDBOX-VEBOX-fusing-register.patch
+0001-drm-i915-selftests-Allow-for-larger-engine-counts.patch
+0001-drm-i915-Extra-media-engines-for-ATS-Part-1-engine-d.patch
+0001-drm-i915-Extra-media-engines-for-ATS-Part-2-interrup.patch
+0001-drm-i915-Extra-media-engines-for-ATS-Part-3-reset.patch
+0001-drm-i915-Extra-media-engines-for-ATS-Part-4-FW.patch
+0001-drm-i915-Extra-media-engines-for-ATS-Part-5-UAPI.patch
0001-NOTUPSTREAM-drm-i915-perf-Enable-large-OA-buffer-sup.patch
0001-NOTUPSTREAM-drm-i915-perf-complete-programming-white.patch
0001-drm-i915-support-1G-pages-for-the-48b-PPGTT.patch
@@ -232,6 +238,7 @@
0001-drm-i915-dg1-add-initial-DG-1-definitions.patch
0001-drm-i915-dg1-Add-DG1-PCI-IDs.patch
0001-DRM_INTEL_INTERNAL_PLATFORM_POINT-dg1.patch
+0001-NOT_UPSTREAM-drm-i915-Disable-extra-engines-on-older.patch
0001-NOT_UPSTREAM-drm-i915-tgl-ack-master-control-on-all-.patch
0001-NOT_UPSTREAM-drm-i915-guc-add-H2G-to-ring-doorbells.patch
0001-NOT-UPSTREAM-drm-i915-guc-Workaround-ATS-GuC-31.0.0-.patch
diff --git a/0001-NOT_UPSTREAM-drm-i915-Disable-extra-engines-on-older.patch b/0001-NOT_UPSTREAM-drm-i915-Disable-extra-engines-on-older.patch
new file mode 100644
index 000000000000..05a7a12ca66c
--- /dev/null
+++ b/0001-NOT_UPSTREAM-drm-i915-Disable-extra-engines-on-older.patch
@@ -0,0 +1,80 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: John Harrison <John.C.Harrison at Intel.com>
+Date: Mon, 1 Apr 2019 12:24:50 -0700
+Subject: [PATCH] NOT_UPSTREAM: drm/i915: Disable extra engines on older GuC FW
+
+The current GuC FW release (31.0.1) dies when presented with too many
+media engines. The issue was fixed by 32.0.3 (which is the next FW the
+driver is intending to switch to). It is desirable to merge the the
+patches which allow use of the new engines before the new GuC FW
+patches can be merged. E.g. for running in non-GuC mode and/or running
+with a locally patched driver for the newer FW. Hence this patch
+disables the extra engines if the newer FW is not found.
+
+v2: Cope with GuC FWs loaded via the module param (by just ignoring it
+and warning the user). [Daniele]
+
+Signed-off-by: John Harrison <John.C.Harrison at Intel.com>
+CC: Daniele Ceraolo Spurio <daniele.ceraolospurio at intel.com>
+---
+ drivers/gpu/drm/i915/intel_device_info.c | 24 ++++++++++++++++++++++++
+ drivers/gpu/drm/i915/intel_guc_fw.c | 1 +
+ drivers/gpu/drm/i915/intel_uc_fw.h | 1 +
+ 3 files changed, 26 insertions(+)
+
+diff --git a/drivers/gpu/drm/i915/intel_device_info.c b/drivers/gpu/drm/i915/intel_device_info.c
+--- a/drivers/gpu/drm/i915/intel_device_info.c
++++ b/drivers/gpu/drm/i915/intel_device_info.c
+@@ -945,6 +945,30 @@ void intel_device_info_init_mmio(struct drm_i915_private *dev_priv)
+ vebox_mask = (media_fuse & GEN11_GT_VEBOX_DISABLE_MASK) >>
+ GEN11_GT_VEBOX_DISABLE_SHIFT;
+
++ if (USES_GUC_SUBMISSION(dev_priv)) {
++ struct intel_guc *guc = &dev_priv->guc;
++ struct intel_uc_fw *guc_fw = &guc->fw;
++ u32 guc_ver, guc_req;
++
++ /* GuC < 32.0.3 barfs on too many media engines */
++ /* NB: *_ver_found is not available yet so need to use _ver_wanted. */
++
++ if (!guc_fw->major_ver_wanted && !guc_fw->minor_ver_wanted) {
++ DRM_INFO("GuC FW version unknown (overridden by module param?).\n");
++ DRM_INFO("NB: FW earlier than 32.0.3 may break VCS4-7 and VECS2-3!\n");
++ } else {
++ guc_ver = (guc_fw->major_ver_wanted << 16) |
++ (guc_fw->minor_ver_wanted << 8) |
++ guc_fw->patch_ver_wanted;
++
++ guc_req = (32 << 16) | (0 << 8) | 3;
++ if (guc_ver < guc_req) {
++ vdbox_mask &= 0xF;
++ vebox_mask &= 0x3;
++ }
++ }
++ }
++
+ for (i = 0; i < I915_MAX_VCS; i++) {
+ if (!HAS_ENGINE(dev_priv, _VCS(i)))
+ continue;
+diff --git a/drivers/gpu/drm/i915/intel_guc_fw.c b/drivers/gpu/drm/i915/intel_guc_fw.c
+--- a/drivers/gpu/drm/i915/intel_guc_fw.c
++++ b/drivers/gpu/drm/i915/intel_guc_fw.c
+@@ -98,6 +98,7 @@ static void guc_fw_select(struct intel_uc_fw *guc_fw)
+ guc_fw->path = ATS_GUC_FIRMWARE_PATH;
+ guc_fw->major_ver_wanted = ATS_GUC_FW_MAJOR;
+ guc_fw->minor_ver_wanted = ATS_GUC_FW_MINOR;
++ guc_fw->patch_ver_wanted = ATS_GUC_FW_PATCH;
+ } else if (IS_TIGERLAKE(i915)) {
+ guc_fw->path = TGL_GUC_FIRMWARE_PATH;
+ guc_fw->major_ver_wanted = TGL_GUC_FW_MAJOR;
+diff --git a/drivers/gpu/drm/i915/intel_uc_fw.h b/drivers/gpu/drm/i915/intel_uc_fw.h
+--- a/drivers/gpu/drm/i915/intel_uc_fw.h
++++ b/drivers/gpu/drm/i915/intel_uc_fw.h
+@@ -62,6 +62,7 @@ struct intel_uc_fw {
+ */
+ u16 major_ver_wanted;
+ u16 minor_ver_wanted;
++ u16 patch_ver_wanted;
+ u16 major_ver_found;
+ u16 minor_ver_found;
+
diff --git a/0001-drm-i915-Add-has_remote_tiles-to-device-info.patch b/0001-drm-i915-Add-has_remote_tiles-to-device-info.patch
index 25d2b969eef0..ed470e5c95b3 100644
--- a/0001-drm-i915-Add-has_remote_tiles-to-device-info.patch
+++ b/0001-drm-i915-Add-has_remote_tiles-to-device-info.patch
@@ -34,8 +34,8 @@ diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
.has_guc_mmio_db = 1,
+ .has_remote_tiles = 1,
.engine_mask =
- BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VECS1) | BIT(VCS0) |
- BIT(VCS1) | BIT(VCS2) | BIT(VCS3) | BIT(CCS0),
+ BIT(RCS0) | BIT(BCS0) |
+ BIT(VECS0) | BIT(VECS1) | BIT(VECS2) | BIT(VECS3) |
diff --git a/drivers/gpu/drm/i915/intel_device_info.h b/drivers/gpu/drm/i915/intel_device_info.h
--- a/drivers/gpu/drm/i915/intel_device_info.h
+++ b/drivers/gpu/drm/i915/intel_device_info.h
diff --git a/0001-drm-i915-Extra-media-engines-for-ATS-Part-1-engine-d.patch b/0001-drm-i915-Extra-media-engines-for-ATS-Part-1-engine-d.patch
new file mode 100644
index 000000000000..e407230dacbe
--- /dev/null
+++ b/0001-drm-i915-Extra-media-engines-for-ATS-Part-1-engine-d.patch
@@ -0,0 +1,218 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: John Harrison <John.C.Harrison at Intel.com>
+Date: Fri, 22 Mar 2019 16:22:19 -0700
+Subject: [PATCH] drm/i915: Extra media engines for ATS - Part 1 (engine
+ definitions)
+
+ATS has lots of extra media engines. This patch adds the basic
+definitions for them.
+
+Also, add a sentinel to the engine id enum. That way there is no need
+to know which engine is the last in the list.
+
+v2: Clean up I915_MAX_ENGINES - it is now the sentinel enum value in
+the engine id list rather than a separate define in a separate header.
+[Tvrtko Ursulin]
+
+Signed-off-by: John Harrison <John.C.Harrison at Intel.com>
+Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
+---
+ drivers/gpu/drm/i915/i915_gem.h | 2 -
+ drivers/gpu/drm/i915/i915_reg.h | 8 ++-
+ drivers/gpu/drm/i915/i915_reset.c | 2 -
+ drivers/gpu/drm/i915/intel_engine_cs.c | 56 +++++++++++++++++++++
+ drivers/gpu/drm/i915/intel_engine_types.h | 14 ++++--
+ drivers/gpu/drm/i915/intel_guc.h | 1 +
+ drivers/gpu/drm/i915/intel_guc_submission.h | 2 +-
+ 7 files changed, 76 insertions(+), 9 deletions(-)
+
+diff --git a/drivers/gpu/drm/i915/i915_gem.h b/drivers/gpu/drm/i915/i915_gem.h
+--- a/drivers/gpu/drm/i915/i915_gem.h
++++ b/drivers/gpu/drm/i915/i915_gem.h
+@@ -73,8 +73,6 @@ struct drm_i915_private;
+ #define GEM_TRACE_DUMP_ON(expr) BUILD_BUG_ON_INVALID(expr)
+ #endif
+
+-#define I915_NUM_ENGINES 9
+-
+ #define I915_GEM_IDLE_TIMEOUT (HZ / 5)
+
+ void i915_gem_park(struct drm_i915_private *i915);
+diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
+--- a/drivers/gpu/drm/i915/i915_reg.h
++++ b/drivers/gpu/drm/i915/i915_reg.h
+@@ -294,7 +294,7 @@ static inline bool i915_mmio_reg_valid(i915_reg_t reg)
+
+ #define OTHER_GUC_INSTANCE 0
+ #define OTHER_GTPM_INSTANCE 1
+-#define MAX_ENGINE_INSTANCE 3
++#define MAX_ENGINE_INSTANCE 7
+
+ /* PCI config space */
+
+@@ -2536,9 +2536,15 @@ enum i915_power_well_id {
+ #define GEN11_BSD2_RING_BASE 0x1c4000
+ #define GEN11_BSD3_RING_BASE 0x1d0000
+ #define GEN11_BSD4_RING_BASE 0x1d4000
++#define GEN12_BSD5_RING_BASE 0x1e0000
++#define GEN12_BSD6_RING_BASE 0x1e4000
++#define GEN12_BSD7_RING_BASE 0x1f0000
++#define GEN12_BSD8_RING_BASE 0x1f4000
+ #define VEBOX_RING_BASE 0x1a000
+ #define GEN11_VEBOX_RING_BASE 0x1c8000
+ #define GEN11_VEBOX2_RING_BASE 0x1d8000
++#define GEN12_VEBOX3_RING_BASE 0x1e8000
++#define GEN12_VEBOX4_RING_BASE 0x1f8000
+ #define GEN12_COMPUTE0_RING_BASE 0x1a000
+ #define BLT_RING_BASE 0x22000
+ #define RING_TAIL(base) _MMIO((base) + 0x30)
+diff --git a/drivers/gpu/drm/i915/i915_reset.c b/drivers/gpu/drm/i915/i915_reset.c
+--- a/drivers/gpu/drm/i915/i915_reset.c
++++ b/drivers/gpu/drm/i915/i915_reset.c
+@@ -448,8 +448,6 @@ static int gen11_reset_engines(struct drm_i915_private *i915,
+ u32 hw_mask;
+ int ret;
+
+- BUILD_BUG_ON(CCS0 + 1 != I915_NUM_ENGINES);
+-
+ if (engine_mask == ALL_ENGINES) {
+ hw_mask = GEN11_GRDOM_FULL;
+ } else {
+diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c b/drivers/gpu/drm/i915/intel_engine_cs.c
+--- a/drivers/gpu/drm/i915/intel_engine_cs.c
++++ b/drivers/gpu/drm/i915/intel_engine_cs.c
+@@ -158,6 +158,42 @@ static const struct engine_info intel_engines[] = {
+ { .gen = 11, .base = GEN11_BSD4_RING_BASE }
+ },
+ },
++ [VCS4] = {
++ .hw_id = 0, /* not used in GEN12+, see MI_SEMAPHORE_SIGNAL */
++ .class = VIDEO_DECODE_CLASS,
++ .guc_class = GUC_VIDEO_CLASS,
++ .instance = 4,
++ .mmio_bases = {
++ { .gen = 11, .base = GEN12_BSD5_RING_BASE }
++ },
++ },
++ [VCS5] = {
++ .hw_id = 0, /* not used in GEN12+, see MI_SEMAPHORE_SIGNAL */
++ .class = VIDEO_DECODE_CLASS,
++ .guc_class = GUC_VIDEO_CLASS,
++ .instance = 5,
++ .mmio_bases = {
++ { .gen = 12, .base = GEN12_BSD6_RING_BASE }
++ },
++ },
++ [VCS6] = {
++ .hw_id = 0, /* not used in GEN12+, see MI_SEMAPHORE_SIGNAL */
++ .class = VIDEO_DECODE_CLASS,
++ .guc_class = GUC_VIDEO_CLASS,
++ .instance = 6,
++ .mmio_bases = {
++ { .gen = 12, .base = GEN12_BSD7_RING_BASE }
++ },
++ },
++ [VCS7] = {
++ .hw_id = 0, /* not used in GEN12+, see MI_SEMAPHORE_SIGNAL */
++ .class = VIDEO_DECODE_CLASS,
++ .guc_class = GUC_VIDEO_CLASS,
++ .instance = 7,
++ .mmio_bases = {
++ { .gen = 12, .base = GEN12_BSD8_RING_BASE }
++ },
++ },
+ [VECS0] = {
+ .hw_id = VECS0_HW,
+ .class = VIDEO_ENHANCEMENT_CLASS,
+@@ -177,6 +213,24 @@ static const struct engine_info intel_engines[] = {
+ { .gen = 11, .base = GEN11_VEBOX2_RING_BASE }
+ },
+ },
++ [VECS2] = {
++ .hw_id = 0, /* not used in GEN12+, see MI_SEMAPHORE_SIGNAL */
++ .class = VIDEO_ENHANCEMENT_CLASS,
++ .guc_class = GUC_VIDEOENHANCE_CLASS,
++ .instance = 2,
++ .mmio_bases = {
++ { .gen = 12, .base = GEN12_VEBOX3_RING_BASE }
++ },
++ },
++ [VECS3] = {
++ .hw_id = 0, /* not used in GEN12+, see MI_SEMAPHORE_SIGNAL */
++ .class = VIDEO_ENHANCEMENT_CLASS,
++ .guc_class = GUC_VIDEOENHANCE_CLASS,
++ .instance = 3,
++ .mmio_bases = {
++ { .gen = 12, .base = GEN12_VEBOX4_RING_BASE }
++ },
++ },
+ [CCS0] = {
+ .hw_id = 0, /* not used in GEN12+, see MI_SEMAPHORE_SIGNAL */
+ .class = COMPUTE_CLASS,
+@@ -318,6 +372,8 @@ intel_engine_setup(struct drm_i915_private *dev_priv,
+
+ BUILD_BUG_ON(MAX_ENGINE_CLASS >= BIT(GEN11_ENGINE_CLASS_WIDTH));
+ BUILD_BUG_ON(MAX_ENGINE_INSTANCE >= BIT(GEN11_ENGINE_INSTANCE_WIDTH));
++ BUILD_BUG_ON(I915_MAX_VCS > (MAX_ENGINE_INSTANCE + 1));
++ BUILD_BUG_ON(I915_MAX_VECS > (MAX_ENGINE_INSTANCE + 1));
+
+ if (GEM_DEBUG_WARN_ON(info->class > MAX_ENGINE_CLASS))
+ return -EINVAL;
+diff --git a/drivers/gpu/drm/i915/intel_engine_types.h b/drivers/gpu/drm/i915/intel_engine_types.h
+--- a/drivers/gpu/drm/i915/intel_engine_types.h
++++ b/drivers/gpu/drm/i915/intel_engine_types.h
+@@ -89,8 +89,8 @@ struct i915_ctx_workarounds {
+ struct i915_vma *vma;
+ };
+
+-#define I915_MAX_VCS 4
+-#define I915_MAX_VECS 2
++#define I915_MAX_VCS 8
++#define I915_MAX_VECS 4
+
+ /*
+ * Engine IDs definitions.
+@@ -103,11 +103,19 @@ enum intel_engine_id {
+ VCS1,
+ VCS2,
+ VCS3,
++ VCS4,
++ VCS5,
++ VCS6,
++ VCS7,
+ #define _VCS(n) (VCS0 + (n))
+ VECS0,
+ VECS1,
++ VECS2,
++ VECS3,
+ #define _VECS(n) (VECS0 + (n))
+- CCS0
++ CCS0,
++
++ I915_NUM_ENGINES
+ };
+
+ struct st_preempt_hang {
+diff --git a/drivers/gpu/drm/i915/intel_guc.h b/drivers/gpu/drm/i915/intel_guc.h
+--- a/drivers/gpu/drm/i915/intel_guc.h
++++ b/drivers/gpu/drm/i915/intel_guc.h
+@@ -33,6 +33,7 @@
+ #include "intel_guc_log.h"
+ #include "intel_guc_reg.h"
+ #include "intel_uc_fw.h"
++#include "intel_engine_types.h"
+ #include "i915_utils.h"
+ #include "i915_vma.h"
+
+diff --git a/drivers/gpu/drm/i915/intel_guc_submission.h b/drivers/gpu/drm/i915/intel_guc_submission.h
+--- a/drivers/gpu/drm/i915/intel_guc_submission.h
++++ b/drivers/gpu/drm/i915/intel_guc_submission.h
+@@ -27,7 +27,7 @@
+
+ #include <linux/spinlock.h>
+
+-#include "i915_gem.h"
++#include "intel_engine_types.h"
+ #include "i915_selftest.h"
+
+ struct drm_i915_private;
diff --git a/0001-drm-i915-Extra-media-engines-for-ATS-Part-2-interrup.patch b/0001-drm-i915-Extra-media-engines-for-ATS-Part-2-interrup.patch
new file mode 100644
index 000000000000..ba449e18fbae
--- /dev/null
+++ b/0001-drm-i915-Extra-media-engines-for-ATS-Part-2-interrup.patch
@@ -0,0 +1,97 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: John Harrison <John.C.Harrison at Intel.com>
+Date: Fri, 22 Mar 2019 16:26:35 -0700
+Subject: [PATCH] drm/i915: Extra media engines for ATS - Part 2 (interrupts)
+
+ATS has lots of extra media engines. This patch adds the interrupt
+handler support for them.
+
+v2: Changed debugfs to assume ATS always has VCSx8 + VECSx4
+irrespective of fusings. [Tvrtko Ursulin]
+
+v3: Changed interrupt masking to check for the presence of each pair
+of engines to support fusings [Daniele].
+
+Signed-off-by: John Harrison <John.C.Harrison at Intel.com>
+CC: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
+CC: Daniele Ceraolo Spurio <daniele.ceraolospurio at intel.com>
+---
+ drivers/gpu/drm/i915/i915_debugfs.c | 10 +++++++++-
+ drivers/gpu/drm/i915/i915_irq.c | 12 ++++++++++++
+ drivers/gpu/drm/i915/i915_reg.h | 3 +++
+ 3 files changed, 24 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
+--- a/drivers/gpu/drm/i915/i915_debugfs.c
++++ b/drivers/gpu/drm/i915/i915_debugfs.c
+@@ -869,8 +869,17 @@ static int i915_interrupt_info(struct seq_file *m, void *data)
+ I915_READ(GEN11_VCS0_VCS1_INTR_MASK));
+ seq_printf(m, "VCS2/VCS3 Intr Mask:\t %08x\n",
+ I915_READ(GEN11_VCS2_VCS3_INTR_MASK));
++ if (IS_ARCTICSOUND(dev_priv)) {
++ seq_printf(m, "VCS4/VCS5 Intr Mask:\t %08x\n",
++ I915_READ(GEN12_VCS4_VCS5_INTR_MASK));
++ seq_printf(m, "VCS6/VCS7 Intr Mask:\t %08x\n",
++ I915_READ(GEN12_VCS6_VCS7_INTR_MASK));
++ }
+ seq_printf(m, "VECS0/VECS1 Intr Mask:\t %08x\n",
+ I915_READ(GEN11_VECS0_VECS1_INTR_MASK));
++ if (IS_ARCTICSOUND(dev_priv))
++ seq_printf(m, "VECS2/VECS3 Intr Mask:\t %08x\n",
++ I915_READ(GEN12_VECS2_VECS3_INTR_MASK));
+ seq_printf(m, "GUC/SG Intr Mask:\t %08x\n",
+ I915_READ(GEN11_GUC_SG_INTR_MASK));
+ seq_printf(m, "GPM/WGBOXPERF Intr Mask: %08x\n",
+@@ -883,7 +892,6 @@ static int i915_interrupt_info(struct seq_file *m, void *data)
+ seq_printf(m, "CCS Intr Mask:\t %08x\n",
+ I915_READ(GEN12_CCS0_RSVD_INTR_MASK));
+ }
+-
+ } else if (INTEL_GEN(dev_priv) >= 6) {
+ for_each_engine(engine, dev_priv, id) {
+ seq_printf(m,
+diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
+--- a/drivers/gpu/drm/i915/i915_irq.c
++++ b/drivers/gpu/drm/i915/i915_irq.c
+@@ -3630,7 +3630,13 @@ static void gen11_gt_irq_reset(struct drm_i915_private *dev_priv)
+ I915_WRITE(GEN11_BCS_RSVD_INTR_MASK, ~0);
+ I915_WRITE(GEN11_VCS0_VCS1_INTR_MASK, ~0);
+ I915_WRITE(GEN11_VCS2_VCS3_INTR_MASK, ~0);
++ if (HAS_ENGINE(dev_priv, VCS4) || HAS_ENGINE(dev_priv, VCS5))
++ I915_WRITE(GEN12_VCS4_VCS5_INTR_MASK, ~0);
++ if (HAS_ENGINE(dev_priv, VCS6) || HAS_ENGINE(dev_priv, VCS7))
++ I915_WRITE(GEN12_VCS6_VCS7_INTR_MASK, ~0);
+ I915_WRITE(GEN11_VECS0_VECS1_INTR_MASK, ~0);
++ if (HAS_ENGINE(dev_priv, VECS2) || (HAS_ENGINE(dev_priv, VECS3))
++ I915_WRITE(GEN12_VECS2_VECS3_INTR_MASK, ~0);
+ if (HAS_ENGINE(dev_priv, CCS0))
+ I915_WRITE(GEN12_CCS0_RSVD_INTR_MASK, ~0);
+
+@@ -4289,7 +4295,13 @@ static void gen11_gt_irq_postinstall(struct drm_i915_private *dev_priv)
+ I915_WRITE(GEN11_BCS_RSVD_INTR_MASK, ~(irqs << 16));
+ I915_WRITE(GEN11_VCS0_VCS1_INTR_MASK, ~(irqs | irqs << 16));
+ I915_WRITE(GEN11_VCS2_VCS3_INTR_MASK, ~(irqs | irqs << 16));
++ if (HAS_ENGINE(dev_priv, VCS4) || HAS_ENGINE(dev_priv, VCS5))
++ I915_WRITE(GEN12_VCS4_VCS5_INTR_MASK, ~(irqs | irqs << 16));
++ if (HAS_ENGINE(dev_priv, VCS6) || HAS_ENGINE(dev_priv, VCS7))
++ I915_WRITE(GEN12_VCS6_VCS7_INTR_MASK, ~(irqs | irqs << 16));
+ I915_WRITE(GEN11_VECS0_VECS1_INTR_MASK, ~(irqs | irqs << 16));
++ if (HAS_ENGINE(dev_priv, VECS2) || HAS_ENGINE(dev_priv, VECS3))
++ I915_WRITE(GEN12_VECS2_VECS3_INTR_MASK, ~(irqs | irqs << 16));
+ if (HAS_ENGINE(dev_priv, CCS0))
+ I915_WRITE(GEN12_CCS0_RSVD_INTR_MASK, ~(irqs << 16));
+
+diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
+--- a/drivers/gpu/drm/i915/i915_reg.h
++++ b/drivers/gpu/drm/i915/i915_reg.h
+@@ -7678,7 +7678,10 @@ enum {
+ #define GEN11_BCS_RSVD_INTR_MASK _MMIO(0x1900a0)
+ #define GEN11_VCS0_VCS1_INTR_MASK _MMIO(0x1900a8)
+ #define GEN11_VCS2_VCS3_INTR_MASK _MMIO(0x1900ac)
++#define GEN12_VCS4_VCS5_INTR_MASK _MMIO(0x1900b0)
++#define GEN12_VCS6_VCS7_INTR_MASK _MMIO(0x1900b4)
+ #define GEN11_VECS0_VECS1_INTR_MASK _MMIO(0x1900d0)
++#define GEN12_VECS2_VECS3_INTR_MASK _MMIO(0x1900d4)
+ #define GEN11_GUC_SG_INTR_MASK _MMIO(0x1900e8)
+ #define GEN11_GPM_WGBOXPERF_INTR_MASK _MMIO(0x1900ec)
+ #define GEN11_CRYPTO_RSVD_INTR_MASK _MMIO(0x1900f0)
diff --git a/0001-drm-i915-Extra-media-engines-for-ATS-Part-3-reset.patch b/0001-drm-i915-Extra-media-engines-for-ATS-Part-3-reset.patch
new file mode 100644
index 000000000000..a4bfed593bd3
--- /dev/null
+++ b/0001-drm-i915-Extra-media-engines-for-ATS-Part-3-reset.patch
@@ -0,0 +1,54 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: John Harrison <John.C.Harrison at Intel.com>
+Date: Fri, 22 Mar 2019 16:31:30 -0700
+Subject: [PATCH] drm/i915: Extra media engines for ATS - Part 3 (reset)
+
+ATS has lots of extra media engines. This patch adds the reset support
+for them.
+
+Signed-off-by: John Harrison <John.C.Harrison at Intel.com>
+---
+ drivers/gpu/drm/i915/i915_reg.h | 8 ++++++++
+ drivers/gpu/drm/i915/i915_reset.c | 6 ++++++
+ 2 files changed, 14 insertions(+)
+
+diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
+--- a/drivers/gpu/drm/i915/i915_reg.h
++++ b/drivers/gpu/drm/i915/i915_reg.h
+@@ -416,10 +416,18 @@ static inline bool i915_mmio_reg_valid(i915_reg_t reg)
+ #define GEN11_GRDOM_MEDIA2 (1 << 6)
+ #define GEN11_GRDOM_MEDIA3 (1 << 7)
+ #define GEN11_GRDOM_MEDIA4 (1 << 8)
++#define GEN11_GRDOM_MEDIA5 (1 << 9)
++#define GEN11_GRDOM_MEDIA6 (1 << 10)
++#define GEN11_GRDOM_MEDIA7 (1 << 11)
++#define GEN11_GRDOM_MEDIA8 (1 << 12)
+ #define GEN11_GRDOM_VECS (1 << 13)
+ #define GEN11_GRDOM_VECS2 (1 << 14)
++#define GEN11_GRDOM_VECS3 (1 << 15)
++#define GEN11_GRDOM_VECS4 (1 << 16)
+ #define GEN11_GRDOM_SFC0 (1 << 17)
+ #define GEN11_GRDOM_SFC1 (1 << 18)
++#define GEN11_GRDOM_SFC2 (1 << 19)
++#define GEN11_GRDOM_SFC3 (1 << 20)
+
+ #define GEN11_VCS_SFC_RESET_BIT(instance) (GEN11_GRDOM_SFC0 << ((instance) >> 1))
+ #define GEN11_VECS_SFC_RESET_BIT(instance) (GEN11_GRDOM_SFC0 << (instance))
+diff --git a/drivers/gpu/drm/i915/i915_reset.c b/drivers/gpu/drm/i915/i915_reset.c
+--- a/drivers/gpu/drm/i915/i915_reset.c
++++ b/drivers/gpu/drm/i915/i915_reset.c
+@@ -439,8 +439,14 @@ static int gen11_reset_engines(struct drm_i915_private *i915,
+ [VCS1] = GEN11_GRDOM_MEDIA2,
+ [VCS2] = GEN11_GRDOM_MEDIA3,
+ [VCS3] = GEN11_GRDOM_MEDIA4,
++ [VCS4] = GEN11_GRDOM_MEDIA5,
++ [VCS5] = GEN11_GRDOM_MEDIA6,
++ [VCS6] = GEN11_GRDOM_MEDIA7,
++ [VCS7] = GEN11_GRDOM_MEDIA8,
+ [VECS0] = GEN11_GRDOM_VECS,
+ [VECS1] = GEN11_GRDOM_VECS2,
++ [VECS2] = GEN11_GRDOM_VECS3,
++ [VECS3] = GEN11_GRDOM_VECS4,
+ [CCS0] = GEN11_GRDOM_RENDER, /* FIXME: RCS/CCS engine reset won't be as simple */
+ };
+ struct intel_engine_cs *engine;
diff --git a/0001-drm-i915-Extra-media-engines-for-ATS-Part-4-FW.patch b/0001-drm-i915-Extra-media-engines-for-ATS-Part-4-FW.patch
new file mode 100644
index 000000000000..d19ee8d326d6
--- /dev/null
+++ b/0001-drm-i915-Extra-media-engines-for-ATS-Part-4-FW.patch
@@ -0,0 +1,110 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: John Harrison <John.C.Harrison at Intel.com>
+Date: Fri, 22 Mar 2019 17:10:55 -0700
+Subject: [PATCH] drm/i915: Extra media engines for ATS - Part 4 (FW)
+
+ATS has lots of extra media engines. This patch adds the forcewake
+support for them.
+
+Signed-off-by: John Harrison <John.C.Harrison at Intel.com>
+---
+ drivers/gpu/drm/i915/intel_uncore.c | 28 +++++++++++++++++++++++++++-
+ drivers/gpu/drm/i915/intel_uncore.h | 12 ++++++++++++
+ 2 files changed, 39 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c
+--- a/drivers/gpu/drm/i915/intel_uncore.c
++++ b/drivers/gpu/drm/i915/intel_uncore.c
+@@ -41,8 +41,14 @@ static const char * const forcewake_domain_names[] = {
+ "vdbox1",
+ "vdbox2",
+ "vdbox3",
++ "vdbox4",
++ "vdbox5",
++ "vdbox6",
++ "vdbox7",
+ "vebox0",
+ "vebox1",
++ "vebox2",
++ "vebox3",
+ };
+
+ const char *
+@@ -930,6 +936,12 @@ static const i915_reg_t gen12_shadowed_regs[] = {
+ RING_TAIL(GEN11_BSD3_RING_BASE), /* 0x1D0000 (base) */
+ RING_TAIL(GEN11_BSD4_RING_BASE), /* 0x1D4000 (base) */
+ RING_TAIL(GEN11_VEBOX2_RING_BASE), /* 0x1D8000 (base) */
++ RING_TAIL(GEN12_BSD5_RING_BASE), /* 0x1E0000 (base) */
++ RING_TAIL(GEN12_BSD6_RING_BASE), /* 0x1E4000 (base) */
++ RING_TAIL(GEN12_VEBOX3_RING_BASE), /* 0x1E8000 (base) */
++ RING_TAIL(GEN12_BSD7_RING_BASE), /* 0x1F0000 (base) */
++ RING_TAIL(GEN12_BSD8_RING_BASE), /* 0x1F4000 (base) */
++ RING_TAIL(GEN12_VEBOX4_RING_BASE), /* 0x1F8000 (base) */
+ /* TODO: Other registers are not yet used */
+ };
+
+@@ -1119,7 +1131,15 @@ static const struct intel_forcewake_range __gen12_fw_ranges[] = {
+ GEN_FW_RANGE(0x1cc000, 0x1cffff, FORCEWAKE_BLITTER),
+ GEN_FW_RANGE(0x1d0000, 0x1d3fff, FORCEWAKE_MEDIA_VDBOX2),
+ GEN_FW_RANGE(0x1d4000, 0x1d7fff, FORCEWAKE_MEDIA_VDBOX3),
+- GEN_FW_RANGE(0x1d8000, 0x1dbfff, FORCEWAKE_MEDIA_VEBOX1)
++ GEN_FW_RANGE(0x1d8000, 0x1dbfff, FORCEWAKE_MEDIA_VEBOX1),
++ GEN_FW_RANGE(0x1dc000, 0x1dffff, FORCEWAKE_BLITTER),
++ GEN_FW_RANGE(0x1e0000, 0x1e3fff, FORCEWAKE_MEDIA_VDBOX4),
++ GEN_FW_RANGE(0x1e4000, 0x1e7fff, FORCEWAKE_MEDIA_VDBOX5),
++ GEN_FW_RANGE(0x1e8000, 0x1ebfff, FORCEWAKE_MEDIA_VEBOX2),
++ GEN_FW_RANGE(0x1ec000, 0x1effff, FORCEWAKE_BLITTER),
++ GEN_FW_RANGE(0x1f0000, 0x1f3fff, FORCEWAKE_MEDIA_VDBOX6),
++ GEN_FW_RANGE(0x1f4000, 0x1f7fff, FORCEWAKE_MEDIA_VDBOX7),
++ GEN_FW_RANGE(0x1f8000, 0x1fbfff, FORCEWAKE_MEDIA_VEBOX3),
+ };
+
+ static void
+@@ -1417,8 +1437,14 @@ static void fw_domain_init(struct intel_uncore *uncore,
+ BUILD_BUG_ON(FORCEWAKE_MEDIA_VDBOX1 != (1 << FW_DOMAIN_ID_MEDIA_VDBOX1));
+ BUILD_BUG_ON(FORCEWAKE_MEDIA_VDBOX2 != (1 << FW_DOMAIN_ID_MEDIA_VDBOX2));
+ BUILD_BUG_ON(FORCEWAKE_MEDIA_VDBOX3 != (1 << FW_DOMAIN_ID_MEDIA_VDBOX3));
++ BUILD_BUG_ON(FORCEWAKE_MEDIA_VDBOX4 != (1 << FW_DOMAIN_ID_MEDIA_VDBOX4));
++ BUILD_BUG_ON(FORCEWAKE_MEDIA_VDBOX5 != (1 << FW_DOMAIN_ID_MEDIA_VDBOX5));
++ BUILD_BUG_ON(FORCEWAKE_MEDIA_VDBOX6 != (1 << FW_DOMAIN_ID_MEDIA_VDBOX6));
++ BUILD_BUG_ON(FORCEWAKE_MEDIA_VDBOX7 != (1 << FW_DOMAIN_ID_MEDIA_VDBOX7));
+ BUILD_BUG_ON(FORCEWAKE_MEDIA_VEBOX0 != (1 << FW_DOMAIN_ID_MEDIA_VEBOX0));
+ BUILD_BUG_ON(FORCEWAKE_MEDIA_VEBOX1 != (1 << FW_DOMAIN_ID_MEDIA_VEBOX1));
++ BUILD_BUG_ON(FORCEWAKE_MEDIA_VEBOX2 != (1 << FW_DOMAIN_ID_MEDIA_VEBOX2));
++ BUILD_BUG_ON(FORCEWAKE_MEDIA_VEBOX3 != (1 << FW_DOMAIN_ID_MEDIA_VEBOX3));
+
+
+ d->mask = BIT(domain_id);
+diff --git a/drivers/gpu/drm/i915/intel_uncore.h b/drivers/gpu/drm/i915/intel_uncore.h
+--- a/drivers/gpu/drm/i915/intel_uncore.h
++++ b/drivers/gpu/drm/i915/intel_uncore.h
+@@ -44,8 +44,14 @@ enum forcewake_domain_id {
+ FW_DOMAIN_ID_MEDIA_VDBOX1,
+ FW_DOMAIN_ID_MEDIA_VDBOX2,
+ FW_DOMAIN_ID_MEDIA_VDBOX3,
++ FW_DOMAIN_ID_MEDIA_VDBOX4,
++ FW_DOMAIN_ID_MEDIA_VDBOX5,
++ FW_DOMAIN_ID_MEDIA_VDBOX6,
++ FW_DOMAIN_ID_MEDIA_VDBOX7,
+ FW_DOMAIN_ID_MEDIA_VEBOX0,
+ FW_DOMAIN_ID_MEDIA_VEBOX1,
++ FW_DOMAIN_ID_MEDIA_VEBOX2,
++ FW_DOMAIN_ID_MEDIA_VEBOX3,
+
+ FW_DOMAIN_ID_COUNT
+ };
+@@ -58,8 +64,14 @@ enum forcewake_domains {
+ FORCEWAKE_MEDIA_VDBOX1 = BIT(FW_DOMAIN_ID_MEDIA_VDBOX1),
+ FORCEWAKE_MEDIA_VDBOX2 = BIT(FW_DOMAIN_ID_MEDIA_VDBOX2),
+ FORCEWAKE_MEDIA_VDBOX3 = BIT(FW_DOMAIN_ID_MEDIA_VDBOX3),
++ FORCEWAKE_MEDIA_VDBOX4 = BIT(FW_DOMAIN_ID_MEDIA_VDBOX4),
++ FORCEWAKE_MEDIA_VDBOX5 = BIT(FW_DOMAIN_ID_MEDIA_VDBOX5),
++ FORCEWAKE_MEDIA_VDBOX6 = BIT(FW_DOMAIN_ID_MEDIA_VDBOX6),
++ FORCEWAKE_MEDIA_VDBOX7 = BIT(FW_DOMAIN_ID_MEDIA_VDBOX7),
+ FORCEWAKE_MEDIA_VEBOX0 = BIT(FW_DOMAIN_ID_MEDIA_VEBOX0),
+ FORCEWAKE_MEDIA_VEBOX1 = BIT(FW_DOMAIN_ID_MEDIA_VEBOX1),
++ FORCEWAKE_MEDIA_VEBOX2 = BIT(FW_DOMAIN_ID_MEDIA_VEBOX2),
++ FORCEWAKE_MEDIA_VEBOX3 = BIT(FW_DOMAIN_ID_MEDIA_VEBOX3),
+
+ FORCEWAKE_ALL = BIT(FW_DOMAIN_ID_COUNT) - 1
+ };
diff --git a/0001-drm-i915-Extra-media-engines-for-ATS-Part-5-UAPI.patch b/0001-drm-i915-Extra-media-engines-for-ATS-Part-5-UAPI.patch
new file mode 100644
index 000000000000..275437f27a23
--- /dev/null
+++ b/0001-drm-i915-Extra-media-engines-for-ATS-Part-5-UAPI.patch
@@ -0,0 +1,30 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: John Harrison <John.C.Harrison at Intel.com>
+Date: Fri, 22 Mar 2019 17:12:56 -0700
+Subject: [PATCH] drm/i915: Extra media engines for ATS - Part 5 (UAPI)
+
+ATS has lots of extra media engines. This patch enables them in the
+engine query UAPI so that they can actually be used.
+
+Signed-off-by: John Harrison <John.C.Harrison at Intel.com>
+---
+ drivers/gpu/drm/i915/i915_pci.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
+--- a/drivers/gpu/drm/i915/i915_pci.c
++++ b/drivers/gpu/drm/i915/i915_pci.c
+@@ -780,8 +780,11 @@ static const struct intel_device_info intel_arcticsound_info = {
+ .is_alpha_support = 1,
+ .has_guc_dist_db = 0,
+ .engine_mask =
+- BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VECS1) | BIT(VCS0) |
+- BIT(VCS1) | BIT(VCS2) | BIT(VCS3) | BIT(CCS0),
++ BIT(RCS0) | BIT(BCS0) |
++ BIT(VECS0) | BIT(VECS1) | BIT(VECS2) | BIT(VECS3) |
++ BIT(VCS0) | BIT(VCS1) | BIT(VCS2) | BIT(VCS3) |
++ BIT(VCS4) | BIT(VCS5) | BIT(VCS6) | BIT(VCS7) |
++ BIT(CCS0),
+ };
+
+ #undef GEN
diff --git a/0001-drm-i915-ats-ATS-has-MMIO-doorbells.patch b/0001-drm-i915-ats-ATS-has-MMIO-doorbells.patch
index 1b216a7ea5b4..902179ce484d 100644
--- a/0001-drm-i915-ats-ATS-has-MMIO-doorbells.patch
+++ b/0001-drm-i915-ats-ATS-has-MMIO-doorbells.patch
@@ -21,5 +21,5 @@ diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
.has_guc_dist_db = 0,
+ .has_guc_mmio_db = 1,
.engine_mask =
- BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VECS1) | BIT(VCS0) |
- BIT(VCS1) | BIT(VCS2) | BIT(VCS3) | BIT(CCS0),
+ BIT(RCS0) | BIT(BCS0) |
+ BIT(VECS0) | BIT(VECS1) | BIT(VECS2) | BIT(VECS3) |
diff --git a/0001-drm-i915-ats-Disable-all-display-device-information-.patch b/0001-drm-i915-ats-Disable-all-display-device-information-.patch
index fa5435a374fe..15358a1e4ef0 100644
--- a/0001-drm-i915-ats-Disable-all-display-device-information-.patch
+++ b/0001-drm-i915-ats-Disable-all-display-device-information-.patch
@@ -19,10 +19,10 @@ Acked-by: Lucas De Marchi <lucas.demarchi at intel.com>
diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
--- a/drivers/gpu/drm/i915/i915_pci.c
+++ b/drivers/gpu/drm/i915/i915_pci.c
-@@ -818,6 +818,7 @@ static const struct intel_device_info intel_arcticsound_info = {
- .engine_mask =
- BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VECS1) | BIT(VCS0) |
- BIT(VCS1) | BIT(VCS2) | BIT(VCS3) | BIT(CCS0),
+@@ -821,6 +821,7 @@ static const struct intel_device_info intel_arcticsound_info = {
+ BIT(VCS0) | BIT(VCS1) | BIT(VCS2) | BIT(VCS3) |
+ BIT(VCS4) | BIT(VCS5) | BIT(VCS6) | BIT(VCS7) |
+ BIT(CCS0),
+ .display = { 0 },
};
diff --git a/0001-drm-i915-guc-Support-for-VFPF-relay-messages.patch b/0001-drm-i915-guc-Support-for-VFPF-relay-messages.patch
index 0873dd1ef112..8b2163a221db 100644
--- a/0001-drm-i915-guc-Support-for-VFPF-relay-messages.patch
+++ b/0001-drm-i915-guc-Support-for-VFPF-relay-messages.patch
@@ -59,9 +59,9 @@ diff --git a/drivers/gpu/drm/i915/intel_guc.h b/drivers/gpu/drm/i915/intel_guc.h
#include "intel_guc_reg.h"
+#include "intel_guc_relay.h"
#include "intel_uc_fw.h"
+ #include "intel_engine_types.h"
#include "i915_utils.h"
- #include "i915_vma.h"
-@@ -50,6 +51,7 @@ struct intel_guc {
+@@ -51,6 +52,7 @@ struct intel_guc {
struct intel_uc_fw fw;
struct intel_guc_log log;
struct intel_guc_ct ct;
diff --git a/0001-drm-i915-selftests-Allow-for-larger-engine-counts.patch b/0001-drm-i915-selftests-Allow-for-larger-engine-counts.patch
new file mode 100644
index 000000000000..dd97c611fc41
--- /dev/null
+++ b/0001-drm-i915-selftests-Allow-for-larger-engine-counts.patch
@@ -0,0 +1,85 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: John Harrison <John.C.Harrison at Intel.com>
+Date: Fri, 22 Mar 2019 16:47:30 -0700
+Subject: [PATCH] drm/i915/selftests: Allow for larger engine counts
+
+Increasing the engine count causes a couple of local array variables
+to exceed the kernel stack limit. So make them dynamic allocations
+instead.
+
+Signed-off-by: John Harrison <John.C.Harrison at Intel.com>
+---
+ drivers/gpu/drm/i915/selftests/i915_request.c | 7 ++++++-
+ drivers/gpu/drm/i915/selftests/intel_lrc.c | 10 ++++++++--
+ 2 files changed, 14 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/gpu/drm/i915/selftests/i915_request.c b/drivers/gpu/drm/i915/selftests/i915_request.c
+--- a/drivers/gpu/drm/i915/selftests/i915_request.c
++++ b/drivers/gpu/drm/i915/selftests/i915_request.c
+@@ -1097,7 +1097,7 @@ max_batches(struct i915_gem_context *ctx, struct intel_engine_cs *engine)
+ static int live_breadcrumbs_smoketest(void *arg)
+ {
+ struct drm_i915_private *i915 = arg;
+- struct smoketest t[I915_NUM_ENGINES];
++ struct smoketest *t;
+ unsigned int ncpus = num_online_cpus();
+ unsigned long num_waits, num_fences;
+ struct intel_engine_cs *engine;
+@@ -1117,6 +1117,10 @@ static int live_breadcrumbs_smoketest(void *arg)
+ * On real hardware this time.
+ */
+
++ t = kmalloc_array(I915_NUM_ENGINES, sizeof(*t), GFP_KERNEL);
++ if (!t)
++ return -ENOMEM;
++
+ wakeref = intel_runtime_pm_get(i915);
+
+ file = mock_file(i915);
+@@ -1226,6 +1230,7 @@ static int live_breadcrumbs_smoketest(void *arg)
+ out_rpm:
+ intel_runtime_pm_put(i915, wakeref);
+
++ kfree(t);
+ return ret;
+ }
+
+diff --git a/drivers/gpu/drm/i915/selftests/intel_lrc.c b/drivers/gpu/drm/i915/selftests/intel_lrc.c
+--- a/drivers/gpu/drm/i915/selftests/intel_lrc.c
++++ b/drivers/gpu/drm/i915/selftests/intel_lrc.c
+@@ -964,12 +964,16 @@ static int smoke_crescendo(struct preempt_smoke *smoke, unsigned int flags)
+ #define BATCH BIT(0)
+ {
+ struct task_struct *tsk[I915_NUM_ENGINES] = {};
+- struct preempt_smoke arg[I915_NUM_ENGINES];
++ struct preempt_smoke *arg;
+ struct intel_engine_cs *engine;
+ enum intel_engine_id id;
+ unsigned long count;
+ int err = 0;
+
++ arg = kmalloc_array(I915_NUM_ENGINES, sizeof(*arg), GFP_KERNEL);
++ if (!arg)
++ return -ENOMEM;
++
+ mutex_unlock(&smoke->i915->drm.struct_mutex);
+
+ for_each_engine(engine, smoke->i915, id) {
+@@ -979,7 +983,7 @@ static int smoke_crescendo(struct preempt_smoke *smoke, unsigned int flags)
+ arg[id].batch = NULL;
+ arg[id].count = 0;
+
+- tsk[id] = kthread_run(smoke_crescendo_thread, &arg,
++ tsk[id] = kthread_run(smoke_crescendo_thread, arg,
+ "igt/smoke:%d", id);
+ if (IS_ERR(tsk[id])) {
+ err = PTR_ERR(tsk[id]);
+@@ -1009,6 +1013,8 @@ static int smoke_crescendo(struct preempt_smoke *smoke, unsigned int flags)
+ pr_info("Submitted %lu crescendo:%x requests across %d engines and %d contexts\n",
+ count, flags,
+ RUNTIME_INFO(smoke->i915)->num_engines, smoke->ncontext);
++
++ kfree(arg);
+ return 0;
+ }
+
--
git-pile 0.91
More information about the Intel-gfx
mailing list