From: Oscar Mateo <oscar.ma...@intel.com>

Gen11 has up to 4 VCS and up to 2 VECS engines, this patch adds mmio
base definitions for all of them.

Bspec: 20944
Bspec: 7021

v2: Set the correct mmio_base in intel_engines_init_mmio; updating the
base mmio values any later would cause incorrect reads in
i915_gem_sanitize (Michel).

Cc: Tvrtko Ursulin <tvrtko.ursu...@intel.com>
Cc: Ceraolo Spurio, Daniele <daniele.ceraolospu...@intel.com>
Signed-off-by: Oscar Mateo <oscar.ma...@intel.com>
Signed-off-by: Michel Thierry <michel.thie...@intel.com>
---
 drivers/gpu/drm/i915/i915_reg.h        |  6 +++++
 drivers/gpu/drm/i915/intel_engine_cs.c | 44 +++++++++++++++++++++++++++++++++-
 2 files changed, 49 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index b342d30152ca..f843ac205313 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -2316,7 +2316,13 @@ enum i915_power_well_id {
 #define BSD_RING_BASE          0x04000
 #define GEN6_BSD_RING_BASE     0x12000
 #define GEN8_BSD2_RING_BASE    0x1c000
+#define GEN11_BSD_RING_BASE    0x1c0000
+#define GEN11_BSD2_RING_BASE   0x1c4000
+#define GEN11_BSD3_RING_BASE   0x1d0000
+#define GEN11_BSD4_RING_BASE   0x1d4000
 #define VEBOX_RING_BASE                0x1a000
+#define GEN11_VEBOX_RING_BASE          0x1c8000
+#define GEN11_VEBOX2_RING_BASE         0x1d8000
 #define BLT_RING_BASE          0x22000
 #define RING_TAIL(base)                _MMIO((base)+0x30)
 #define RING_HEAD(base)                _MMIO((base)+0x34)
diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c 
b/drivers/gpu/drm/i915/intel_engine_cs.c
index 6bb51a502b8b..e88b2fd44724 100644
--- a/drivers/gpu/drm/i915/intel_engine_cs.c
+++ b/drivers/gpu/drm/i915/intel_engine_cs.c
@@ -121,6 +121,22 @@ static const struct engine_info intel_engines[] = {
                .mmio_base = GEN8_BSD2_RING_BASE,
                .irq_shift = GEN8_VCS2_IRQ_SHIFT,
        },
+       [VCS3] = {
+               .hw_id = VCS3_HW,
+               .uabi_id = I915_EXEC_BSD,
+               .class = VIDEO_DECODE_CLASS,
+               .instance = 2,
+               .mmio_base = GEN11_BSD3_RING_BASE,
+               .irq_shift = 0, /* not used */
+       },
+       [VCS4] = {
+               .hw_id = VCS4_HW,
+               .uabi_id = I915_EXEC_BSD,
+               .class = VIDEO_DECODE_CLASS,
+               .instance = 3,
+               .mmio_base = GEN11_BSD4_RING_BASE,
+               .irq_shift = 0, /* not used */
+       },
        [VECS] = {
                .hw_id = VECS_HW,
                .uabi_id = I915_EXEC_VEBOX,
@@ -129,6 +145,14 @@ static const struct engine_info intel_engines[] = {
                .mmio_base = VEBOX_RING_BASE,
                .irq_shift = GEN8_VECS_IRQ_SHIFT,
        },
+       [VECS2] = {
+               .hw_id = VECS2_HW,
+               .uabi_id = I915_EXEC_VEBOX,
+               .class = VIDEO_ENHANCEMENT_CLASS,
+               .instance = 1,
+               .mmio_base = GEN11_VEBOX2_RING_BASE,
+               .irq_shift = 0, /* not used */
+       },
 };
 
 /**
@@ -225,7 +249,25 @@ intel_engine_setup(struct drm_i915_private *dev_priv,
                         class_info->name, info->instance) >=
                sizeof(engine->name));
        engine->hw_id = engine->guc_id = info->hw_id;
-       engine->mmio_base = info->mmio_base;
+       if (INTEL_GEN(dev_priv) >= 11) {
+               switch (engine->id) {
+               case VCS:
+                       engine->mmio_base = GEN11_BSD_RING_BASE;
+                       break;
+               case VCS2:
+                       engine->mmio_base = GEN11_BSD2_RING_BASE;
+                       break;
+               case VECS:
+                       engine->mmio_base = GEN11_VEBOX_RING_BASE;
+                       break;
+               default:
+                       /* take the original value for all other engines  */
+                       engine->mmio_base = info->mmio_base;
+                       break;
+               }
+       } else {
+               engine->mmio_base = info->mmio_base;
+       }
        engine->irq_shift = info->irq_shift;
        engine->class = info->class;
        engine->instance = info->instance;
-- 
2.14.3

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to