diff mbox series

[1/2] drm/i915: Store the BIT(engine->id) as the engine's mask

Message ID 20190302100635.3916-2-chris@chris-wilson.co.uk (mailing list archive)
State New, archived
Headers show
Series [1/2] drm/i915: Store the BIT(engine->id) as the engine's mask | expand

Commit Message

Chris Wilson March 2, 2019, 10:06 a.m. UTC
In the next patch, we are introducing a broad virtual engine to encompass
multiple physical engines, losing the 1:1 nature of BIT(engine->id). To
reflect the broader set of engines implied by the virtual instance, lets
store the full bitmask.

v2: Use intel_engine_mask_t (s/ring_mask/engine_mask/)
v3: Tvrtko voted for moah churn so teach everyone to not mention ring
and use $class$instance throughout.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
---
 drivers/gpu/drm/i915/gvt/cmd_parser.c         |  44 ++--
 drivers/gpu/drm/i915/gvt/execlist.c           |  17 +-
 drivers/gpu/drm/i915/gvt/handlers.c           |  26 +-
 drivers/gpu/drm/i915/gvt/interrupt.c          |   2 +-
 drivers/gpu/drm/i915/gvt/mmio_context.c       | 228 +++++++++---------
 drivers/gpu/drm/i915/gvt/scheduler.c          |  21 +-
 drivers/gpu/drm/i915/i915_cmd_parser.c        |  12 +-
 drivers/gpu/drm/i915/i915_debugfs.c           |   6 +-
 drivers/gpu/drm/i915/i915_drv.c               |   8 +-
 drivers/gpu/drm/i915/i915_drv.h               |  22 +-
 drivers/gpu/drm/i915/i915_gem_context.c       |   4 +-
 drivers/gpu/drm/i915/i915_gem_execbuffer.c    |  14 +-
 drivers/gpu/drm/i915/i915_gem_gtt.c           |   2 +-
 drivers/gpu/drm/i915/i915_gem_gtt.h           |   2 +-
 drivers/gpu/drm/i915/i915_gem_render_state.c  |   2 +-
 drivers/gpu/drm/i915/i915_gpu_error.c         |  31 +--
 drivers/gpu/drm/i915/i915_gpu_error.h         |   1 -
 drivers/gpu/drm/i915/i915_irq.c               |  73 +++---
 drivers/gpu/drm/i915/i915_pci.c               |  39 +--
 drivers/gpu/drm/i915/i915_perf.c              |   8 +-
 drivers/gpu/drm/i915/i915_pmu.c               |   2 +-
 drivers/gpu/drm/i915/i915_reg.h               |  24 +-
 drivers/gpu/drm/i915/i915_reset.c             |  47 ++--
 drivers/gpu/drm/i915/intel_device_info.c      |   6 +-
 drivers/gpu/drm/i915/intel_device_info.h      |   6 +-
 drivers/gpu/drm/i915/intel_engine_cs.c        |  59 ++---
 drivers/gpu/drm/i915/intel_guc_ads.c          |   2 +-
 drivers/gpu/drm/i915/intel_guc_submission.c   |   6 +-
 drivers/gpu/drm/i915/intel_hangcheck.c        |  10 +-
 drivers/gpu/drm/i915/intel_lrc.c              |  12 +-
 drivers/gpu/drm/i915/intel_mocs.c             |  12 +-
 drivers/gpu/drm/i915/intel_overlay.c          |   2 +-
 drivers/gpu/drm/i915/intel_ringbuffer.c       |  35 +--
 drivers/gpu/drm/i915/intel_ringbuffer.h       |  27 +--
 drivers/gpu/drm/i915/intel_workarounds.c      |   4 +-
 drivers/gpu/drm/i915/selftests/huge_pages.c   |   4 +-
 .../drm/i915/selftests/i915_gem_coherency.c   |   4 +-
 .../gpu/drm/i915/selftests/i915_gem_context.c |   8 +-
 .../gpu/drm/i915/selftests/i915_gem_object.c  |   2 +-
 drivers/gpu/drm/i915/selftests/i915_request.c |  14 +-
 drivers/gpu/drm/i915/selftests/intel_guc.c    |   4 +-
 .../gpu/drm/i915/selftests/intel_hangcheck.c  |  16 +-
 drivers/gpu/drm/i915/selftests/intel_lrc.c    |   4 +-
 .../drm/i915/selftests/intel_workarounds.c    |   4 +-
 drivers/gpu/drm/i915/selftests/mock_engine.c  |   1 +
 .../gpu/drm/i915/selftests/mock_gem_device.c  |   6 +-
 46 files changed, 425 insertions(+), 458 deletions(-)

Comments

Tvrtko Ursulin March 5, 2019, 2:44 p.m. UTC | #1
On 02/03/2019 10:06, Chris Wilson wrote:
> In the next patch, we are introducing a broad virtual engine to encompass
> multiple physical engines, losing the 1:1 nature of BIT(engine->id). To
> reflect the broader set of engines implied by the virtual instance, lets
> store the full bitmask.
> 
> v2: Use intel_engine_mask_t (s/ring_mask/engine_mask/)
> v3: Tvrtko voted for moah churn so teach everyone to not mention ring
> and use $class$instance throughout.
> 
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> ---
>   drivers/gpu/drm/i915/gvt/cmd_parser.c         |  44 ++--
>   drivers/gpu/drm/i915/gvt/execlist.c           |  17 +-
>   drivers/gpu/drm/i915/gvt/handlers.c           |  26 +-
>   drivers/gpu/drm/i915/gvt/interrupt.c          |   2 +-
>   drivers/gpu/drm/i915/gvt/mmio_context.c       | 228 +++++++++---------
>   drivers/gpu/drm/i915/gvt/scheduler.c          |  21 +-
>   drivers/gpu/drm/i915/i915_cmd_parser.c        |  12 +-
>   drivers/gpu/drm/i915/i915_debugfs.c           |   6 +-
>   drivers/gpu/drm/i915/i915_drv.c               |   8 +-
>   drivers/gpu/drm/i915/i915_drv.h               |  22 +-
>   drivers/gpu/drm/i915/i915_gem_context.c       |   4 +-
>   drivers/gpu/drm/i915/i915_gem_execbuffer.c    |  14 +-
>   drivers/gpu/drm/i915/i915_gem_gtt.c           |   2 +-
>   drivers/gpu/drm/i915/i915_gem_gtt.h           |   2 +-
>   drivers/gpu/drm/i915/i915_gem_render_state.c  |   2 +-
>   drivers/gpu/drm/i915/i915_gpu_error.c         |  31 +--
>   drivers/gpu/drm/i915/i915_gpu_error.h         |   1 -
>   drivers/gpu/drm/i915/i915_irq.c               |  73 +++---
>   drivers/gpu/drm/i915/i915_pci.c               |  39 +--
>   drivers/gpu/drm/i915/i915_perf.c              |   8 +-
>   drivers/gpu/drm/i915/i915_pmu.c               |   2 +-
>   drivers/gpu/drm/i915/i915_reg.h               |  24 +-
>   drivers/gpu/drm/i915/i915_reset.c             |  47 ++--
>   drivers/gpu/drm/i915/intel_device_info.c      |   6 +-
>   drivers/gpu/drm/i915/intel_device_info.h      |   6 +-
>   drivers/gpu/drm/i915/intel_engine_cs.c        |  59 ++---
>   drivers/gpu/drm/i915/intel_guc_ads.c          |   2 +-
>   drivers/gpu/drm/i915/intel_guc_submission.c   |   6 +-
>   drivers/gpu/drm/i915/intel_hangcheck.c        |  10 +-
>   drivers/gpu/drm/i915/intel_lrc.c              |  12 +-
>   drivers/gpu/drm/i915/intel_mocs.c             |  12 +-
>   drivers/gpu/drm/i915/intel_overlay.c          |   2 +-
>   drivers/gpu/drm/i915/intel_ringbuffer.c       |  35 +--
>   drivers/gpu/drm/i915/intel_ringbuffer.h       |  27 +--
>   drivers/gpu/drm/i915/intel_workarounds.c      |   4 +-
>   drivers/gpu/drm/i915/selftests/huge_pages.c   |   4 +-
>   .../drm/i915/selftests/i915_gem_coherency.c   |   4 +-
>   .../gpu/drm/i915/selftests/i915_gem_context.c |   8 +-
>   .../gpu/drm/i915/selftests/i915_gem_object.c  |   2 +-
>   drivers/gpu/drm/i915/selftests/i915_request.c |  14 +-
>   drivers/gpu/drm/i915/selftests/intel_guc.c    |   4 +-
>   .../gpu/drm/i915/selftests/intel_hangcheck.c  |  16 +-
>   drivers/gpu/drm/i915/selftests/intel_lrc.c    |   4 +-
>   .../drm/i915/selftests/intel_workarounds.c    |   4 +-
>   drivers/gpu/drm/i915/selftests/mock_engine.c  |   1 +
>   .../gpu/drm/i915/selftests/mock_gem_device.c  |   6 +-
>   46 files changed, 425 insertions(+), 458 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/gvt/cmd_parser.c b/drivers/gpu/drm/i915/gvt/cmd_parser.c
> index 35b4ec3f7618..cf4a1ecf6853 100644
> --- a/drivers/gpu/drm/i915/gvt/cmd_parser.c
> +++ b/drivers/gpu/drm/i915/gvt/cmd_parser.c
> @@ -391,12 +391,12 @@ struct cmd_info {
>   #define F_POST_HANDLE	(1<<2)
>   	u32 flag;
>   
> -#define R_RCS	(1 << RCS)
> -#define R_VCS1  (1 << VCS)
> -#define R_VCS2  (1 << VCS2)
> +#define R_RCS	BIT(RCS0)
> +#define R_VCS1  BIT(VCS0)
> +#define R_VCS2  BIT(VCS1)
>   #define R_VCS	(R_VCS1 | R_VCS2)
> -#define R_BCS	(1 << BCS)
> -#define R_VECS	(1 << VECS)
> +#define R_BCS	BIT(BCS0)
> +#define R_VECS	BIT(VECS0)
>   #define R_ALL (R_RCS | R_VCS | R_BCS | R_VECS)
>   	/* rings that support this cmd: BLT/RCS/VCS/VECS */
>   	u16 rings;
> @@ -558,7 +558,7 @@ static const struct decode_info decode_info_vebox = {
>   };
>   
>   static const struct decode_info *ring_decode_info[I915_NUM_ENGINES][8] = {
> -	[RCS] = {
> +	[RCS0] = {
>   		&decode_info_mi,
>   		NULL,
>   		NULL,
> @@ -569,7 +569,7 @@ static const struct decode_info *ring_decode_info[I915_NUM_ENGINES][8] = {
>   		NULL,
>   	},
>   
> -	[VCS] = {
> +	[VCS0] = {
>   		&decode_info_mi,
>   		NULL,
>   		NULL,
> @@ -580,7 +580,7 @@ static const struct decode_info *ring_decode_info[I915_NUM_ENGINES][8] = {
>   		NULL,
>   	},
>   
> -	[BCS] = {
> +	[BCS0] = {
>   		&decode_info_mi,
>   		NULL,
>   		&decode_info_2d,
> @@ -591,7 +591,7 @@ static const struct decode_info *ring_decode_info[I915_NUM_ENGINES][8] = {
>   		NULL,
>   	},
>   
> -	[VECS] = {
> +	[VECS0] = {
>   		&decode_info_mi,
>   		NULL,
>   		NULL,
> @@ -602,7 +602,7 @@ static const struct decode_info *ring_decode_info[I915_NUM_ENGINES][8] = {
>   		NULL,
>   	},
>   
> -	[VCS2] = {
> +	[VCS1] = {
>   		&decode_info_mi,
>   		NULL,
>   		NULL,
> @@ -631,8 +631,7 @@ static inline const struct cmd_info *find_cmd_entry(struct intel_gvt *gvt,
>   	struct cmd_entry *e;
>   
>   	hash_for_each_possible(gvt->cmd_table, e, hlist, opcode) {
> -		if ((opcode == e->info->opcode) &&
> -				(e->info->rings & (1 << ring_id)))
> +		if (opcode == e->info->opcode && e->info->rings & BIT(ring_id))
>   			return e->info;
>   	}
>   	return NULL;
> @@ -943,15 +942,12 @@ static int cmd_handler_lri(struct parser_exec_state *s)
>   	struct intel_gvt *gvt = s->vgpu->gvt;
>   
>   	for (i = 1; i < cmd_len; i += 2) {
> -		if (IS_BROADWELL(gvt->dev_priv) &&
> -				(s->ring_id != RCS)) {
> -			if (s->ring_id == BCS &&
> -					cmd_reg(s, i) ==
> -					i915_mmio_reg_offset(DERRMR))
> +		if (IS_BROADWELL(gvt->dev_priv) && s->ring_id != RCS0) {
> +			if (s->ring_id == BCS0 &&
> +			    cmd_reg(s, i) == i915_mmio_reg_offset(DERRMR))
>   				ret |= 0;
>   			else
> -				ret |= (cmd_reg_inhibit(s, i)) ?
> -					-EBADRQC : 0;
> +				ret |= cmd_reg_inhibit(s, i) ? -EBADRQC : 0;
>   		}
>   		if (ret)
>   			break;
> @@ -1047,27 +1043,27 @@ struct cmd_interrupt_event {
>   };
>   
>   static struct cmd_interrupt_event cmd_interrupt_events[] = {
> -	[RCS] = {
> +	[RCS0] = {
>   		.pipe_control_notify = RCS_PIPE_CONTROL,
>   		.mi_flush_dw = INTEL_GVT_EVENT_RESERVED,
>   		.mi_user_interrupt = RCS_MI_USER_INTERRUPT,
>   	},
> -	[BCS] = {
> +	[BCS0] = {
>   		.pipe_control_notify = INTEL_GVT_EVENT_RESERVED,
>   		.mi_flush_dw = BCS_MI_FLUSH_DW,
>   		.mi_user_interrupt = BCS_MI_USER_INTERRUPT,
>   	},
> -	[VCS] = {
> +	[VCS0] = {
>   		.pipe_control_notify = INTEL_GVT_EVENT_RESERVED,
>   		.mi_flush_dw = VCS_MI_FLUSH_DW,
>   		.mi_user_interrupt = VCS_MI_USER_INTERRUPT,
>   	},
> -	[VCS2] = {
> +	[VCS1] = {
>   		.pipe_control_notify = INTEL_GVT_EVENT_RESERVED,
>   		.mi_flush_dw = VCS2_MI_FLUSH_DW,
>   		.mi_user_interrupt = VCS2_MI_USER_INTERRUPT,
>   	},
> -	[VECS] = {
> +	[VECS0] = {
>   		.pipe_control_notify = INTEL_GVT_EVENT_RESERVED,
>   		.mi_flush_dw = VECS_MI_FLUSH_DW,
>   		.mi_user_interrupt = VECS_MI_USER_INTERRUPT,
> diff --git a/drivers/gpu/drm/i915/gvt/execlist.c b/drivers/gpu/drm/i915/gvt/execlist.c
> index 70494e394d2c..1a93472cb34e 100644
> --- a/drivers/gpu/drm/i915/gvt/execlist.c
> +++ b/drivers/gpu/drm/i915/gvt/execlist.c
> @@ -47,17 +47,16 @@
>   		((a)->lrca == (b)->lrca))
>   
>   static int context_switch_events[] = {
> -	[RCS] = RCS_AS_CONTEXT_SWITCH,
> -	[BCS] = BCS_AS_CONTEXT_SWITCH,
> -	[VCS] = VCS_AS_CONTEXT_SWITCH,
> -	[VCS2] = VCS2_AS_CONTEXT_SWITCH,
> -	[VECS] = VECS_AS_CONTEXT_SWITCH,
> +	[RCS0]  = RCS_AS_CONTEXT_SWITCH,
> +	[BCS0]  = BCS_AS_CONTEXT_SWITCH,
> +	[VCS0]  = VCS_AS_CONTEXT_SWITCH,
> +	[VCS1]  = VCS2_AS_CONTEXT_SWITCH,
> +	[VECS0] = VECS_AS_CONTEXT_SWITCH,
>   };
>   
> -static int ring_id_to_context_switch_event(int ring_id)
> +static int ring_id_to_context_switch_event(unsigned int ring_id)
>   {
> -	if (WARN_ON(ring_id < RCS ||
> -		    ring_id >= ARRAY_SIZE(context_switch_events)))
> +	if (WARN_ON(ring_id >= ARRAY_SIZE(context_switch_events)))
>   		return -EINVAL;
>   
>   	return context_switch_events[ring_id];
> @@ -411,7 +410,7 @@ static int complete_execlist_workload(struct intel_vgpu_workload *workload)
>   	gvt_dbg_el("complete workload %p status %d\n", workload,
>   			workload->status);
>   
> -	if (workload->status || (vgpu->resetting_eng & ENGINE_MASK(ring_id)))
> +	if (workload->status || (vgpu->resetting_eng & BIT(ring_id)))
>   		goto out;
>   
>   	if (!list_empty(workload_q_head(vgpu, ring_id))) {
> diff --git a/drivers/gpu/drm/i915/gvt/handlers.c b/drivers/gpu/drm/i915/gvt/handlers.c
> index bc64b810e0d5..b596cb42e24e 100644
> --- a/drivers/gpu/drm/i915/gvt/handlers.c
> +++ b/drivers/gpu/drm/i915/gvt/handlers.c
> @@ -323,25 +323,25 @@ static int gdrst_mmio_write(struct intel_vgpu *vgpu, unsigned int offset,
>   	} else {
>   		if (data & GEN6_GRDOM_RENDER) {
>   			gvt_dbg_mmio("vgpu%d: request RCS reset\n", vgpu->id);
> -			engine_mask |= (1 << RCS);
> +			engine_mask |= BIT(RCS0);
>   		}
>   		if (data & GEN6_GRDOM_MEDIA) {
>   			gvt_dbg_mmio("vgpu%d: request VCS reset\n", vgpu->id);
> -			engine_mask |= (1 << VCS);
> +			engine_mask |= BIT(VCS0);
>   		}
>   		if (data & GEN6_GRDOM_BLT) {
>   			gvt_dbg_mmio("vgpu%d: request BCS Reset\n", vgpu->id);
> -			engine_mask |= (1 << BCS);
> +			engine_mask |= BIT(BCS0);
>   		}
>   		if (data & GEN6_GRDOM_VECS) {
>   			gvt_dbg_mmio("vgpu%d: request VECS Reset\n", vgpu->id);
> -			engine_mask |= (1 << VECS);
> +			engine_mask |= BIT(VECS0);
>   		}
>   		if (data & GEN8_GRDOM_MEDIA2) {
>   			gvt_dbg_mmio("vgpu%d: request VCS2 Reset\n", vgpu->id);
> -			if (HAS_BSD2(vgpu->gvt->dev_priv))
> -				engine_mask |= (1 << VCS2);
> +			engine_mask |= BIT(VCS1);
>   		}
> +		engine_mask &= INTEL_INFO(vgpu->gvt->dev_priv)->engine_mask;
>   	}
>   
>   	/* vgpu_lock already hold by emulate mmio r/w */
> @@ -1704,7 +1704,7 @@ static int ring_mode_mmio_write(struct intel_vgpu *vgpu, unsigned int offset,
>   			return 0;
>   
>   		ret = intel_vgpu_select_submission_ops(vgpu,
> -			       ENGINE_MASK(ring_id),
> +			       BIT(ring_id),
>   			       INTEL_VGPU_EXECLIST_SUBMISSION);
>   		if (ret)
>   			return ret;
> @@ -1724,19 +1724,19 @@ static int gvt_reg_tlb_control_handler(struct intel_vgpu *vgpu,
>   
>   	switch (offset) {
>   	case 0x4260:
> -		id = RCS;
> +		id = RCS0;
>   		break;
>   	case 0x4264:
> -		id = VCS;
> +		id = VCS0;
>   		break;
>   	case 0x4268:
> -		id = VCS2;
> +		id = VCS1;
>   		break;
>   	case 0x426c:
> -		id = BCS;
> +		id = BCS0;
>   		break;
>   	case 0x4270:
> -		id = VECS;
> +		id = VECS0;
>   		break;
>   	default:
>   		return -EINVAL;
> @@ -1793,7 +1793,7 @@ static int ring_reset_ctl_write(struct intel_vgpu *vgpu,
>   	MMIO_F(prefix(BLT_RING_BASE), s, f, am, rm, d, r, w); \
>   	MMIO_F(prefix(GEN6_BSD_RING_BASE), s, f, am, rm, d, r, w); \
>   	MMIO_F(prefix(VEBOX_RING_BASE), s, f, am, rm, d, r, w); \
> -	if (HAS_BSD2(dev_priv)) \
> +	if (HAS_ENGINE(dev_priv, VCS1)) \
>   		MMIO_F(prefix(GEN8_BSD2_RING_BASE), s, f, am, rm, d, r, w); \
>   } while (0)
>   
> diff --git a/drivers/gpu/drm/i915/gvt/interrupt.c b/drivers/gpu/drm/i915/gvt/interrupt.c
> index 67125c5eec6e..951681813230 100644
> --- a/drivers/gpu/drm/i915/gvt/interrupt.c
> +++ b/drivers/gpu/drm/i915/gvt/interrupt.c
> @@ -536,7 +536,7 @@ static void gen8_init_irq(
>   	SET_BIT_INFO(irq, 4, VCS_MI_FLUSH_DW, INTEL_GVT_IRQ_INFO_GT1);
>   	SET_BIT_INFO(irq, 8, VCS_AS_CONTEXT_SWITCH, INTEL_GVT_IRQ_INFO_GT1);
>   
> -	if (HAS_BSD2(gvt->dev_priv)) {
> +	if (HAS_ENGINE(gvt->dev_priv, VCS1)) {
>   		SET_BIT_INFO(irq, 16, VCS2_MI_USER_INTERRUPT,
>   			INTEL_GVT_IRQ_INFO_GT1);
>   		SET_BIT_INFO(irq, 20, VCS2_MI_FLUSH_DW,
> diff --git a/drivers/gpu/drm/i915/gvt/mmio_context.c b/drivers/gpu/drm/i915/gvt/mmio_context.c
> index 7d84cfb9051a..0209d27fcaf0 100644
> --- a/drivers/gpu/drm/i915/gvt/mmio_context.c
> +++ b/drivers/gpu/drm/i915/gvt/mmio_context.c
> @@ -41,102 +41,102 @@
>   
>   /* Raw offset is appened to each line for convenience. */
>   static struct engine_mmio gen8_engine_mmio_list[] __cacheline_aligned = {
> -	{RCS, GFX_MODE_GEN7, 0xffff, false}, /* 0x229c */
> -	{RCS, GEN9_CTX_PREEMPT_REG, 0x0, false}, /* 0x2248 */
> -	{RCS, HWSTAM, 0x0, false}, /* 0x2098 */
> -	{RCS, INSTPM, 0xffff, true}, /* 0x20c0 */
> -	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 0), 0, false}, /* 0x24d0 */
> -	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 1), 0, false}, /* 0x24d4 */
> -	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 2), 0, false}, /* 0x24d8 */
> -	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 3), 0, false}, /* 0x24dc */
> -	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 4), 0, false}, /* 0x24e0 */
> -	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 5), 0, false}, /* 0x24e4 */
> -	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 6), 0, false}, /* 0x24e8 */
> -	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 7), 0, false}, /* 0x24ec */
> -	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 8), 0, false}, /* 0x24f0 */
> -	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 9), 0, false}, /* 0x24f4 */
> -	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 10), 0, false}, /* 0x24f8 */
> -	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 11), 0, false}, /* 0x24fc */
> -	{RCS, CACHE_MODE_1, 0xffff, true}, /* 0x7004 */
> -	{RCS, GEN7_GT_MODE, 0xffff, true}, /* 0x7008 */
> -	{RCS, CACHE_MODE_0_GEN7, 0xffff, true}, /* 0x7000 */
> -	{RCS, GEN7_COMMON_SLICE_CHICKEN1, 0xffff, true}, /* 0x7010 */
> -	{RCS, HDC_CHICKEN0, 0xffff, true}, /* 0x7300 */
> -	{RCS, VF_GUARDBAND, 0xffff, true}, /* 0x83a4 */
> -
> -	{BCS, RING_GFX_MODE(BLT_RING_BASE), 0xffff, false}, /* 0x2229c */
> -	{BCS, RING_MI_MODE(BLT_RING_BASE), 0xffff, false}, /* 0x2209c */
> -	{BCS, RING_INSTPM(BLT_RING_BASE), 0xffff, false}, /* 0x220c0 */
> -	{BCS, RING_HWSTAM(BLT_RING_BASE), 0x0, false}, /* 0x22098 */
> -	{BCS, RING_EXCC(BLT_RING_BASE), 0x0, false}, /* 0x22028 */
> -	{RCS, INVALID_MMIO_REG, 0, false } /* Terminated */
> +	{RCS0, GFX_MODE_GEN7, 0xffff, false}, /* 0x229c */
> +	{RCS0, GEN9_CTX_PREEMPT_REG, 0x0, false}, /* 0x2248 */
> +	{RCS0, HWSTAM, 0x0, false}, /* 0x2098 */
> +	{RCS0, INSTPM, 0xffff, true}, /* 0x20c0 */
> +	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 0), 0, false}, /* 0x24d0 */
> +	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 1), 0, false}, /* 0x24d4 */
> +	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 2), 0, false}, /* 0x24d8 */
> +	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 3), 0, false}, /* 0x24dc */
> +	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 4), 0, false}, /* 0x24e0 */
> +	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 5), 0, false}, /* 0x24e4 */
> +	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 6), 0, false}, /* 0x24e8 */
> +	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 7), 0, false}, /* 0x24ec */
> +	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 8), 0, false}, /* 0x24f0 */
> +	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 9), 0, false}, /* 0x24f4 */
> +	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 10), 0, false}, /* 0x24f8 */
> +	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 11), 0, false}, /* 0x24fc */
> +	{RCS0, CACHE_MODE_1, 0xffff, true}, /* 0x7004 */
> +	{RCS0, GEN7_GT_MODE, 0xffff, true}, /* 0x7008 */
> +	{RCS0, CACHE_MODE_0_GEN7, 0xffff, true}, /* 0x7000 */
> +	{RCS0, GEN7_COMMON_SLICE_CHICKEN1, 0xffff, true}, /* 0x7010 */
> +	{RCS0, HDC_CHICKEN0, 0xffff, true}, /* 0x7300 */
> +	{RCS0, VF_GUARDBAND, 0xffff, true}, /* 0x83a4 */
> +
> +	{BCS0, RING_GFX_MODE(BLT_RING_BASE), 0xffff, false}, /* 0x2229c */
> +	{BCS0, RING_MI_MODE(BLT_RING_BASE), 0xffff, false}, /* 0x2209c */
> +	{BCS0, RING_INSTPM(BLT_RING_BASE), 0xffff, false}, /* 0x220c0 */
> +	{BCS0, RING_HWSTAM(BLT_RING_BASE), 0x0, false}, /* 0x22098 */
> +	{BCS0, RING_EXCC(BLT_RING_BASE), 0x0, false}, /* 0x22028 */
> +	{RCS0, INVALID_MMIO_REG, 0, false } /* Terminated */
>   };
>   
>   static struct engine_mmio gen9_engine_mmio_list[] __cacheline_aligned = {
> -	{RCS, GFX_MODE_GEN7, 0xffff, false}, /* 0x229c */
> -	{RCS, GEN9_CTX_PREEMPT_REG, 0x0, false}, /* 0x2248 */
> -	{RCS, HWSTAM, 0x0, false}, /* 0x2098 */
> -	{RCS, INSTPM, 0xffff, true}, /* 0x20c0 */
> -	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 0), 0, false}, /* 0x24d0 */
> -	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 1), 0, false}, /* 0x24d4 */
> -	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 2), 0, false}, /* 0x24d8 */
> -	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 3), 0, false}, /* 0x24dc */
> -	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 4), 0, false}, /* 0x24e0 */
> -	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 5), 0, false}, /* 0x24e4 */
> -	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 6), 0, false}, /* 0x24e8 */
> -	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 7), 0, false}, /* 0x24ec */
> -	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 8), 0, false}, /* 0x24f0 */
> -	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 9), 0, false}, /* 0x24f4 */
> -	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 10), 0, false}, /* 0x24f8 */
> -	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 11), 0, false}, /* 0x24fc */
> -	{RCS, CACHE_MODE_1, 0xffff, true}, /* 0x7004 */
> -	{RCS, GEN7_GT_MODE, 0xffff, true}, /* 0x7008 */
> -	{RCS, CACHE_MODE_0_GEN7, 0xffff, true}, /* 0x7000 */
> -	{RCS, GEN7_COMMON_SLICE_CHICKEN1, 0xffff, true}, /* 0x7010 */
> -	{RCS, HDC_CHICKEN0, 0xffff, true}, /* 0x7300 */
> -	{RCS, VF_GUARDBAND, 0xffff, true}, /* 0x83a4 */
> -
> -	{RCS, GEN8_PRIVATE_PAT_LO, 0, false}, /* 0x40e0 */
> -	{RCS, GEN8_PRIVATE_PAT_HI, 0, false}, /* 0x40e4 */
> -	{RCS, GEN8_CS_CHICKEN1, 0xffff, true}, /* 0x2580 */
> -	{RCS, COMMON_SLICE_CHICKEN2, 0xffff, true}, /* 0x7014 */
> -	{RCS, GEN9_CS_DEBUG_MODE1, 0xffff, false}, /* 0x20ec */
> -	{RCS, GEN8_L3SQCREG4, 0, false}, /* 0xb118 */
> -	{RCS, GEN7_HALF_SLICE_CHICKEN1, 0xffff, true}, /* 0xe100 */
> -	{RCS, HALF_SLICE_CHICKEN2, 0xffff, true}, /* 0xe180 */
> -	{RCS, HALF_SLICE_CHICKEN3, 0xffff, true}, /* 0xe184 */
> -	{RCS, GEN9_HALF_SLICE_CHICKEN5, 0xffff, true}, /* 0xe188 */
> -	{RCS, GEN9_HALF_SLICE_CHICKEN7, 0xffff, true}, /* 0xe194 */
> -	{RCS, GEN8_ROW_CHICKEN, 0xffff, true}, /* 0xe4f0 */
> -	{RCS, TRVATTL3PTRDW(0), 0, false}, /* 0x4de0 */
> -	{RCS, TRVATTL3PTRDW(1), 0, false}, /* 0x4de4 */
> -	{RCS, TRNULLDETCT, 0, false}, /* 0x4de8 */
> -	{RCS, TRINVTILEDETCT, 0, false}, /* 0x4dec */
> -	{RCS, TRVADR, 0, false}, /* 0x4df0 */
> -	{RCS, TRTTE, 0, false}, /* 0x4df4 */
> -
> -	{BCS, RING_GFX_MODE(BLT_RING_BASE), 0xffff, false}, /* 0x2229c */
> -	{BCS, RING_MI_MODE(BLT_RING_BASE), 0xffff, false}, /* 0x2209c */
> -	{BCS, RING_INSTPM(BLT_RING_BASE), 0xffff, false}, /* 0x220c0 */
> -	{BCS, RING_HWSTAM(BLT_RING_BASE), 0x0, false}, /* 0x22098 */
> -	{BCS, RING_EXCC(BLT_RING_BASE), 0x0, false}, /* 0x22028 */
> -
> -	{VCS2, RING_EXCC(GEN8_BSD2_RING_BASE), 0xffff, false}, /* 0x1c028 */
> -
> -	{VECS, RING_EXCC(VEBOX_RING_BASE), 0xffff, false}, /* 0x1a028 */
> -
> -	{RCS, GEN8_HDC_CHICKEN1, 0xffff, true}, /* 0x7304 */
> -	{RCS, GEN9_CTX_PREEMPT_REG, 0x0, false}, /* 0x2248 */
> -	{RCS, GEN7_UCGCTL4, 0x0, false}, /* 0x940c */
> -	{RCS, GAMT_CHKN_BIT_REG, 0x0, false}, /* 0x4ab8 */
> -
> -	{RCS, GEN9_GAMT_ECO_REG_RW_IA, 0x0, false}, /* 0x4ab0 */
> -	{RCS, GEN9_CSFE_CHICKEN1_RCS, 0xffff, false}, /* 0x20d4 */
> -
> -	{RCS, GEN8_GARBCNTL, 0x0, false}, /* 0xb004 */
> -	{RCS, GEN7_FF_THREAD_MODE, 0x0, false}, /* 0x20a0 */
> -	{RCS, FF_SLICE_CS_CHICKEN2, 0xffff, false}, /* 0x20e4 */
> -	{RCS, INVALID_MMIO_REG, 0, false } /* Terminated */
> +	{RCS0, GFX_MODE_GEN7, 0xffff, false}, /* 0x229c */
> +	{RCS0, GEN9_CTX_PREEMPT_REG, 0x0, false}, /* 0x2248 */
> +	{RCS0, HWSTAM, 0x0, false}, /* 0x2098 */
> +	{RCS0, INSTPM, 0xffff, true}, /* 0x20c0 */
> +	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 0), 0, false}, /* 0x24d0 */
> +	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 1), 0, false}, /* 0x24d4 */
> +	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 2), 0, false}, /* 0x24d8 */
> +	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 3), 0, false}, /* 0x24dc */
> +	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 4), 0, false}, /* 0x24e0 */
> +	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 5), 0, false}, /* 0x24e4 */
> +	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 6), 0, false}, /* 0x24e8 */
> +	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 7), 0, false}, /* 0x24ec */
> +	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 8), 0, false}, /* 0x24f0 */
> +	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 9), 0, false}, /* 0x24f4 */
> +	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 10), 0, false}, /* 0x24f8 */
> +	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 11), 0, false}, /* 0x24fc */
> +	{RCS0, CACHE_MODE_1, 0xffff, true}, /* 0x7004 */
> +	{RCS0, GEN7_GT_MODE, 0xffff, true}, /* 0x7008 */
> +	{RCS0, CACHE_MODE_0_GEN7, 0xffff, true}, /* 0x7000 */
> +	{RCS0, GEN7_COMMON_SLICE_CHICKEN1, 0xffff, true}, /* 0x7010 */
> +	{RCS0, HDC_CHICKEN0, 0xffff, true}, /* 0x7300 */
> +	{RCS0, VF_GUARDBAND, 0xffff, true}, /* 0x83a4 */
> +
> +	{RCS0, GEN8_PRIVATE_PAT_LO, 0, false}, /* 0x40e0 */
> +	{RCS0, GEN8_PRIVATE_PAT_HI, 0, false}, /* 0x40e4 */
> +	{RCS0, GEN8_CS_CHICKEN1, 0xffff, true}, /* 0x2580 */
> +	{RCS0, COMMON_SLICE_CHICKEN2, 0xffff, true}, /* 0x7014 */
> +	{RCS0, GEN9_CS_DEBUG_MODE1, 0xffff, false}, /* 0x20ec */
> +	{RCS0, GEN8_L3SQCREG4, 0, false}, /* 0xb118 */
> +	{RCS0, GEN7_HALF_SLICE_CHICKEN1, 0xffff, true}, /* 0xe100 */
> +	{RCS0, HALF_SLICE_CHICKEN2, 0xffff, true}, /* 0xe180 */
> +	{RCS0, HALF_SLICE_CHICKEN3, 0xffff, true}, /* 0xe184 */
> +	{RCS0, GEN9_HALF_SLICE_CHICKEN5, 0xffff, true}, /* 0xe188 */
> +	{RCS0, GEN9_HALF_SLICE_CHICKEN7, 0xffff, true}, /* 0xe194 */
> +	{RCS0, GEN8_ROW_CHICKEN, 0xffff, true}, /* 0xe4f0 */
> +	{RCS0, TRVATTL3PTRDW(0), 0, false}, /* 0x4de0 */
> +	{RCS0, TRVATTL3PTRDW(1), 0, false}, /* 0x4de4 */
> +	{RCS0, TRNULLDETCT, 0, false}, /* 0x4de8 */
> +	{RCS0, TRINVTILEDETCT, 0, false}, /* 0x4dec */
> +	{RCS0, TRVADR, 0, false}, /* 0x4df0 */
> +	{RCS0, TRTTE, 0, false}, /* 0x4df4 */
> +
> +	{BCS0, RING_GFX_MODE(BLT_RING_BASE), 0xffff, false}, /* 0x2229c */
> +	{BCS0, RING_MI_MODE(BLT_RING_BASE), 0xffff, false}, /* 0x2209c */
> +	{BCS0, RING_INSTPM(BLT_RING_BASE), 0xffff, false}, /* 0x220c0 */
> +	{BCS0, RING_HWSTAM(BLT_RING_BASE), 0x0, false}, /* 0x22098 */
> +	{BCS0, RING_EXCC(BLT_RING_BASE), 0x0, false}, /* 0x22028 */
> +
> +	{VCS1, RING_EXCC(GEN8_BSD2_RING_BASE), 0xffff, false}, /* 0x1c028 */
> +
> +	{VECS0, RING_EXCC(VEBOX_RING_BASE), 0xffff, false}, /* 0x1a028 */
> +
> +	{RCS0, GEN8_HDC_CHICKEN1, 0xffff, true}, /* 0x7304 */
> +	{RCS0, GEN9_CTX_PREEMPT_REG, 0x0, false}, /* 0x2248 */
> +	{RCS0, GEN7_UCGCTL4, 0x0, false}, /* 0x940c */
> +	{RCS0, GAMT_CHKN_BIT_REG, 0x0, false}, /* 0x4ab8 */
> +
> +	{RCS0, GEN9_GAMT_ECO_REG_RW_IA, 0x0, false}, /* 0x4ab0 */
> +	{RCS0, GEN9_CSFE_CHICKEN1_RCS, 0xffff, false}, /* 0x20d4 */
> +
> +	{RCS0, GEN8_GARBCNTL, 0x0, false}, /* 0xb004 */
> +	{RCS0, GEN7_FF_THREAD_MODE, 0x0, false}, /* 0x20a0 */
> +	{RCS0, FF_SLICE_CS_CHICKEN2, 0xffff, false}, /* 0x20e4 */
> +	{RCS0, INVALID_MMIO_REG, 0, false } /* Terminated */
>   };
>   
>   static struct {
> @@ -149,11 +149,11 @@ static void load_render_mocs(struct drm_i915_private *dev_priv)
>   {
>   	i915_reg_t offset;
>   	u32 regs[] = {
> -		[RCS] = 0xc800,
> -		[VCS] = 0xc900,
> -		[VCS2] = 0xca00,
> -		[BCS] = 0xcc00,
> -		[VECS] = 0xcb00,
> +		[RCS0]  = 0xc800,
> +		[VCS0]  = 0xc900,
> +		[VCS1]  = 0xca00,
> +		[BCS0]  = 0xcc00,
> +		[VECS0] = 0xcb00,
>   	};
>   	int ring_id, i;
>   
> @@ -301,7 +301,7 @@ int intel_vgpu_restore_inhibit_context(struct intel_vgpu *vgpu,
>   		goto out;
>   
>   	/* no MOCS register in context except render engine */
> -	if (req->engine->id != RCS)
> +	if (req->engine->id != RCS0)
>   		goto out;
>   
>   	ret = restore_render_mocs_control_for_inhibit(vgpu, req);
> @@ -331,11 +331,11 @@ static void handle_tlb_pending_event(struct intel_vgpu *vgpu, int ring_id)
>   	enum forcewake_domains fw;
>   	i915_reg_t reg;
>   	u32 regs[] = {
> -		[RCS] = 0x4260,
> -		[VCS] = 0x4264,
> -		[VCS2] = 0x4268,
> -		[BCS] = 0x426c,
> -		[VECS] = 0x4270,
> +		[RCS0]  = 0x4260,
> +		[VCS0]  = 0x4264,
> +		[VCS1]  = 0x4268,
> +		[BCS0]  = 0x426c,
> +		[VECS0] = 0x4270,
>   	};
>   
>   	if (WARN_ON(ring_id >= ARRAY_SIZE(regs)))
> @@ -353,7 +353,7 @@ static void handle_tlb_pending_event(struct intel_vgpu *vgpu, int ring_id)
>   	 */
>   	fw = intel_uncore_forcewake_for_reg(dev_priv, reg,
>   					    FW_REG_READ | FW_REG_WRITE);
> -	if (ring_id == RCS && (INTEL_GEN(dev_priv) >= 9))
> +	if (ring_id == RCS0 && INTEL_GEN(dev_priv) >= 9)
>   		fw |= FORCEWAKE_RENDER;
>   
>   	intel_uncore_forcewake_get(dev_priv, fw);
> @@ -378,11 +378,11 @@ static void switch_mocs(struct intel_vgpu *pre, struct intel_vgpu *next,
>   	u32 old_v, new_v;
>   
>   	u32 regs[] = {
> -		[RCS] = 0xc800,
> -		[VCS] = 0xc900,
> -		[VCS2] = 0xca00,
> -		[BCS] = 0xcc00,
> -		[VECS] = 0xcb00,
> +		[RCS0]  = 0xc800,
> +		[VCS0]  = 0xc900,
> +		[VCS1]  = 0xca00,
> +		[BCS0]  = 0xcc00,
> +		[VECS0] = 0xcb00,
>   	};
>   	int i;
>   
> @@ -390,8 +390,10 @@ static void switch_mocs(struct intel_vgpu *pre, struct intel_vgpu *next,
>   	if (WARN_ON(ring_id >= ARRAY_SIZE(regs)))
>   		return;
>   
> -	if ((IS_KABYLAKE(dev_priv)  || IS_BROXTON(dev_priv)
> -		|| IS_COFFEELAKE(dev_priv)) && ring_id == RCS)
> +	if (ring_id == RCS0 &&
> +	    (IS_KABYLAKE(dev_priv) ||
> +	     IS_BROXTON(dev_priv) ||
> +	     IS_COFFEELAKE(dev_priv)))
>   		return;
>   
>   	if (!pre && !gen9_render_mocs.initialized)
> @@ -414,7 +416,7 @@ static void switch_mocs(struct intel_vgpu *pre, struct intel_vgpu *next,
>   		offset.reg += 4;
>   	}
>   
> -	if (ring_id == RCS) {
> +	if (ring_id == RCS0) {
>   		l3_offset.reg = 0xb020;
>   		for (i = 0; i < GEN9_MOCS_SIZE / 2; i++) {
>   			if (pre)
> diff --git a/drivers/gpu/drm/i915/gvt/scheduler.c b/drivers/gpu/drm/i915/gvt/scheduler.c
> index 1bb8f936fdaa..709bcaaed765 100644
> --- a/drivers/gpu/drm/i915/gvt/scheduler.c
> +++ b/drivers/gpu/drm/i915/gvt/scheduler.c
> @@ -93,7 +93,7 @@ static void sr_oa_regs(struct intel_vgpu_workload *workload,
>   		i915_mmio_reg_offset(EU_PERF_CNTL6),
>   	};
>   
> -	if (workload->ring_id != RCS)
> +	if (workload->ring_id != RCS0)
>   		return;
>   
>   	if (save) {
> @@ -149,7 +149,7 @@ static int populate_shadow_context(struct intel_vgpu_workload *workload)
>   	COPY_REG_MASKED(ctx_ctrl);
>   	COPY_REG(ctx_timestamp);
>   
> -	if (ring_id == RCS) {
> +	if (ring_id == RCS0) {
>   		COPY_REG(bb_per_ctx_ptr);
>   		COPY_REG(rcs_indirect_ctx);
>   		COPY_REG(rcs_indirect_ctx_offset);
> @@ -177,7 +177,7 @@ static int populate_shadow_context(struct intel_vgpu_workload *workload)
>   
>   	context_page_num = context_page_num >> PAGE_SHIFT;
>   
> -	if (IS_BROADWELL(gvt->dev_priv) && ring_id == RCS)
> +	if (IS_BROADWELL(gvt->dev_priv) && ring_id == RCS0)
>   		context_page_num = 19;
>   
>   	i = 2;
> @@ -440,8 +440,7 @@ int intel_gvt_scan_and_shadow_workload(struct intel_vgpu_workload *workload)
>   	if (ret)
>   		goto err_unpin;
>   
> -	if ((workload->ring_id == RCS) &&
> -	    (workload->wa_ctx.indirect_ctx.size != 0)) {
> +	if (workload->ring_id == RCS0 && workload->wa_ctx.indirect_ctx.size) {
>   		ret = intel_gvt_scan_and_shadow_wa_ctx(&workload->wa_ctx);
>   		if (ret)
>   			goto err_shadow;
> @@ -791,7 +790,7 @@ static void update_guest_context(struct intel_vgpu_workload *workload)
>   	context_page_num = rq->engine->context_size;
>   	context_page_num = context_page_num >> PAGE_SHIFT;
>   
> -	if (IS_BROADWELL(gvt->dev_priv) && rq->engine->id == RCS)
> +	if (IS_BROADWELL(gvt->dev_priv) && rq->engine->id == RCS0)
>   		context_page_num = 19;
>   
>   	i = 2;
> @@ -891,8 +890,8 @@ static void complete_current_workload(struct intel_gvt *gvt, int ring_id)
>   				workload->status = 0;
>   		}
>   
> -		if (!workload->status && !(vgpu->resetting_eng &
> -					   ENGINE_MASK(ring_id))) {
> +		if (!workload->status &&
> +		    !(vgpu->resetting_eng & BIT(ring_id))) {
>   			update_guest_context(workload);
>   
>   			for_each_set_bit(event, workload->pending_events,
> @@ -915,7 +914,7 @@ static void complete_current_workload(struct intel_gvt *gvt, int ring_id)
>   
>   	list_del_init(&workload->list);
>   
> -	if (workload->status || (vgpu->resetting_eng & ENGINE_MASK(ring_id))) {
> +	if (workload->status || vgpu->resetting_eng & BIT(ring_id)) {
>   		/* if workload->status is not successful means HW GPU
>   		 * has occurred GPU hang or something wrong with i915/GVT,
>   		 * and GVT won't inject context switch interrupt to guest.
> @@ -929,7 +928,7 @@ static void complete_current_workload(struct intel_gvt *gvt, int ring_id)
>   		 * cleaned up during the resetting process later, so doing
>   		 * the workload clean up here doesn't have any impact.
>   		 **/
> -		intel_vgpu_clean_workloads(vgpu, ENGINE_MASK(ring_id));
> +		intel_vgpu_clean_workloads(vgpu, BIT(ring_id));
>   	}
>   
>   	workload->complete(workload);
> @@ -1438,7 +1437,7 @@ intel_vgpu_create_workload(struct intel_vgpu *vgpu, int ring_id,
>   	workload->rb_start = start;
>   	workload->rb_ctl = ctl;
>   
> -	if (ring_id == RCS) {
> +	if (ring_id == RCS0) {
>   		intel_gvt_hypervisor_read_gpa(vgpu, ring_context_gpa +
>   			RING_CTX_OFF(bb_per_ctx_ptr.val), &per_ctx, 4);
>   		intel_gvt_hypervisor_read_gpa(vgpu, ring_context_gpa +
> diff --git a/drivers/gpu/drm/i915/i915_cmd_parser.c b/drivers/gpu/drm/i915/i915_cmd_parser.c
> index 33e8eed64423..503d548a55f7 100644
> --- a/drivers/gpu/drm/i915/i915_cmd_parser.c
> +++ b/drivers/gpu/drm/i915/i915_cmd_parser.c
> @@ -868,8 +868,8 @@ void intel_engine_init_cmd_parser(struct intel_engine_cs *engine)
>   	if (!IS_GEN(engine->i915, 7))
>   		return;
>   
> -	switch (engine->id) {
> -	case RCS:
> +	switch (engine->class) {
> +	case RENDER_CLASS:
>   		if (IS_HASWELL(engine->i915)) {
>   			cmd_tables = hsw_render_ring_cmds;
>   			cmd_table_count =
> @@ -889,12 +889,12 @@ void intel_engine_init_cmd_parser(struct intel_engine_cs *engine)
>   
>   		engine->get_cmd_length_mask = gen7_render_get_cmd_length_mask;
>   		break;
> -	case VCS:
> +	case VIDEO_DECODE_CLASS:
>   		cmd_tables = gen7_video_cmds;
>   		cmd_table_count = ARRAY_SIZE(gen7_video_cmds);
>   		engine->get_cmd_length_mask = gen7_bsd_get_cmd_length_mask;
>   		break;
> -	case BCS:
> +	case COPY_ENGINE_CLASS:
>   		if (IS_HASWELL(engine->i915)) {
>   			cmd_tables = hsw_blt_ring_cmds;
>   			cmd_table_count = ARRAY_SIZE(hsw_blt_ring_cmds);
> @@ -913,14 +913,14 @@ void intel_engine_init_cmd_parser(struct intel_engine_cs *engine)
>   
>   		engine->get_cmd_length_mask = gen7_blt_get_cmd_length_mask;
>   		break;
> -	case VECS:
> +	case VIDEO_ENHANCEMENT_CLASS:
>   		cmd_tables = hsw_vebox_cmds;
>   		cmd_table_count = ARRAY_SIZE(hsw_vebox_cmds);
>   		/* VECS can use the same length_mask function as VCS */
>   		engine->get_cmd_length_mask = gen7_bsd_get_cmd_length_mask;
>   		break;
>   	default:
> -		MISSING_CASE(engine->id);
> +		MISSING_CASE(engine->class);
>   		return;
>   	}
>   
> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> index 298371aad445..0a6348ad7c98 100644
> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> @@ -1298,7 +1298,7 @@ static int i915_hangcheck_info(struct seq_file *m, void *unused)
>   			seqno[id] = intel_engine_get_hangcheck_seqno(engine);
>   		}
>   
> -		intel_engine_get_instdone(dev_priv->engine[RCS], &instdone);
> +		intel_engine_get_instdone(dev_priv->engine[RCS0], &instdone);
>   	}
>   
>   	if (timer_pending(&dev_priv->gpu_error.hangcheck_work.timer))
> @@ -1325,7 +1325,7 @@ static int i915_hangcheck_info(struct seq_file *m, void *unused)
>   			   (long long)engine->hangcheck.acthd,
>   			   (long long)acthd[id]);
>   
> -		if (engine->id == RCS) {
> +		if (engine->id == RCS0) {
>   			seq_puts(m, "\tinstdone read =\n");
>   
>   			i915_instdone_info(dev_priv, m, &instdone);
> @@ -3178,7 +3178,7 @@ static int i915_shared_dplls_info(struct seq_file *m, void *unused)
>   static int i915_wa_registers(struct seq_file *m, void *unused)
>   {
>   	struct drm_i915_private *i915 = node_to_i915(m->private);
> -	const struct i915_wa_list *wal = &i915->engine[RCS]->ctx_wa_list;
> +	const struct i915_wa_list *wal = &i915->engine[RCS0]->ctx_wa_list;
>   	struct i915_wa *wa;
>   	unsigned int i;
>   
> diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
> index c08abdef5eb6..f61bb462127d 100644
> --- a/drivers/gpu/drm/i915/i915_drv.c
> +++ b/drivers/gpu/drm/i915/i915_drv.c
> @@ -330,16 +330,16 @@ static int i915_getparam_ioctl(struct drm_device *dev, void *data,
>   		value = dev_priv->overlay ? 1 : 0;
>   		break;
>   	case I915_PARAM_HAS_BSD:
> -		value = !!dev_priv->engine[VCS];
> +		value = !!dev_priv->engine[VCS0];
>   		break;
>   	case I915_PARAM_HAS_BLT:
> -		value = !!dev_priv->engine[BCS];
> +		value = !!dev_priv->engine[BCS0];
>   		break;
>   	case I915_PARAM_HAS_VEBOX:
> -		value = !!dev_priv->engine[VECS];
> +		value = !!dev_priv->engine[VECS0];
>   		break;
>   	case I915_PARAM_HAS_BSD2:
> -		value = !!dev_priv->engine[VCS2];
> +		value = !!dev_priv->engine[VCS1];
>   		break;
>   	case I915_PARAM_HAS_LLC:
>   		value = HAS_LLC(dev_priv);
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 453af7438e67..0bcf03d02047 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -2099,7 +2099,7 @@ static inline struct drm_i915_private *huc_to_i915(struct intel_huc *huc)
>   
>   /* Iterator over subset of engines selected by mask */
>   #define for_each_engine_masked(engine__, dev_priv__, mask__, tmp__) \
> -	for ((tmp__) = (mask__) & INTEL_INFO(dev_priv__)->ring_mask; \
> +	for ((tmp__) = (mask__) & INTEL_INFO(dev_priv__)->engine_mask; \
>   	     (tmp__) ? \
>   	     ((engine__) = (dev_priv__)->engine[__mask_next_bit(tmp__)]), 1 : \
>   	     0;)
> @@ -2420,24 +2420,8 @@ static inline unsigned int i915_sg_segment_size(void)
>   #define IS_GEN9_LP(dev_priv)	(IS_GEN(dev_priv, 9) && IS_LP(dev_priv))
>   #define IS_GEN9_BC(dev_priv)	(IS_GEN(dev_priv, 9) && !IS_LP(dev_priv))
>   
> -#define ENGINE_MASK(id)	BIT(id)
> -#define RENDER_RING	ENGINE_MASK(RCS)
> -#define BSD_RING	ENGINE_MASK(VCS)
> -#define BLT_RING	ENGINE_MASK(BCS)
> -#define VEBOX_RING	ENGINE_MASK(VECS)
> -#define BSD2_RING	ENGINE_MASK(VCS2)
> -#define BSD3_RING	ENGINE_MASK(VCS3)
> -#define BSD4_RING	ENGINE_MASK(VCS4)
> -#define VEBOX2_RING	ENGINE_MASK(VECS2)
> -#define ALL_ENGINES	(~0)
> -
> -#define HAS_ENGINE(dev_priv, id) \
> -	(!!(INTEL_INFO(dev_priv)->ring_mask & ENGINE_MASK(id)))
> -
> -#define HAS_BSD(dev_priv)	HAS_ENGINE(dev_priv, VCS)
> -#define HAS_BSD2(dev_priv)	HAS_ENGINE(dev_priv, VCS2)
> -#define HAS_BLT(dev_priv)	HAS_ENGINE(dev_priv, BCS)
> -#define HAS_VEBOX(dev_priv)	HAS_ENGINE(dev_priv, VECS)
> +#define ALL_ENGINES	(~0u)
> +#define HAS_ENGINE(dev_priv, id) (INTEL_INFO(dev_priv)->engine_mask & BIT(id))
>   
>   #define HAS_LLC(dev_priv)	(INTEL_INFO(dev_priv)->has_llc)
>   #define HAS_SNOOP(dev_priv)	(INTEL_INFO(dev_priv)->has_snoop)
> diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c
> index d266ba3f7210..1e3211e909f1 100644
> --- a/drivers/gpu/drm/i915/i915_gem_context.c
> +++ b/drivers/gpu/drm/i915/i915_gem_context.c
> @@ -583,7 +583,7 @@ int i915_gem_contexts_init(struct drm_i915_private *dev_priv)
>   	GEM_BUG_ON(dev_priv->kernel_context);
>   	GEM_BUG_ON(dev_priv->preempt_context);
>   
> -	intel_engine_init_ctx_wa(dev_priv->engine[RCS]);
> +	intel_engine_init_ctx_wa(dev_priv->engine[RCS0]);
>   	init_contexts(dev_priv);
>   
>   	/* lowest priority; idle task */
> @@ -1089,7 +1089,7 @@ __i915_gem_context_reconfigure_sseu(struct i915_gem_context *ctx,
>   	int ret = 0;
>   
>   	GEM_BUG_ON(INTEL_GEN(ctx->i915) < 8);
> -	GEM_BUG_ON(engine->id != RCS);
> +	GEM_BUG_ON(engine->id != RCS0);
>   
>   	/* Nothing to do if unmodified. */
>   	if (!memcmp(&ce->sseu, &sseu, sizeof(sseu)))
> diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> index 53d0d70c97fa..943a221acb21 100644
> --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
> @@ -1957,7 +1957,7 @@ static int i915_reset_gen7_sol_offsets(struct i915_request *rq)
>   	u32 *cs;
>   	int i;
>   
> -	if (!IS_GEN(rq->i915, 7) || rq->engine->id != RCS) {
> +	if (!IS_GEN(rq->i915, 7) || rq->engine->id != RCS0) {
>   		DRM_DEBUG("sol reset is gen7/rcs only\n");
>   		return -EINVAL;
>   	}
> @@ -2082,11 +2082,11 @@ gen8_dispatch_bsd_engine(struct drm_i915_private *dev_priv,
>   #define I915_USER_RINGS (4)
>   
>   static const enum intel_engine_id user_ring_map[I915_USER_RINGS + 1] = {
> -	[I915_EXEC_DEFAULT]	= RCS,
> -	[I915_EXEC_RENDER]	= RCS,
> -	[I915_EXEC_BLT]		= BCS,
> -	[I915_EXEC_BSD]		= VCS,
> -	[I915_EXEC_VEBOX]	= VECS
> +	[I915_EXEC_DEFAULT]	= RCS0,
> +	[I915_EXEC_RENDER]	= RCS0,
> +	[I915_EXEC_BLT]		= BCS0,
> +	[I915_EXEC_BSD]		= VCS0,
> +	[I915_EXEC_VEBOX]	= VECS0
>   };
>   
>   static struct intel_engine_cs *
> @@ -2109,7 +2109,7 @@ eb_select_engine(struct drm_i915_private *dev_priv,
>   		return NULL;
>   	}
>   
> -	if (user_ring_id == I915_EXEC_BSD && HAS_BSD2(dev_priv)) {
> +	if (user_ring_id == I915_EXEC_BSD && HAS_ENGINE(dev_priv, VCS1)) {
>   		unsigned int bsd_idx = args->flags & I915_EXEC_BSD_MASK;
>   
>   		if (bsd_idx == I915_EXEC_BSD_DEFAULT) {
> diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
> index 7e79691664e5..e4b8a710bd1a 100644
> --- a/drivers/gpu/drm/i915/i915_gem_gtt.c
> +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
> @@ -798,7 +798,7 @@ static void gen8_initialize_pml4(struct i915_address_space *vm,
>    */
>   static void mark_tlbs_dirty(struct i915_hw_ppgtt *ppgtt)
>   {
> -	ppgtt->pd_dirty_rings = INTEL_INFO(ppgtt->vm.i915)->ring_mask;
> +	ppgtt->pd_dirty_engines = INTEL_INFO(ppgtt->vm.i915)->engine_mask;
>   }
>   
>   /* Removes entries from a single page table, releasing it if it's empty.
> diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.h b/drivers/gpu/drm/i915/i915_gem_gtt.h
> index 03ade71b8d9a..adc1929ee28b 100644
> --- a/drivers/gpu/drm/i915/i915_gem_gtt.h
> +++ b/drivers/gpu/drm/i915/i915_gem_gtt.h
> @@ -390,7 +390,7 @@ struct i915_hw_ppgtt {
>   	struct i915_address_space vm;
>   	struct kref ref;
>   
> -	unsigned long pd_dirty_rings;
> +	unsigned long pd_dirty_engines;
>   	union {
>   		struct i915_pml4 pml4;		/* GEN8+ & 48b PPGTT */
>   		struct i915_page_directory_pointer pdp;	/* GEN8+ */
> diff --git a/drivers/gpu/drm/i915/i915_gem_render_state.c b/drivers/gpu/drm/i915/i915_gem_render_state.c
> index 90baf9086d0a..91196348c68c 100644
> --- a/drivers/gpu/drm/i915/i915_gem_render_state.c
> +++ b/drivers/gpu/drm/i915/i915_gem_render_state.c
> @@ -42,7 +42,7 @@ struct intel_render_state {
>   static const struct intel_renderstate_rodata *
>   render_state_get_rodata(const struct intel_engine_cs *engine)
>   {
> -	if (engine->id != RCS)
> +	if (engine->id != RCS0)
>   		return NULL;
>   
>   	switch (INTEL_GEN(engine->i915)) {
> diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c
> index fa86c60fb56c..7c79693dd4f7 100644
> --- a/drivers/gpu/drm/i915/i915_gpu_error.c
> +++ b/drivers/gpu/drm/i915/i915_gpu_error.c
> @@ -411,7 +411,7 @@ static void error_print_instdone(struct drm_i915_error_state_buf *m,
>   	err_printf(m, "  INSTDONE: 0x%08x\n",
>   		   ee->instdone.instdone);
>   
> -	if (ee->engine_id != RCS || INTEL_GEN(m->i915) <= 3)
> +	if (ee->engine_id != RCS0 || INTEL_GEN(m->i915) <= 3)
>   		return;
>   
>   	err_printf(m, "  SC_INSTDONE: 0x%08x\n",
> @@ -502,13 +502,6 @@ static void error_print_engine(struct drm_i915_error_state_buf *m,
>   	if (INTEL_GEN(m->i915) >= 6) {
>   		err_printf(m, "  RC PSMI: 0x%08x\n", ee->rc_psmi);
>   		err_printf(m, "  FAULT_REG: 0x%08x\n", ee->fault_reg);
> -		err_printf(m, "  SYNC_0: 0x%08x\n",
> -			   ee->semaphore_mboxes[0]);
> -		err_printf(m, "  SYNC_1: 0x%08x\n",
> -			   ee->semaphore_mboxes[1]);
> -		if (HAS_VEBOX(m->i915))
> -			err_printf(m, "  SYNC_2: 0x%08x\n",
> -				   ee->semaphore_mboxes[2]);
>   	}
>   	if (HAS_PPGTT(m->i915)) {
>   		err_printf(m, "  GFX_MODE: 0x%08x\n", ee->vm_info.gfx_mode);
> @@ -1138,18 +1131,6 @@ static void gem_record_fences(struct i915_gpu_state *error)
>   	error->nfence = i;
>   }
>   
> -static void gen6_record_semaphore_state(struct intel_engine_cs *engine,
> -					struct drm_i915_error_engine *ee)
> -{
> -	struct drm_i915_private *dev_priv = engine->i915;
> -
> -	ee->semaphore_mboxes[0] = I915_READ(RING_SYNC_0(engine->mmio_base));
> -	ee->semaphore_mboxes[1] = I915_READ(RING_SYNC_1(engine->mmio_base));
> -	if (HAS_VEBOX(dev_priv))
> -		ee->semaphore_mboxes[2] =
> -			I915_READ(RING_SYNC_2(engine->mmio_base));
> -}
> -
>   static void error_record_engine_registers(struct i915_gpu_state *error,
>   					  struct intel_engine_cs *engine,
>   					  struct drm_i915_error_engine *ee)
> @@ -1161,7 +1142,6 @@ static void error_record_engine_registers(struct i915_gpu_state *error,
>   		if (INTEL_GEN(dev_priv) >= 8) {
>   			ee->fault_reg = I915_READ(GEN8_RING_FAULT_REG);
>   		} else {
> -			gen6_record_semaphore_state(engine, ee);

Wrong patch?

>   			ee->fault_reg = I915_READ(RING_FAULT_REG(engine));
>   		}
>   	}
> @@ -1200,16 +1180,17 @@ static void error_record_engine_registers(struct i915_gpu_state *error,
>   		if (IS_GEN(dev_priv, 7)) {
>   			switch (engine->id) {
>   			default:
> -			case RCS:
> +				MISSING_CASE(engine->id);
> +			case RCS0:
>   				mmio = RENDER_HWS_PGA_GEN7;
>   				break;
> -			case BCS:
> +			case BCS0:
>   				mmio = BLT_HWS_PGA_GEN7;
>   				break;
> -			case VCS:
> +			case VCS0:
>   				mmio = BSD_HWS_PGA_GEN7;
>   				break;
> -			case VECS:
> +			case VECS0:
>   				mmio = VEBOX_HWS_PGA_GEN7;
>   				break;
>   			}
> diff --git a/drivers/gpu/drm/i915/i915_gpu_error.h b/drivers/gpu/drm/i915/i915_gpu_error.h
> index 8c1569c1830d..99d6b7b270c2 100644
> --- a/drivers/gpu/drm/i915/i915_gpu_error.h
> +++ b/drivers/gpu/drm/i915/i915_gpu_error.h
> @@ -111,7 +111,6 @@ struct i915_gpu_state {
>   		u32 fault_reg;
>   		u64 faddr;
>   		u32 rc_psmi; /* sleep state */
> -		u32 semaphore_mboxes[I915_NUM_ENGINES - 1];
>   		struct intel_instdone instdone;
>   
>   		struct drm_i915_error_context {
> diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
> index a42eb6394b69..1f4e984ce42f 100644
> --- a/drivers/gpu/drm/i915/i915_irq.c
> +++ b/drivers/gpu/drm/i915/i915_irq.c
> @@ -1427,20 +1427,20 @@ static void ilk_gt_irq_handler(struct drm_i915_private *dev_priv,
>   			       u32 gt_iir)
>   {
>   	if (gt_iir & GT_RENDER_USER_INTERRUPT)
> -		intel_engine_breadcrumbs_irq(dev_priv->engine[RCS]);
> +		intel_engine_breadcrumbs_irq(dev_priv->engine[RCS0]);
>   	if (gt_iir & ILK_BSD_USER_INTERRUPT)
> -		intel_engine_breadcrumbs_irq(dev_priv->engine[VCS]);
> +		intel_engine_breadcrumbs_irq(dev_priv->engine[VCS0]);
>   }
>   
>   static void snb_gt_irq_handler(struct drm_i915_private *dev_priv,
>   			       u32 gt_iir)
>   {
>   	if (gt_iir & GT_RENDER_USER_INTERRUPT)
> -		intel_engine_breadcrumbs_irq(dev_priv->engine[RCS]);
> +		intel_engine_breadcrumbs_irq(dev_priv->engine[RCS0]);
>   	if (gt_iir & GT_BSD_USER_INTERRUPT)
> -		intel_engine_breadcrumbs_irq(dev_priv->engine[VCS]);
> +		intel_engine_breadcrumbs_irq(dev_priv->engine[VCS0]);
>   	if (gt_iir & GT_BLT_USER_INTERRUPT)
> -		intel_engine_breadcrumbs_irq(dev_priv->engine[BCS]);
> +		intel_engine_breadcrumbs_irq(dev_priv->engine[BCS0]);
>   
>   	if (gt_iir & (GT_BLT_CS_ERROR_INTERRUPT |
>   		      GT_BSD_CS_ERROR_INTERRUPT |
> @@ -1475,8 +1475,8 @@ static void gen8_gt_irq_ack(struct drm_i915_private *i915,
>   
>   #define GEN8_GT_IRQS (GEN8_GT_RCS_IRQ | \
>   		      GEN8_GT_BCS_IRQ | \
> +		      GEN8_GT_VCS0_IRQ | \
>   		      GEN8_GT_VCS1_IRQ | \
> -		      GEN8_GT_VCS2_IRQ | \
>   		      GEN8_GT_VECS_IRQ | \
>   		      GEN8_GT_PM_IRQ | \
>   		      GEN8_GT_GUC_IRQ)
> @@ -1487,7 +1487,7 @@ static void gen8_gt_irq_ack(struct drm_i915_private *i915,
>   			raw_reg_write(regs, GEN8_GT_IIR(0), gt_iir[0]);
>   	}
>   
> -	if (master_ctl & (GEN8_GT_VCS1_IRQ | GEN8_GT_VCS2_IRQ)) {
> +	if (master_ctl & (GEN8_GT_VCS0_IRQ | GEN8_GT_VCS1_IRQ)) {
>   		gt_iir[1] = raw_reg_read(regs, GEN8_GT_IIR(1));
>   		if (likely(gt_iir[1]))
>   			raw_reg_write(regs, GEN8_GT_IIR(1), gt_iir[1]);
> @@ -1510,21 +1510,21 @@ static void gen8_gt_irq_handler(struct drm_i915_private *i915,
>   				u32 master_ctl, u32 gt_iir[4])
>   {
>   	if (master_ctl & (GEN8_GT_RCS_IRQ | GEN8_GT_BCS_IRQ)) {
> -		gen8_cs_irq_handler(i915->engine[RCS],
> +		gen8_cs_irq_handler(i915->engine[RCS0],
>   				    gt_iir[0] >> GEN8_RCS_IRQ_SHIFT);
> -		gen8_cs_irq_handler(i915->engine[BCS],
> +		gen8_cs_irq_handler(i915->engine[BCS0],
>   				    gt_iir[0] >> GEN8_BCS_IRQ_SHIFT);
>   	}
>   
> -	if (master_ctl & (GEN8_GT_VCS1_IRQ | GEN8_GT_VCS2_IRQ)) {
> -		gen8_cs_irq_handler(i915->engine[VCS],
> +	if (master_ctl & (GEN8_GT_VCS0_IRQ | GEN8_GT_VCS1_IRQ)) {
> +		gen8_cs_irq_handler(i915->engine[VCS0],
> +				    gt_iir[1] >> GEN8_VCS0_IRQ_SHIFT);
> +		gen8_cs_irq_handler(i915->engine[VCS1],
>   				    gt_iir[1] >> GEN8_VCS1_IRQ_SHIFT);
> -		gen8_cs_irq_handler(i915->engine[VCS2],
> -				    gt_iir[1] >> GEN8_VCS2_IRQ_SHIFT);
>   	}
>   
>   	if (master_ctl & GEN8_GT_VECS_IRQ) {
> -		gen8_cs_irq_handler(i915->engine[VECS],
> +		gen8_cs_irq_handler(i915->engine[VECS0],
>   				    gt_iir[3] >> GEN8_VECS_IRQ_SHIFT);
>   	}
>   
> @@ -1801,13 +1801,11 @@ static void gen6_rps_irq_handler(struct drm_i915_private *dev_priv, u32 pm_iir)
>   	if (INTEL_GEN(dev_priv) >= 8)
>   		return;
>   
> -	if (HAS_VEBOX(dev_priv)) {
> -		if (pm_iir & PM_VEBOX_USER_INTERRUPT)
> -			intel_engine_breadcrumbs_irq(dev_priv->engine[VECS]);
> +	if (pm_iir & PM_VEBOX_USER_INTERRUPT)
> +		intel_engine_breadcrumbs_irq(dev_priv->engine[VECS0]);

Grumbling okay.

>   
> -		if (pm_iir & PM_VEBOX_CS_ERROR_INTERRUPT)
> -			DRM_DEBUG("Command parser error, pm_iir 0x%08x\n", pm_iir);
> -	}
> +	if (pm_iir & PM_VEBOX_CS_ERROR_INTERRUPT)
> +		DRM_DEBUG("Command parser error, pm_iir 0x%08x\n", pm_iir);
>   }
>   
>   static void gen9_guc_irq_handler(struct drm_i915_private *dev_priv, u32 gt_iir)
> @@ -3782,7 +3780,7 @@ static void gen5_gt_irq_postinstall(struct drm_device *dev)
>   		 * RPS interrupts will get enabled/disabled on demand when RPS
>   		 * itself is enabled/disabled.
>   		 */
> -		if (HAS_VEBOX(dev_priv)) {
> +		if (HAS_ENGINE(dev_priv, VECS0)) {
>   			pm_irqs |= PM_VEBOX_USER_INTERRUPT;
>   			dev_priv->pm_ier |= PM_VEBOX_USER_INTERRUPT;
>   		}
> @@ -3894,18 +3892,21 @@ static void gen8_gt_irq_postinstall(struct drm_i915_private *dev_priv)
>   {
>   	/* These are interrupts we'll toggle with the ring mask register */
>   	u32 gt_interrupts[] = {
> -		GT_RENDER_USER_INTERRUPT << GEN8_RCS_IRQ_SHIFT |
> -			GT_CONTEXT_SWITCH_INTERRUPT << GEN8_RCS_IRQ_SHIFT |
> -			GT_RENDER_USER_INTERRUPT << GEN8_BCS_IRQ_SHIFT |
> -			GT_CONTEXT_SWITCH_INTERRUPT << GEN8_BCS_IRQ_SHIFT,
> -		GT_RENDER_USER_INTERRUPT << GEN8_VCS1_IRQ_SHIFT |
> -			GT_CONTEXT_SWITCH_INTERRUPT << GEN8_VCS1_IRQ_SHIFT |
> -			GT_RENDER_USER_INTERRUPT << GEN8_VCS2_IRQ_SHIFT |
> -			GT_CONTEXT_SWITCH_INTERRUPT << GEN8_VCS2_IRQ_SHIFT,
> +		(GT_RENDER_USER_INTERRUPT << GEN8_RCS_IRQ_SHIFT |
> +		 GT_CONTEXT_SWITCH_INTERRUPT << GEN8_RCS_IRQ_SHIFT |
> +		 GT_RENDER_USER_INTERRUPT << GEN8_BCS_IRQ_SHIFT |
> +		 GT_CONTEXT_SWITCH_INTERRUPT << GEN8_BCS_IRQ_SHIFT),
> +
> +		(GT_RENDER_USER_INTERRUPT << GEN8_VCS0_IRQ_SHIFT |
> +		 GT_CONTEXT_SWITCH_INTERRUPT << GEN8_VCS0_IRQ_SHIFT |
> +		 GT_RENDER_USER_INTERRUPT << GEN8_VCS1_IRQ_SHIFT |
> +		 GT_CONTEXT_SWITCH_INTERRUPT << GEN8_VCS1_IRQ_SHIFT),
> +
>   		0,
> -		GT_RENDER_USER_INTERRUPT << GEN8_VECS_IRQ_SHIFT |
> -			GT_CONTEXT_SWITCH_INTERRUPT << GEN8_VECS_IRQ_SHIFT
> -		};
> +
> +		(GT_RENDER_USER_INTERRUPT << GEN8_VECS_IRQ_SHIFT |
> +		 GT_CONTEXT_SWITCH_INTERRUPT << GEN8_VECS_IRQ_SHIFT)
> +	};
>   
>   	dev_priv->pm_ier = 0x0;
>   	dev_priv->pm_imr = ~dev_priv->pm_ier;
> @@ -4233,7 +4234,7 @@ static irqreturn_t i8xx_irq_handler(int irq, void *arg)
>   		I915_WRITE16(IIR, iir);
>   
>   		if (iir & I915_USER_INTERRUPT)
> -			intel_engine_breadcrumbs_irq(dev_priv->engine[RCS]);
> +			intel_engine_breadcrumbs_irq(dev_priv->engine[RCS0]);
>   
>   		if (iir & I915_MASTER_ERROR_INTERRUPT)
>   			i8xx_error_irq_handler(dev_priv, eir, eir_stuck);
> @@ -4341,7 +4342,7 @@ static irqreturn_t i915_irq_handler(int irq, void *arg)
>   		I915_WRITE(IIR, iir);
>   
>   		if (iir & I915_USER_INTERRUPT)
> -			intel_engine_breadcrumbs_irq(dev_priv->engine[RCS]);
> +			intel_engine_breadcrumbs_irq(dev_priv->engine[RCS0]);
>   
>   		if (iir & I915_MASTER_ERROR_INTERRUPT)
>   			i9xx_error_irq_handler(dev_priv, eir, eir_stuck);
> @@ -4486,10 +4487,10 @@ static irqreturn_t i965_irq_handler(int irq, void *arg)
>   		I915_WRITE(IIR, iir);
>   
>   		if (iir & I915_USER_INTERRUPT)
> -			intel_engine_breadcrumbs_irq(dev_priv->engine[RCS]);
> +			intel_engine_breadcrumbs_irq(dev_priv->engine[RCS0]);
>   
>   		if (iir & I915_BSD_USER_INTERRUPT)
> -			intel_engine_breadcrumbs_irq(dev_priv->engine[VCS]);
> +			intel_engine_breadcrumbs_irq(dev_priv->engine[VCS0]);
>   
>   		if (iir & I915_MASTER_ERROR_INTERRUPT)
>   			i9xx_error_irq_handler(dev_priv, eir, eir_stuck);
> diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
> index a9211c370cd1..c42c5ccf38fe 100644
> --- a/drivers/gpu/drm/i915/i915_pci.c
> +++ b/drivers/gpu/drm/i915/i915_pci.c
> @@ -94,7 +94,7 @@
>   	.gpu_reset_clobbers_display = true, \
>   	.hws_needs_physical = 1, \
>   	.unfenced_needs_alignment = 1, \
> -	.ring_mask = RENDER_RING, \
> +	.engine_mask = BIT(RCS0), \
>   	.has_snoop = true, \
>   	.has_coherent_ggtt = false, \
>   	GEN_DEFAULT_PIPEOFFSETS, \
> @@ -133,7 +133,7 @@ static const struct intel_device_info intel_i865g_info = {
>   	.num_pipes = 2, \
>   	.display.has_gmch = 1, \
>   	.gpu_reset_clobbers_display = true, \
> -	.ring_mask = RENDER_RING, \
> +	.engine_mask = BIT(RCS0), \
>   	.has_snoop = true, \
>   	.has_coherent_ggtt = true, \
>   	GEN_DEFAULT_PIPEOFFSETS, \
> @@ -210,7 +210,7 @@ static const struct intel_device_info intel_pineview_info = {
>   	.display.has_hotplug = 1, \
>   	.display.has_gmch = 1, \
>   	.gpu_reset_clobbers_display = true, \
> -	.ring_mask = RENDER_RING, \
> +	.engine_mask = BIT(RCS0), \
>   	.has_snoop = true, \
>   	.has_coherent_ggtt = true, \
>   	GEN_DEFAULT_PIPEOFFSETS, \
> @@ -239,7 +239,7 @@ static const struct intel_device_info intel_i965gm_info = {
>   static const struct intel_device_info intel_g45_info = {
>   	GEN4_FEATURES,
>   	PLATFORM(INTEL_G45),
> -	.ring_mask = RENDER_RING | BSD_RING,
> +	.engine_mask = BIT(RCS0) | BIT(VCS0),
>   	.gpu_reset_clobbers_display = false,
>   };
>   
> @@ -249,7 +249,7 @@ static const struct intel_device_info intel_gm45_info = {
>   	.is_mobile = 1,
>   	.display.has_fbc = 1,
>   	.display.supports_tv = 1,
> -	.ring_mask = RENDER_RING | BSD_RING,
> +	.engine_mask = BIT(RCS0) | BIT(VCS0),
>   	.gpu_reset_clobbers_display = false,
>   };
>   
> @@ -257,7 +257,7 @@ static const struct intel_device_info intel_gm45_info = {
>   	GEN(5), \
>   	.num_pipes = 2, \
>   	.display.has_hotplug = 1, \
> -	.ring_mask = RENDER_RING | BSD_RING, \
> +	.engine_mask = BIT(RCS0) | BIT(VCS0), \
>   	.has_snoop = true, \
>   	.has_coherent_ggtt = true, \
>   	/* ilk does support rc6, but we do not implement [power] contexts */ \
> @@ -283,7 +283,7 @@ static const struct intel_device_info intel_ironlake_m_info = {
>   	.num_pipes = 2, \
>   	.display.has_hotplug = 1, \
>   	.display.has_fbc = 1, \
> -	.ring_mask = RENDER_RING | BSD_RING | BLT_RING, \
> +	.engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0), \
>   	.has_coherent_ggtt = true, \
>   	.has_llc = 1, \
>   	.has_rc6 = 1, \
> @@ -328,7 +328,7 @@ static const struct intel_device_info intel_sandybridge_m_gt2_info = {
>   	.num_pipes = 3, \
>   	.display.has_hotplug = 1, \
>   	.display.has_fbc = 1, \
> -	.ring_mask = RENDER_RING | BSD_RING | BLT_RING, \
> +	.engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0), \
>   	.has_coherent_ggtt = true, \
>   	.has_llc = 1, \
>   	.has_rc6 = 1, \
> @@ -389,7 +389,7 @@ static const struct intel_device_info intel_valleyview_info = {
>   	.ppgtt = INTEL_PPGTT_FULL,
>   	.has_snoop = true,
>   	.has_coherent_ggtt = false,
> -	.ring_mask = RENDER_RING | BSD_RING | BLT_RING,
> +	.engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0),
>   	.display_mmio_offset = VLV_DISPLAY_BASE,
>   	GEN_DEFAULT_PAGE_SIZES,
>   	GEN_DEFAULT_PIPEOFFSETS,
> @@ -398,7 +398,7 @@ static const struct intel_device_info intel_valleyview_info = {
>   
>   #define G75_FEATURES  \
>   	GEN7_FEATURES, \
> -	.ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING, \
> +	.engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0), \
>   	.display.has_ddi = 1, \
>   	.has_fpga_dbg = 1, \
>   	.display.has_psr = 1, \
> @@ -462,7 +462,8 @@ static const struct intel_device_info intel_broadwell_rsvd_info = {
>   static const struct intel_device_info intel_broadwell_gt3_info = {
>   	BDW_PLATFORM,
>   	.gt = 3,
> -	.ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING | BSD2_RING,
> +	.engine_mask =
> +		BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS1),
>   };
>   
>   static const struct intel_device_info intel_cherryview_info = {
> @@ -471,7 +472,7 @@ static const struct intel_device_info intel_cherryview_info = {
>   	.num_pipes = 3,
>   	.display.has_hotplug = 1,
>   	.is_lp = 1,
> -	.ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING,
> +	.engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0),
>   	.has_64bit_reloc = 1,
>   	.has_runtime_pm = 1,
>   	.has_rc6 = 1,
> @@ -521,7 +522,8 @@ static const struct intel_device_info intel_skylake_gt2_info = {
>   
>   #define SKL_GT3_PLUS_PLATFORM \
>   	SKL_PLATFORM, \
> -	.ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING | BSD2_RING
> +	.engine_mask = \
> +		BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS1)
>   
>   
>   static const struct intel_device_info intel_skylake_gt3_info = {
> @@ -538,7 +540,7 @@ static const struct intel_device_info intel_skylake_gt4_info = {
>   	GEN(9), \
>   	.is_lp = 1, \
>   	.display.has_hotplug = 1, \
> -	.ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING, \
> +	.engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0), \
>   	.num_pipes = 3, \
>   	.has_64bit_reloc = 1, \
>   	.display.has_ddi = 1, \
> @@ -592,7 +594,8 @@ static const struct intel_device_info intel_kabylake_gt2_info = {
>   static const struct intel_device_info intel_kabylake_gt3_info = {
>   	KBL_PLATFORM,
>   	.gt = 3,
> -	.ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING | BSD2_RING,
> +	.engine_mask =
> +		BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS1),
>   };
>   
>   #define CFL_PLATFORM \
> @@ -612,7 +615,8 @@ static const struct intel_device_info intel_coffeelake_gt2_info = {
>   static const struct intel_device_info intel_coffeelake_gt3_info = {
>   	CFL_PLATFORM,
>   	.gt = 3,
> -	.ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING | BSD2_RING,
> +	.engine_mask =
> +		BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS1),
>   };
>   
>   #define GEN10_FEATURES \
> @@ -655,7 +659,8 @@ static const struct intel_device_info intel_icelake_11_info = {
>   	GEN11_FEATURES,
>   	PLATFORM(INTEL_ICELAKE),
>   	.is_alpha_support = 1,
> -	.ring_mask = RENDER_RING | BLT_RING | VEBOX_RING | BSD_RING | BSD3_RING,
> +	.engine_mask =
> +		BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS0) | BIT(VCS2),
>   };
>   
>   #undef GEN
> diff --git a/drivers/gpu/drm/i915/i915_perf.c b/drivers/gpu/drm/i915/i915_perf.c
> index 9ebf99f3d8d3..891c1c2be695 100644
> --- a/drivers/gpu/drm/i915/i915_perf.c
> +++ b/drivers/gpu/drm/i915/i915_perf.c
> @@ -1202,7 +1202,7 @@ static int i915_oa_read(struct i915_perf_stream *stream,
>   static struct intel_context *oa_pin_context(struct drm_i915_private *i915,
>   					    struct i915_gem_context *ctx)
>   {
> -	struct intel_engine_cs *engine = i915->engine[RCS];
> +	struct intel_engine_cs *engine = i915->engine[RCS0];
>   	struct intel_context *ce;
>   	int ret;
>   
> @@ -1681,7 +1681,7 @@ static void gen8_update_reg_state_unlocked(struct i915_gem_context *ctx,
>   	CTX_REG(reg_state, CTX_R_PWR_CLK_STATE, GEN8_R_PWR_CLK_STATE,
>   		gen8_make_rpcs(dev_priv,
>   			       &to_intel_context(ctx,
> -						 dev_priv->engine[RCS])->sseu));
> +						 dev_priv->engine[RCS0])->sseu));
>   }
>   
>   /*
> @@ -1711,7 +1711,7 @@ static void gen8_update_reg_state_unlocked(struct i915_gem_context *ctx,
>   static int gen8_configure_all_contexts(struct drm_i915_private *dev_priv,
>   				       const struct i915_oa_config *oa_config)
>   {
> -	struct intel_engine_cs *engine = dev_priv->engine[RCS];
> +	struct intel_engine_cs *engine = dev_priv->engine[RCS0];
>   	unsigned int map_type = i915_coherent_map_type(dev_priv);
>   	struct i915_gem_context *ctx;
>   	struct i915_request *rq;
> @@ -2143,7 +2143,7 @@ void i915_oa_init_reg_state(struct intel_engine_cs *engine,
>   {
>   	struct i915_perf_stream *stream;
>   
> -	if (engine->id != RCS)
> +	if (engine->class != RENDER_CLASS)
>   		return;
>   
>   	stream = engine->i915->perf.oa.exclusive_stream;
> diff --git a/drivers/gpu/drm/i915/i915_pmu.c b/drivers/gpu/drm/i915/i915_pmu.c
> index 6560c356f279..084016200a1e 100644
> --- a/drivers/gpu/drm/i915/i915_pmu.c
> +++ b/drivers/gpu/drm/i915/i915_pmu.c
> @@ -101,7 +101,7 @@ static bool pmu_needs_timer(struct drm_i915_private *i915, bool gpu_active)
>   	 *
>   	 * Use RCS as proxy for all engines.
>   	 */
> -	else if (intel_engine_supports_stats(i915->engine[RCS]))
> +	else if (intel_engine_supports_stats(i915->engine[RCS0]))
>   		enable &= ~BIT(I915_SAMPLE_BUSY);
>   
>   	/*
> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> index c9b482bc6433..dce392c18166 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -210,14 +210,14 @@ static inline bool i915_mmio_reg_valid(i915_reg_t reg)
>   
>   /* Engine ID */
>   
> -#define RCS_HW		0
> -#define VCS_HW		1
> -#define BCS_HW		2
> -#define VECS_HW		3
> -#define VCS2_HW		4
> -#define VCS3_HW		6
> -#define VCS4_HW		7
> -#define VECS2_HW	12
> +#define RCS0_HW		0
> +#define VCS0_HW		1
> +#define BCS0_HW		2
> +#define VECS0_HW	3
> +#define VCS1_HW		4
> +#define VCS2_HW		6
> +#define VCS3_HW		7
> +#define VECS1_HW	12
>   
>   /* Engine class */
>   
> @@ -7250,8 +7250,8 @@ enum {
>   #define  GEN8_GT_VECS_IRQ		(1 << 6)
>   #define  GEN8_GT_GUC_IRQ		(1 << 5)
>   #define  GEN8_GT_PM_IRQ			(1 << 4)
> -#define  GEN8_GT_VCS2_IRQ		(1 << 3)
> -#define  GEN8_GT_VCS1_IRQ		(1 << 2)
> +#define  GEN8_GT_VCS1_IRQ		(1 << 3)
> +#define  GEN8_GT_VCS0_IRQ		(1 << 2)

BSpec uses index 1. :( So I think best to leave these alone.

>   #define  GEN8_GT_BCS_IRQ		(1 << 1)
>   #define  GEN8_GT_RCS_IRQ		(1 << 0)
>   
> @@ -7272,8 +7272,8 @@ enum {
>   
>   #define GEN8_RCS_IRQ_SHIFT 0
>   #define GEN8_BCS_IRQ_SHIFT 16
> -#define GEN8_VCS1_IRQ_SHIFT 0
> -#define GEN8_VCS2_IRQ_SHIFT 16
> +#define GEN8_VCS0_IRQ_SHIFT 0
> +#define GEN8_VCS1_IRQ_SHIFT 16
>   #define GEN8_VECS_IRQ_SHIFT 0
>   #define GEN8_WD_IRQ_SHIFT 16
>   
> diff --git a/drivers/gpu/drm/i915/i915_reset.c b/drivers/gpu/drm/i915/i915_reset.c
> index 55d6123dbba4..3fbaa72a9eac 100644
> --- a/drivers/gpu/drm/i915/i915_reset.c
> +++ b/drivers/gpu/drm/i915/i915_reset.c
> @@ -297,12 +297,12 @@ static int gen6_reset_engines(struct drm_i915_private *i915,
>   			      unsigned int retry)
>   {
>   	struct intel_engine_cs *engine;
> -	const u32 hw_engine_mask[I915_NUM_ENGINES] = {
> -		[RCS] = GEN6_GRDOM_RENDER,
> -		[BCS] = GEN6_GRDOM_BLT,
> -		[VCS] = GEN6_GRDOM_MEDIA,
> -		[VCS2] = GEN8_GRDOM_MEDIA2,
> -		[VECS] = GEN6_GRDOM_VECS,
> +	const u32 hw_engine_mask[] = {
> +		[RCS0]  = GEN6_GRDOM_RENDER,
> +		[BCS0]  = GEN6_GRDOM_BLT,
> +		[VCS0]  = GEN6_GRDOM_MEDIA,
> +		[VCS1]  = GEN8_GRDOM_MEDIA2,
> +		[VECS0] = GEN6_GRDOM_VECS,
>   	};
>   	u32 hw_mask;
>   
> @@ -312,8 +312,10 @@ static int gen6_reset_engines(struct drm_i915_private *i915,
>   		unsigned int tmp;
>   
>   		hw_mask = 0;
> -		for_each_engine_masked(engine, i915, engine_mask, tmp)
> +		for_each_engine_masked(engine, i915, engine_mask, tmp) {
> +			GEM_BUG_ON(engine->id >= ARRAY_SIZE(hw_engine_mask));
>   			hw_mask |= hw_engine_mask[engine->id];
> +		}
>   	}
>   
>   	return gen6_hw_domain_reset(i915, hw_mask);
> @@ -420,28 +422,27 @@ static int gen11_reset_engines(struct drm_i915_private *i915,
>   			       unsigned int engine_mask,
>   			       unsigned int retry)
>   {
> -	const u32 hw_engine_mask[I915_NUM_ENGINES] = {
> -		[RCS] = GEN11_GRDOM_RENDER,
> -		[BCS] = GEN11_GRDOM_BLT,
> -		[VCS] = GEN11_GRDOM_MEDIA,
> -		[VCS2] = GEN11_GRDOM_MEDIA2,
> -		[VCS3] = GEN11_GRDOM_MEDIA3,
> -		[VCS4] = GEN11_GRDOM_MEDIA4,
> -		[VECS] = GEN11_GRDOM_VECS,
> -		[VECS2] = GEN11_GRDOM_VECS2,
> +	const u32 hw_engine_mask[] = {
> +		[RCS0]  = GEN11_GRDOM_RENDER,
> +		[BCS0]  = GEN11_GRDOM_BLT,
> +		[VCS0]  = GEN11_GRDOM_MEDIA,
> +		[VCS1]  = GEN11_GRDOM_MEDIA2,
> +		[VCS2]  = GEN11_GRDOM_MEDIA3,
> +		[VCS3]  = GEN11_GRDOM_MEDIA4,
> +		[VECS0] = GEN11_GRDOM_VECS,
> +		[VECS1] = GEN11_GRDOM_VECS2,
>   	};
>   	struct intel_engine_cs *engine;
>   	unsigned int tmp;
>   	u32 hw_mask;
>   	int ret;
>   
> -	BUILD_BUG_ON(VECS2 + 1 != I915_NUM_ENGINES);
> -
>   	if (engine_mask == ALL_ENGINES) {
>   		hw_mask = GEN11_GRDOM_FULL;
>   	} else {
>   		hw_mask = 0;
>   		for_each_engine_masked(engine, i915, engine_mask, tmp) {
> +			GEM_BUG_ON(engine->id >= ARRAY_SIZE(hw_engine_mask));
>   			hw_mask |= hw_engine_mask[engine->id];
>   			hw_mask |= gen11_lock_sfc(i915, engine);
>   		}
> @@ -692,7 +693,7 @@ static int gt_reset(struct drm_i915_private *i915, unsigned int stalled_mask)
>   		return err;
>   
>   	for_each_engine(engine, i915, id)
> -		intel_engine_reset(engine, stalled_mask & ENGINE_MASK(id));
> +		intel_engine_reset(engine, stalled_mask & engine->mask);
>   
>   	i915_gem_restore_fences(i915);
>   
> @@ -1057,7 +1058,7 @@ void i915_reset(struct drm_i915_private *i915,
>   static inline int intel_gt_reset_engine(struct drm_i915_private *i915,
>   					struct intel_engine_cs *engine)
>   {
> -	return intel_gpu_reset(i915, intel_engine_flag(engine));
> +	return intel_gpu_reset(i915, engine->mask);
>   }
>   
>   /**
> @@ -1193,7 +1194,7 @@ void i915_clear_error_registers(struct drm_i915_private *dev_priv)
>   				   I915_READ(RING_FAULT_REG(engine)) &
>   				   ~RING_FAULT_VALID);
>   		}
> -		POSTING_READ(RING_FAULT_REG(dev_priv->engine[RCS]));
> +		POSTING_READ(RING_FAULT_REG(dev_priv->engine[RCS0]));
>   	}
>   }
>   
> @@ -1241,7 +1242,7 @@ void i915_handle_error(struct drm_i915_private *i915,
>   	 */
>   	wakeref = intel_runtime_pm_get(i915);
>   
> -	engine_mask &= INTEL_INFO(i915)->ring_mask;
> +	engine_mask &= INTEL_INFO(i915)->engine_mask;
>   
>   	if (flags & I915_ERROR_CAPTURE) {
>   		i915_capture_error_state(i915, engine_mask, msg);
> @@ -1260,7 +1261,7 @@ void i915_handle_error(struct drm_i915_private *i915,
>   				continue;
>   
>   			if (i915_reset_engine(engine, msg) == 0)
> -				engine_mask &= ~intel_engine_flag(engine);
> +				engine_mask &= ~engine->mask;
>   
>   			clear_bit(I915_RESET_ENGINE + engine->id,
>   				  &error->flags);
> diff --git a/drivers/gpu/drm/i915/intel_device_info.c b/drivers/gpu/drm/i915/intel_device_info.c
> index 855a5074ad77..2c1b46cfd6d3 100644
> --- a/drivers/gpu/drm/i915/intel_device_info.c
> +++ b/drivers/gpu/drm/i915/intel_device_info.c
> @@ -738,7 +738,7 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv)
>   		runtime->num_scalers[PIPE_C] = 1;
>   	}
>   
> -	BUILD_BUG_ON(I915_NUM_ENGINES > BITS_PER_TYPE(intel_ring_mask_t));
> +	BUILD_BUG_ON(BITS_PER_TYPE(intel_engine_mask_t) < I915_NUM_ENGINES);
>   
>   	if (IS_GEN(dev_priv, 11))
>   		for_each_pipe(dev_priv, pipe)
> @@ -887,7 +887,7 @@ void intel_device_info_init_mmio(struct drm_i915_private *dev_priv)
>   			continue;
>   
>   		if (!(BIT(i) & RUNTIME_INFO(dev_priv)->vdbox_enable)) {
> -			info->ring_mask &= ~ENGINE_MASK(_VCS(i));
> +			info->engine_mask &= ~BIT(_VCS(i));
>   			DRM_DEBUG_DRIVER("vcs%u fused off\n", i);
>   			continue;
>   		}
> @@ -906,7 +906,7 @@ void intel_device_info_init_mmio(struct drm_i915_private *dev_priv)
>   			continue;
>   
>   		if (!(BIT(i) & RUNTIME_INFO(dev_priv)->vebox_enable)) {
> -			info->ring_mask &= ~ENGINE_MASK(_VECS(i));
> +			info->engine_mask &= ~BIT(_VECS(i));
>   			DRM_DEBUG_DRIVER("vecs%u fused off\n", i);
>   		}
>   	}
> diff --git a/drivers/gpu/drm/i915/intel_device_info.h b/drivers/gpu/drm/i915/intel_device_info.h
> index e8b8661df746..047d10bdd455 100644
> --- a/drivers/gpu/drm/i915/intel_device_info.h
> +++ b/drivers/gpu/drm/i915/intel_device_info.h
> @@ -150,14 +150,14 @@ struct sseu_dev_info {
>   	u8 eu_mask[GEN_MAX_SLICES * GEN_MAX_SUBSLICES];
>   };
>   
> -typedef u8 intel_ring_mask_t;
> +typedef u8 intel_engine_mask_t;
>   
>   struct intel_device_info {
>   	u16 gen_mask;
>   
>   	u8 gen;
>   	u8 gt; /* GT number, 0 if undefined */
> -	intel_ring_mask_t ring_mask; /* Rings supported by the HW */
> +	intel_engine_mask_t engine_mask; /* Engines supported by the HW */
>   
>   	enum intel_platform platform;
>   	u32 platform_mask;
> @@ -200,7 +200,7 @@ struct intel_runtime_info {
>   	u8 num_sprites[I915_MAX_PIPES];
>   	u8 num_scalers[I915_MAX_PIPES];
>   
> -	u8 num_rings;
> +	u8 num_engines;
>   
>   	/* Slice/subslice/EU info */
>   	struct sseu_dev_info sseu;
> diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c b/drivers/gpu/drm/i915/intel_engine_cs.c
> index 4fc7e2ac6278..2f7b6c7aeb78 100644
> --- a/drivers/gpu/drm/i915/intel_engine_cs.c
> +++ b/drivers/gpu/drm/i915/intel_engine_cs.c
> @@ -95,8 +95,8 @@ struct engine_info {
>   };
>   
>   static const struct engine_info intel_engines[] = {
> -	[RCS] = {
> -		.hw_id = RCS_HW,
> +	[RCS0] = {
> +		.hw_id = RCS0_HW,
>   		.uabi_id = I915_EXEC_RENDER,
>   		.class = RENDER_CLASS,
>   		.instance = 0,
> @@ -104,8 +104,8 @@ static const struct engine_info intel_engines[] = {
>   			{ .gen = 1, .base = RENDER_RING_BASE }
>   		},
>   	},
> -	[BCS] = {
> -		.hw_id = BCS_HW,
> +	[BCS0] = {
> +		.hw_id = BCS0_HW,
>   		.uabi_id = I915_EXEC_BLT,
>   		.class = COPY_ENGINE_CLASS,
>   		.instance = 0,
> @@ -113,8 +113,8 @@ static const struct engine_info intel_engines[] = {
>   			{ .gen = 6, .base = BLT_RING_BASE }
>   		},
>   	},
> -	[VCS] = {
> -		.hw_id = VCS_HW,
> +	[VCS0] = {
> +		.hw_id = VCS0_HW,
>   		.uabi_id = I915_EXEC_BSD,
>   		.class = VIDEO_DECODE_CLASS,
>   		.instance = 0,
> @@ -124,8 +124,8 @@ static const struct engine_info intel_engines[] = {
>   			{ .gen = 4, .base = BSD_RING_BASE }
>   		},
>   	},
> -	[VCS2] = {
> -		.hw_id = VCS2_HW,
> +	[VCS1] = {
> +		.hw_id = VCS1_HW,
>   		.uabi_id = I915_EXEC_BSD,
>   		.class = VIDEO_DECODE_CLASS,
>   		.instance = 1,
> @@ -134,8 +134,8 @@ static const struct engine_info intel_engines[] = {
>   			{ .gen = 8, .base = GEN8_BSD2_RING_BASE }
>   		},
>   	},
> -	[VCS3] = {
> -		.hw_id = VCS3_HW,
> +	[VCS2] = {
> +		.hw_id = VCS2_HW,
>   		.uabi_id = I915_EXEC_BSD,
>   		.class = VIDEO_DECODE_CLASS,
>   		.instance = 2,
> @@ -143,8 +143,8 @@ static const struct engine_info intel_engines[] = {
>   			{ .gen = 11, .base = GEN11_BSD3_RING_BASE }
>   		},
>   	},
> -	[VCS4] = {
> -		.hw_id = VCS4_HW,
> +	[VCS3] = {
> +		.hw_id = VCS3_HW,
>   		.uabi_id = I915_EXEC_BSD,
>   		.class = VIDEO_DECODE_CLASS,
>   		.instance = 3,
> @@ -152,8 +152,8 @@ static const struct engine_info intel_engines[] = {
>   			{ .gen = 11, .base = GEN11_BSD4_RING_BASE }
>   		},
>   	},
> -	[VECS] = {
> -		.hw_id = VECS_HW,
> +	[VECS0] = {
> +		.hw_id = VECS0_HW,
>   		.uabi_id = I915_EXEC_VEBOX,
>   		.class = VIDEO_ENHANCEMENT_CLASS,
>   		.instance = 0,
> @@ -162,8 +162,8 @@ static const struct engine_info intel_engines[] = {
>   			{ .gen = 7, .base = VEBOX_RING_BASE }
>   		},
>   	},
> -	[VECS2] = {
> -		.hw_id = VECS2_HW,
> +	[VECS1] = {
> +		.hw_id = VECS1_HW,
>   		.uabi_id = I915_EXEC_VEBOX,
>   		.class = VIDEO_ENHANCEMENT_CLASS,
>   		.instance = 1,
> @@ -313,7 +313,10 @@ intel_engine_setup(struct drm_i915_private *dev_priv,
>   	if (!engine)
>   		return -ENOMEM;
>   
> +	BUILD_BUG_ON(BITS_PER_TYPE(engine->mask) < I915_NUM_ENGINES);
> +
>   	engine->id = id;
> +	engine->mask = BIT(id);
>   	engine->i915 = dev_priv;
>   	__sprint_engine_name(engine->name, info);
>   	engine->hw_id = engine->guc_id = info->hw_id;
> @@ -355,15 +358,15 @@ intel_engine_setup(struct drm_i915_private *dev_priv,
>   int intel_engines_init_mmio(struct drm_i915_private *dev_priv)
>   {
>   	struct intel_device_info *device_info = mkwrite_device_info(dev_priv);
> -	const unsigned int ring_mask = INTEL_INFO(dev_priv)->ring_mask;
> +	const unsigned int engine_mask = INTEL_INFO(dev_priv)->engine_mask;
>   	struct intel_engine_cs *engine;
>   	enum intel_engine_id id;
>   	unsigned int mask = 0;
>   	unsigned int i;
>   	int err;
>   
> -	WARN_ON(ring_mask == 0);
> -	WARN_ON(ring_mask &
> +	WARN_ON(engine_mask == 0);
> +	WARN_ON(engine_mask &
>   		GENMASK(BITS_PER_TYPE(mask) - 1, I915_NUM_ENGINES));
>   
>   	if (i915_inject_load_failure())
> @@ -377,7 +380,7 @@ int intel_engines_init_mmio(struct drm_i915_private *dev_priv)
>   		if (err)
>   			goto cleanup;
>   
> -		mask |= ENGINE_MASK(i);
> +		mask |= BIT(i);
>   	}
>   
>   	/*
> @@ -385,16 +388,16 @@ int intel_engines_init_mmio(struct drm_i915_private *dev_priv)
>   	 * are added to the driver by a warning and disabling the forgotten
>   	 * engines.
>   	 */
> -	if (WARN_ON(mask != ring_mask))
> -		device_info->ring_mask = mask;
> +	if (WARN_ON(mask != engine_mask))
> +		device_info->engine_mask = mask;
>   
>   	/* We always presume we have at least RCS available for later probing */
> -	if (WARN_ON(!HAS_ENGINE(dev_priv, RCS))) {
> +	if (WARN_ON(!HAS_ENGINE(dev_priv, RCS0))) {
>   		err = -ENODEV;
>   		goto cleanup;
>   	}
>   
> -	RUNTIME_INFO(dev_priv)->num_rings = hweight32(mask);
> +	RUNTIME_INFO(dev_priv)->num_engines = hweight32(mask);
>   
>   	i915_check_and_clear_faults(dev_priv);
>   
> @@ -964,7 +967,7 @@ void intel_engine_get_instdone(struct intel_engine_cs *engine,
>   	default:
>   		instdone->instdone = I915_READ(RING_INSTDONE(mmio_base));
>   
> -		if (engine->id != RCS)
> +		if (engine->id != RCS0)
>   			break;
>   
>   		instdone->slice_common = I915_READ(GEN7_SC_INSTDONE);
> @@ -980,7 +983,7 @@ void intel_engine_get_instdone(struct intel_engine_cs *engine,
>   	case 7:
>   		instdone->instdone = I915_READ(RING_INSTDONE(mmio_base));
>   
> -		if (engine->id != RCS)
> +		if (engine->id != RCS0)
>   			break;
>   
>   		instdone->slice_common = I915_READ(GEN7_SC_INSTDONE);
> @@ -993,7 +996,7 @@ void intel_engine_get_instdone(struct intel_engine_cs *engine,
>   	case 4:
>   		instdone->instdone = I915_READ(RING_INSTDONE(mmio_base));
>   
> -		if (engine->id == RCS)
> +		if (engine->id == RCS0)
>   			/* HACK: Using the wrong struct member */
>   			instdone->slice_common = I915_READ(GEN4_INSTDONE1);
>   		break;
> @@ -1365,7 +1368,7 @@ static void intel_engine_print_registers(const struct intel_engine_cs *engine,
>   		&engine->execlists;
>   	u64 addr;
>   
> -	if (engine->id == RCS && IS_GEN_RANGE(dev_priv, 4, 7))
> +	if (engine->id == RCS0 && IS_GEN_RANGE(dev_priv, 4, 7))
>   		drm_printf(m, "\tCCID: 0x%08x\n", I915_READ(CCID));
>   	drm_printf(m, "\tRING_START: 0x%08x\n",
>   		   I915_READ(RING_START(engine->mmio_base)));
> diff --git a/drivers/gpu/drm/i915/intel_guc_ads.c b/drivers/gpu/drm/i915/intel_guc_ads.c
> index f0db62887f50..c51d558fd431 100644
> --- a/drivers/gpu/drm/i915/intel_guc_ads.c
> +++ b/drivers/gpu/drm/i915/intel_guc_ads.c
> @@ -122,7 +122,7 @@ int intel_guc_ads_create(struct intel_guc *guc)
>   	 * because our GuC shared data is there.
>   	 */
>   	kernel_ctx_vma = to_intel_context(dev_priv->kernel_context,
> -					  dev_priv->engine[RCS])->state;
> +					  dev_priv->engine[RCS0])->state;
>   	blob->ads.golden_context_lrca =
>   		intel_guc_ggtt_offset(guc, kernel_ctx_vma) + skipped_offset;
>   
> diff --git a/drivers/gpu/drm/i915/intel_guc_submission.c b/drivers/gpu/drm/i915/intel_guc_submission.c
> index 56ba2fcbabe6..e3afc91f0e7b 100644
> --- a/drivers/gpu/drm/i915/intel_guc_submission.c
> +++ b/drivers/gpu/drm/i915/intel_guc_submission.c
> @@ -575,7 +575,7 @@ static void inject_preempt_context(struct work_struct *work)
>   		u32 *cs;
>   
>   		cs = ce->ring->vaddr;
> -		if (engine->id == RCS) {
> +		if (engine->class == RENDER_CLASS) {
>   			cs = gen8_emit_ggtt_write_rcs(cs,
>   						      GUC_PREEMPT_FINISHED,
>   						      addr,
> @@ -1030,7 +1030,7 @@ static int guc_clients_create(struct intel_guc *guc)
>   	GEM_BUG_ON(guc->preempt_client);
>   
>   	client = guc_client_alloc(dev_priv,
> -				  INTEL_INFO(dev_priv)->ring_mask,
> +				  INTEL_INFO(dev_priv)->engine_mask,
>   				  GUC_CLIENT_PRIORITY_KMD_NORMAL,
>   				  dev_priv->kernel_context);
>   	if (IS_ERR(client)) {
> @@ -1041,7 +1041,7 @@ static int guc_clients_create(struct intel_guc *guc)
>   
>   	if (dev_priv->preempt_context) {
>   		client = guc_client_alloc(dev_priv,
> -					  INTEL_INFO(dev_priv)->ring_mask,
> +					  INTEL_INFO(dev_priv)->engine_mask,
>   					  GUC_CLIENT_PRIORITY_KMD_HIGH,
>   					  dev_priv->preempt_context);
>   		if (IS_ERR(client)) {
> diff --git a/drivers/gpu/drm/i915/intel_hangcheck.c b/drivers/gpu/drm/i915/intel_hangcheck.c
> index f1d8dfc58049..57ed49dc19c4 100644
> --- a/drivers/gpu/drm/i915/intel_hangcheck.c
> +++ b/drivers/gpu/drm/i915/intel_hangcheck.c
> @@ -56,7 +56,7 @@ static bool subunits_stuck(struct intel_engine_cs *engine)
>   	int slice;
>   	int subslice;
>   
> -	if (engine->id != RCS)
> +	if (engine->id != RCS0)
>   		return true;
>   
>   	intel_engine_get_instdone(engine, &instdone);
> @@ -120,7 +120,7 @@ engine_stuck(struct intel_engine_cs *engine, u64 acthd)
>   	 */
>   	tmp = I915_READ_CTL(engine);
>   	if (tmp & RING_WAIT) {
> -		i915_handle_error(dev_priv, BIT(engine->id), 0,
> +		i915_handle_error(dev_priv, engine->mask, 0,
>   				  "stuck wait on %s", engine->name);
>   		I915_WRITE_CTL(engine, tmp);
>   		return ENGINE_WAIT_KICK;
> @@ -282,13 +282,13 @@ static void i915_hangcheck_elapsed(struct work_struct *work)
>   		hangcheck_store_sample(engine, &hc);
>   
>   		if (hc.stalled) {
> -			hung |= intel_engine_flag(engine);
> +			hung |= engine->mask;
>   			if (hc.action != ENGINE_DEAD)
> -				stuck |= intel_engine_flag(engine);
> +				stuck |= engine->mask;
>   		}
>   
>   		if (hc.wedged)
> -			wedged |= intel_engine_flag(engine);
> +			wedged |= engine->mask;
>   	}
>   
>   	if (GEM_SHOW_DEBUG() && (hung | stuck)) {
> diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
> index 578c8c98c718..6ec6c4e175a2 100644
> --- a/drivers/gpu/drm/i915/intel_lrc.c
> +++ b/drivers/gpu/drm/i915/intel_lrc.c
> @@ -1777,7 +1777,7 @@ static int intel_init_workaround_bb(struct intel_engine_cs *engine)
>   	unsigned int i;
>   	int ret;
>   
> -	if (GEM_DEBUG_WARN_ON(engine->id != RCS))
> +	if (GEM_DEBUG_WARN_ON(engine->id != RCS0))
>   		return -EINVAL;
>   
>   	switch (INTEL_GEN(engine->i915)) {
> @@ -2376,11 +2376,11 @@ logical_ring_default_irqs(struct intel_engine_cs *engine)
>   
>   	if (INTEL_GEN(engine->i915) < 11) {
>   		const u8 irq_shifts[] = {
> -			[RCS]  = GEN8_RCS_IRQ_SHIFT,
> -			[BCS]  = GEN8_BCS_IRQ_SHIFT,
> -			[VCS]  = GEN8_VCS1_IRQ_SHIFT,
> -			[VCS2] = GEN8_VCS2_IRQ_SHIFT,
> -			[VECS] = GEN8_VECS_IRQ_SHIFT,
> +			[RCS0]  = GEN8_RCS_IRQ_SHIFT,
> +			[BCS0]  = GEN8_BCS_IRQ_SHIFT,
> +			[VCS0]  = GEN8_VCS0_IRQ_SHIFT,
> +			[VCS1]  = GEN8_VCS1_IRQ_SHIFT,
> +			[VECS0] = GEN8_VECS_IRQ_SHIFT,
>   		};
>   
>   		shift = irq_shifts[engine->id];
> diff --git a/drivers/gpu/drm/i915/intel_mocs.c b/drivers/gpu/drm/i915/intel_mocs.c
> index 331e7a678fb7..80dcc08222d0 100644
> --- a/drivers/gpu/drm/i915/intel_mocs.c
> +++ b/drivers/gpu/drm/i915/intel_mocs.c
> @@ -288,17 +288,17 @@ static bool get_mocs_settings(struct drm_i915_private *dev_priv,
>   static i915_reg_t mocs_register(enum intel_engine_id engine_id, int index)
>   {
>   	switch (engine_id) {
> -	case RCS:
> +	case RCS0:
>   		return GEN9_GFX_MOCS(index);
> -	case VCS:
> +	case VCS0:
>   		return GEN9_MFX0_MOCS(index);
> -	case BCS:
> +	case BCS0:
>   		return GEN9_BLT_MOCS(index);
> -	case VECS:
> +	case VECS0:
>   		return GEN9_VEBOX_MOCS(index);
> -	case VCS2:
> +	case VCS1:
>   		return GEN9_MFX1_MOCS(index);
> -	case VCS3:
> +	case VCS2:
>   		return GEN11_MFX2_MOCS(index);
>   	default:
>   		MISSING_CASE(engine_id);
> diff --git a/drivers/gpu/drm/i915/intel_overlay.c b/drivers/gpu/drm/i915/intel_overlay.c
> index c0df1dbb0069..a882b8d42bd9 100644
> --- a/drivers/gpu/drm/i915/intel_overlay.c
> +++ b/drivers/gpu/drm/i915/intel_overlay.c
> @@ -236,7 +236,7 @@ static int intel_overlay_do_wait_request(struct intel_overlay *overlay,
>   static struct i915_request *alloc_request(struct intel_overlay *overlay)
>   {
>   	struct drm_i915_private *dev_priv = overlay->i915;
> -	struct intel_engine_cs *engine = dev_priv->engine[RCS];
> +	struct intel_engine_cs *engine = dev_priv->engine[RCS0];
>   
>   	return i915_request_alloc(engine, dev_priv->kernel_context);
>   }
> diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
> index 1b96b0960adc..1dd0c99b893f 100644
> --- a/drivers/gpu/drm/i915/intel_ringbuffer.c
> +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
> @@ -552,16 +552,17 @@ static void set_hwsp(struct intel_engine_cs *engine, u32 offset)
>   		 */
>   		default:
>   			GEM_BUG_ON(engine->id);
> -		case RCS:
> +			/* fallthrough */
> +		case RCS0:
>   			hwsp = RENDER_HWS_PGA_GEN7;
>   			break;
> -		case BCS:
> +		case BCS0:
>   			hwsp = BLT_HWS_PGA_GEN7;
>   			break;
> -		case VCS:
> +		case VCS0:
>   			hwsp = BSD_HWS_PGA_GEN7;
>   			break;
> -		case VECS:
> +		case VECS0:
>   			hwsp = VEBOX_HWS_PGA_GEN7;
>   			break;
>   		}
> @@ -1692,8 +1693,8 @@ static inline int mi_set_context(struct i915_request *rq, u32 flags)
>   	struct drm_i915_private *i915 = rq->i915;
>   	struct intel_engine_cs *engine = rq->engine;
>   	enum intel_engine_id id;
> -	const int num_rings =
> -		IS_HSW_GT1(i915) ? RUNTIME_INFO(i915)->num_rings - 1 : 0;
> +	const int num_engines =
> +		IS_HSW_GT1(i915) ? RUNTIME_INFO(i915)->num_engines - 1 : 0;
>   	bool force_restore = false;
>   	int len;
>   	u32 *cs;
> @@ -1707,7 +1708,7 @@ static inline int mi_set_context(struct i915_request *rq, u32 flags)
>   
>   	len = 4;
>   	if (IS_GEN(i915, 7))
> -		len += 2 + (num_rings ? 4*num_rings + 6 : 0);
> +		len += 2 + (num_engines ? 4 * num_engines + 6 : 0);
>   	if (flags & MI_FORCE_RESTORE) {
>   		GEM_BUG_ON(flags & MI_RESTORE_INHIBIT);
>   		flags &= ~MI_FORCE_RESTORE;
> @@ -1722,10 +1723,10 @@ static inline int mi_set_context(struct i915_request *rq, u32 flags)
>   	/* WaProgramMiArbOnOffAroundMiSetContext:ivb,vlv,hsw,bdw,chv */
>   	if (IS_GEN(i915, 7)) {
>   		*cs++ = MI_ARB_ON_OFF | MI_ARB_DISABLE;
> -		if (num_rings) {
> +		if (num_engines) {
>   			struct intel_engine_cs *signaller;
>   
> -			*cs++ = MI_LOAD_REGISTER_IMM(num_rings);
> +			*cs++ = MI_LOAD_REGISTER_IMM(num_engines);
>   			for_each_engine(signaller, i915, id) {
>   				if (signaller == engine)
>   					continue;
> @@ -1768,11 +1769,11 @@ static inline int mi_set_context(struct i915_request *rq, u32 flags)
>   	*cs++ = MI_NOOP;
>   
>   	if (IS_GEN(i915, 7)) {
> -		if (num_rings) {
> +		if (num_engines) {
>   			struct intel_engine_cs *signaller;
>   			i915_reg_t last_reg = {}; /* keep gcc quiet */
>   
> -			*cs++ = MI_LOAD_REGISTER_IMM(num_rings);
> +			*cs++ = MI_LOAD_REGISTER_IMM(num_engines);
>   			for_each_engine(signaller, i915, id) {
>   				if (signaller == engine)
>   					continue;
> @@ -1850,7 +1851,7 @@ static int switch_context(struct i915_request *rq)
>   		 * explanation.
>   		 */
>   		loops = 1;
> -		if (engine->id == BCS && IS_VALLEYVIEW(engine->i915))
> +		if (engine->id == BCS0 && IS_VALLEYVIEW(engine->i915))
>   			loops = 32;
>   
>   		do {
> @@ -1859,15 +1860,15 @@ static int switch_context(struct i915_request *rq)
>   				goto err;
>   		} while (--loops);
>   
> -		if (intel_engine_flag(engine) & ppgtt->pd_dirty_rings) {
> -			unwind_mm = intel_engine_flag(engine);
> -			ppgtt->pd_dirty_rings &= ~unwind_mm;
> +		if (ppgtt->pd_dirty_engines & engine->mask) {
> +			unwind_mm = engine->mask;
> +			ppgtt->pd_dirty_engines &= ~unwind_mm;
>   			hw_flags = MI_FORCE_RESTORE;
>   		}
>   	}
>   
>   	if (rq->hw_context->state) {
> -		GEM_BUG_ON(engine->id != RCS);
> +		GEM_BUG_ON(engine->id != RCS0);
>   
>   		/*
>   		 * The kernel context(s) is treated as pure scratch and is not
> @@ -1927,7 +1928,7 @@ static int switch_context(struct i915_request *rq)
>   
>   err_mm:
>   	if (unwind_mm)
> -		ppgtt->pd_dirty_rings |= unwind_mm;
> +		ppgtt->pd_dirty_engines |= unwind_mm;
>   err:
>   	return ret;
>   }
> diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h
> index 2e7264119ec4..ec968140b46f 100644
> --- a/drivers/gpu/drm/i915/intel_ringbuffer.h
> +++ b/drivers/gpu/drm/i915/intel_ringbuffer.h
> @@ -10,12 +10,12 @@
>   #include <linux/seqlock.h>
>   
>   #include "i915_gem_batch_pool.h"
> -
> -#include "i915_reg.h"
>   #include "i915_pmu.h"
> +#include "i915_reg.h"
>   #include "i915_request.h"
>   #include "i915_selftest.h"
>   #include "i915_timeline.h"
> +#include "intel_device_info.h"
>   #include "intel_gpu_commands.h"
>   #include "intel_workarounds.h"
>   
> @@ -175,16 +175,16 @@ struct i915_request;
>    * Keep instances of the same type engine together.
>    */
>   enum intel_engine_id {
> -	RCS = 0,
> -	BCS,
> -	VCS,
> +	RCS0 = 0,
> +	BCS0,
> +	VCS0,
> +	VCS1,
>   	VCS2,
>   	VCS3,
> -	VCS4,
> -#define _VCS(n) (VCS + (n))
> -	VECS,
> -	VECS2
> -#define _VECS(n) (VECS + (n))
> +#define _VCS(n) (VCS0 + (n))
> +	VECS0,
> +	VECS1
> +#define _VECS(n) (VECS0 + (n))
>   };
>   
>   struct st_preempt_hang {
> @@ -334,6 +334,7 @@ struct intel_engine_cs {
>   	enum intel_engine_id id;
>   	unsigned int hw_id;
>   	unsigned int guc_id;
> +	intel_engine_mask_t mask;
>   
>   	u8 uabi_id;
>   	u8 uabi_class;
> @@ -668,12 +669,6 @@ execlists_port_complete(struct intel_engine_execlists * const execlists,
>   	return port;
>   }
>   
> -static inline unsigned int
> -intel_engine_flag(const struct intel_engine_cs *engine)
> -{
> -	return BIT(engine->id);
> -}
> -
>   static inline u32
>   intel_read_status_page(const struct intel_engine_cs *engine, int reg)
>   {
> diff --git a/drivers/gpu/drm/i915/intel_workarounds.c b/drivers/gpu/drm/i915/intel_workarounds.c
> index 743cf5b00155..7bbc5849f111 100644
> --- a/drivers/gpu/drm/i915/intel_workarounds.c
> +++ b/drivers/gpu/drm/i915/intel_workarounds.c
> @@ -1059,7 +1059,7 @@ void intel_engine_init_whitelist(struct intel_engine_cs *engine)
>   	struct drm_i915_private *i915 = engine->i915;
>   	struct i915_wa_list *w = &engine->whitelist;
>   
> -	GEM_BUG_ON(engine->id != RCS);
> +	GEM_BUG_ON(engine->id != RCS0);
>   
>   	wa_init_start(w, "whitelist");
>   
> @@ -1236,7 +1236,7 @@ engine_init_workarounds(struct intel_engine_cs *engine, struct i915_wa_list *wal
>   	if (I915_SELFTEST_ONLY(INTEL_GEN(engine->i915) < 8))
>   		return;
>   
> -	if (engine->id == RCS)
> +	if (engine->id == RCS0)
>   		rcs_engine_wa_init(engine, wal);
>   	else
>   		xcs_engine_wa_init(engine, wal);
> diff --git a/drivers/gpu/drm/i915/selftests/huge_pages.c b/drivers/gpu/drm/i915/selftests/huge_pages.c
> index 4b9ded4ca0f5..1e66cff985f8 100644
> --- a/drivers/gpu/drm/i915/selftests/huge_pages.c
> +++ b/drivers/gpu/drm/i915/selftests/huge_pages.c
> @@ -1535,7 +1535,7 @@ static int igt_ppgtt_pin_update(void *arg)
>   	 * land in the now stale 2M page.
>   	 */
>   
> -	err = gpu_write(vma, ctx, dev_priv->engine[RCS], 0, 0xdeadbeaf);
> +	err = gpu_write(vma, ctx, dev_priv->engine[RCS0], 0, 0xdeadbeaf);
>   	if (err)
>   		goto out_unpin;
>   
> @@ -1653,7 +1653,7 @@ static int igt_shrink_thp(void *arg)
>   	if (err)
>   		goto out_unpin;
>   
> -	err = gpu_write(vma, ctx, i915->engine[RCS], 0, 0xdeadbeaf);
> +	err = gpu_write(vma, ctx, i915->engine[RCS0], 0, 0xdeadbeaf);
>   	if (err)
>   		goto out_unpin;
>   
> diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_coherency.c b/drivers/gpu/drm/i915/selftests/i915_gem_coherency.c
> index 9c16aff87028..e43630b40fce 100644
> --- a/drivers/gpu/drm/i915/selftests/i915_gem_coherency.c
> +++ b/drivers/gpu/drm/i915/selftests/i915_gem_coherency.c
> @@ -202,7 +202,7 @@ static int gpu_set(struct drm_i915_gem_object *obj,
>   	if (IS_ERR(vma))
>   		return PTR_ERR(vma);
>   
> -	rq = i915_request_alloc(i915->engine[RCS], i915->kernel_context);
> +	rq = i915_request_alloc(i915->engine[RCS0], i915->kernel_context);
>   	if (IS_ERR(rq)) {
>   		i915_vma_unpin(vma);
>   		return PTR_ERR(rq);
> @@ -256,7 +256,7 @@ static bool needs_mi_store_dword(struct drm_i915_private *i915)
>   	if (i915_terminally_wedged(i915))
>   		return false;
>   
> -	return intel_engine_can_store_dword(i915->engine[RCS]);
> +	return intel_engine_can_store_dword(i915->engine[RCS0]);
>   }
>   
>   static const struct igt_coherency_mode {
> diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_context.c b/drivers/gpu/drm/i915/selftests/i915_gem_context.c
> index 3a238b9628b3..30111c004eb6 100644
> --- a/drivers/gpu/drm/i915/selftests/i915_gem_context.c
> +++ b/drivers/gpu/drm/i915/selftests/i915_gem_context.c
> @@ -556,7 +556,7 @@ static int igt_ctx_exec(void *arg)
>   		ncontexts++;
>   	}
>   	pr_info("Submitted %lu contexts (across %u engines), filling %lu dwords\n",
> -		ncontexts, RUNTIME_INFO(i915)->num_rings, ndwords);
> +		ncontexts, RUNTIME_INFO(i915)->num_engines, ndwords);
>   
>   	dw = 0;
>   	list_for_each_entry(obj, &objects, st_link) {
> @@ -923,7 +923,7 @@ __igt_ctx_sseu(struct drm_i915_private *i915,
>   	       unsigned int flags)
>   {
>   	struct intel_sseu default_sseu = intel_device_default_sseu(i915);
> -	struct intel_engine_cs *engine = i915->engine[RCS];
> +	struct intel_engine_cs *engine = i915->engine[RCS0];
>   	struct drm_i915_gem_object *obj;
>   	struct i915_gem_context *ctx;
>   	struct intel_sseu pg_sseu;
> @@ -1126,7 +1126,7 @@ static int igt_ctx_readonly(void *arg)
>   		}
>   	}
>   	pr_info("Submitted %lu dwords (across %u engines)\n",
> -		ndwords, RUNTIME_INFO(i915)->num_rings);
> +		ndwords, RUNTIME_INFO(i915)->num_engines);
>   
>   	dw = 0;
>   	list_for_each_entry(obj, &objects, st_link) {
> @@ -1459,7 +1459,7 @@ static int igt_vm_isolation(void *arg)
>   		count += this;
>   	}
>   	pr_info("Checked %lu scratch offsets across %d engines\n",
> -		count, RUNTIME_INFO(i915)->num_rings);
> +		count, RUNTIME_INFO(i915)->num_engines);
>   
>   out_rpm:
>   	intel_runtime_pm_put(i915, wakeref);
> diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_object.c b/drivers/gpu/drm/i915/selftests/i915_gem_object.c
> index 784982aed625..971148fbe6f5 100644
> --- a/drivers/gpu/drm/i915/selftests/i915_gem_object.c
> +++ b/drivers/gpu/drm/i915/selftests/i915_gem_object.c
> @@ -468,7 +468,7 @@ static int make_obj_busy(struct drm_i915_gem_object *obj)
>   	if (err)
>   		return err;
>   
> -	rq = i915_request_alloc(i915->engine[RCS], i915->kernel_context);
> +	rq = i915_request_alloc(i915->engine[RCS0], i915->kernel_context);
>   	if (IS_ERR(rq)) {
>   		i915_vma_unpin(vma);
>   		return PTR_ERR(rq);
> diff --git a/drivers/gpu/drm/i915/selftests/i915_request.c b/drivers/gpu/drm/i915/selftests/i915_request.c
> index 7e1b65b8eb19..3eb6a6b075ab 100644
> --- a/drivers/gpu/drm/i915/selftests/i915_request.c
> +++ b/drivers/gpu/drm/i915/selftests/i915_request.c
> @@ -42,7 +42,7 @@ static int igt_add_request(void *arg)
>   	/* Basic preliminary test to create a request and let it loose! */
>   
>   	mutex_lock(&i915->drm.struct_mutex);
> -	request = mock_request(i915->engine[RCS],
> +	request = mock_request(i915->engine[RCS0],
>   			       i915->kernel_context,
>   			       HZ / 10);
>   	if (!request)
> @@ -66,7 +66,7 @@ static int igt_wait_request(void *arg)
>   	/* Submit a request, then wait upon it */
>   
>   	mutex_lock(&i915->drm.struct_mutex);
> -	request = mock_request(i915->engine[RCS], i915->kernel_context, T);
> +	request = mock_request(i915->engine[RCS0], i915->kernel_context, T);
>   	if (!request) {
>   		err = -ENOMEM;
>   		goto out_unlock;
> @@ -136,7 +136,7 @@ static int igt_fence_wait(void *arg)
>   	/* Submit a request, treat it as a fence and wait upon it */
>   
>   	mutex_lock(&i915->drm.struct_mutex);
> -	request = mock_request(i915->engine[RCS], i915->kernel_context, T);
> +	request = mock_request(i915->engine[RCS0], i915->kernel_context, T);
>   	if (!request) {
>   		err = -ENOMEM;
>   		goto out_locked;
> @@ -193,7 +193,7 @@ static int igt_request_rewind(void *arg)
>   
>   	mutex_lock(&i915->drm.struct_mutex);
>   	ctx[0] = mock_context(i915, "A");
> -	request = mock_request(i915->engine[RCS], ctx[0], 2 * HZ);
> +	request = mock_request(i915->engine[RCS0], ctx[0], 2 * HZ);
>   	if (!request) {
>   		err = -ENOMEM;
>   		goto err_context_0;
> @@ -203,7 +203,7 @@ static int igt_request_rewind(void *arg)
>   	i915_request_add(request);
>   
>   	ctx[1] = mock_context(i915, "B");
> -	vip = mock_request(i915->engine[RCS], ctx[1], 0);
> +	vip = mock_request(i915->engine[RCS0], ctx[1], 0);
>   	if (!vip) {
>   		err = -ENOMEM;
>   		goto err_context_1;
> @@ -415,7 +415,7 @@ static int mock_breadcrumbs_smoketest(void *arg)
>   {
>   	struct drm_i915_private *i915 = arg;
>   	struct smoketest t = {
> -		.engine = i915->engine[RCS],
> +		.engine = i915->engine[RCS0],
>   		.ncontexts = 1024,
>   		.max_batch = 1024,
>   		.request_alloc = __mock_request_alloc
> @@ -1216,7 +1216,7 @@ static int live_breadcrumbs_smoketest(void *arg)
>   		num_fences += atomic_long_read(&t[id].num_fences);
>   	}
>   	pr_info("Completed %lu waits for %lu fences across %d engines and %d cpus\n",
> -		num_waits, num_fences, RUNTIME_INFO(i915)->num_rings, ncpus);
> +		num_waits, num_fences, RUNTIME_INFO(i915)->num_engines, ncpus);
>   
>   	mutex_lock(&i915->drm.struct_mutex);
>   	ret = igt_live_test_end(&live) ?: ret;
> diff --git a/drivers/gpu/drm/i915/selftests/intel_guc.c b/drivers/gpu/drm/i915/selftests/intel_guc.c
> index c5e0a0e98fcb..b05a21eaa8f4 100644
> --- a/drivers/gpu/drm/i915/selftests/intel_guc.c
> +++ b/drivers/gpu/drm/i915/selftests/intel_guc.c
> @@ -111,7 +111,7 @@ static int validate_client(struct intel_guc_client *client,
>   			dev_priv->preempt_context : dev_priv->kernel_context;
>   
>   	if (client->owner != ctx_owner ||
> -	    client->engines != INTEL_INFO(dev_priv)->ring_mask ||
> +	    client->engines != INTEL_INFO(dev_priv)->engine_mask ||
>   	    client->priority != client_priority ||
>   	    client->doorbell_id == GUC_DOORBELL_INVALID)
>   		return -EINVAL;
> @@ -261,7 +261,7 @@ static int igt_guc_doorbells(void *arg)
>   
>   	for (i = 0; i < ATTEMPTS; i++) {
>   		clients[i] = guc_client_alloc(dev_priv,
> -					      INTEL_INFO(dev_priv)->ring_mask,
> +					      INTEL_INFO(dev_priv)->engine_mask,
>   					      i % GUC_CLIENT_PRIORITY_NUM,
>   					      dev_priv->kernel_context);
>   
> diff --git a/drivers/gpu/drm/i915/selftests/intel_hangcheck.c b/drivers/gpu/drm/i915/selftests/intel_hangcheck.c
> index 12e047328ab8..10658ad05305 100644
> --- a/drivers/gpu/drm/i915/selftests/intel_hangcheck.c
> +++ b/drivers/gpu/drm/i915/selftests/intel_hangcheck.c
> @@ -1126,7 +1126,7 @@ static int igt_reset_wait(void *arg)
>   	long timeout;
>   	int err;
>   
> -	if (!intel_engine_can_store_dword(i915->engine[RCS]))
> +	if (!intel_engine_can_store_dword(i915->engine[RCS0]))
>   		return 0;
>   
>   	/* Check that we detect a stuck waiter and issue a reset */
> @@ -1138,7 +1138,7 @@ static int igt_reset_wait(void *arg)
>   	if (err)
>   		goto unlock;
>   
> -	rq = hang_create_request(&h, i915->engine[RCS]);
> +	rq = hang_create_request(&h, i915->engine[RCS0]);
>   	if (IS_ERR(rq)) {
>   		err = PTR_ERR(rq);
>   		goto fini;
> @@ -1255,7 +1255,7 @@ static int __igt_reset_evict_vma(struct drm_i915_private *i915,
>   	struct hang h;
>   	int err;
>   
> -	if (!intel_engine_can_store_dword(i915->engine[RCS]))
> +	if (!intel_engine_can_store_dword(i915->engine[RCS0]))
>   		return 0;
>   
>   	/* Check that we can recover an unbind stuck on a hanging request */
> @@ -1285,7 +1285,7 @@ static int __igt_reset_evict_vma(struct drm_i915_private *i915,
>   		goto out_obj;
>   	}
>   
> -	rq = hang_create_request(&h, i915->engine[RCS]);
> +	rq = hang_create_request(&h, i915->engine[RCS0]);
>   	if (IS_ERR(rq)) {
>   		err = PTR_ERR(rq);
>   		goto out_obj;
> @@ -1358,7 +1358,7 @@ static int __igt_reset_evict_vma(struct drm_i915_private *i915,
>   
>   out_reset:
>   	igt_global_reset_lock(i915);
> -	fake_hangcheck(rq->i915, intel_engine_flag(rq->engine));
> +	fake_hangcheck(rq->i915, rq->engine->mask);
>   	igt_global_reset_unlock(i915);
>   
>   	if (tsk) {
> @@ -1537,7 +1537,7 @@ static int igt_reset_queue(void *arg)
>   				goto fini;
>   			}
>   
> -			reset_count = fake_hangcheck(i915, ENGINE_MASK(id));
> +			reset_count = fake_hangcheck(i915, BIT(id));
>   
>   			if (prev->fence.error != -EIO) {
>   				pr_err("GPU reset not recorded on hanging request [fence.error=%d]!\n",
> @@ -1596,7 +1596,7 @@ static int igt_reset_queue(void *arg)
>   static int igt_handle_error(void *arg)
>   {
>   	struct drm_i915_private *i915 = arg;
> -	struct intel_engine_cs *engine = i915->engine[RCS];
> +	struct intel_engine_cs *engine = i915->engine[RCS0];
>   	struct hang h;
>   	struct i915_request *rq;
>   	struct i915_gpu_state *error;
> @@ -1643,7 +1643,7 @@ static int igt_handle_error(void *arg)
>   	/* Temporarily disable error capture */
>   	error = xchg(&i915->gpu_error.first_error, (void *)-1);
>   
> -	i915_handle_error(i915, ENGINE_MASK(engine->id), 0, NULL);
> +	i915_handle_error(i915, engine->mask, 0, NULL);
>   
>   	xchg(&i915->gpu_error.first_error, error);
>   
> diff --git a/drivers/gpu/drm/i915/selftests/intel_lrc.c b/drivers/gpu/drm/i915/selftests/intel_lrc.c
> index 0677038a5466..565e949a4722 100644
> --- a/drivers/gpu/drm/i915/selftests/intel_lrc.c
> +++ b/drivers/gpu/drm/i915/selftests/intel_lrc.c
> @@ -929,7 +929,7 @@ 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_rings, smoke->ncontext);
> +		RUNTIME_INFO(smoke->i915)->num_engines, smoke->ncontext);
>   	return 0;
>   }
>   
> @@ -957,7 +957,7 @@ static int smoke_random(struct preempt_smoke *smoke, unsigned int flags)
>   
>   	pr_info("Submitted %lu random:%x requests across %d engines and %d contexts\n",
>   		count, flags,
> -		RUNTIME_INFO(smoke->i915)->num_rings, smoke->ncontext);
> +		RUNTIME_INFO(smoke->i915)->num_engines, smoke->ncontext);
>   	return 0;
>   }
>   
> diff --git a/drivers/gpu/drm/i915/selftests/intel_workarounds.c b/drivers/gpu/drm/i915/selftests/intel_workarounds.c
> index 9f12a0ec804b..f2a2b51a4662 100644
> --- a/drivers/gpu/drm/i915/selftests/intel_workarounds.c
> +++ b/drivers/gpu/drm/i915/selftests/intel_workarounds.c
> @@ -222,7 +222,7 @@ static int check_whitelist(struct i915_gem_context *ctx,
>   
>   static int do_device_reset(struct intel_engine_cs *engine)
>   {
> -	i915_reset(engine->i915, ENGINE_MASK(engine->id), "live_workarounds");
> +	i915_reset(engine->i915, engine->mask, "live_workarounds");
>   	return 0;
>   }
>   
> @@ -709,7 +709,7 @@ static int live_dirty_whitelist(void *arg)
>   static int live_reset_whitelist(void *arg)
>   {
>   	struct drm_i915_private *i915 = arg;
> -	struct intel_engine_cs *engine = i915->engine[RCS];
> +	struct intel_engine_cs *engine = i915->engine[RCS0];
>   	int err = 0;
>   
>   	/* If we reset the gpu, we should not lose the RING_NONPRIV */
> diff --git a/drivers/gpu/drm/i915/selftests/mock_engine.c b/drivers/gpu/drm/i915/selftests/mock_engine.c
> index ec1ae948954c..c2c954f64226 100644
> --- a/drivers/gpu/drm/i915/selftests/mock_engine.c
> +++ b/drivers/gpu/drm/i915/selftests/mock_engine.c
> @@ -223,6 +223,7 @@ struct intel_engine_cs *mock_engine(struct drm_i915_private *i915,
>   	engine->base.i915 = i915;
>   	snprintf(engine->base.name, sizeof(engine->base.name), "%s", name);
>   	engine->base.id = id;
> +	engine->base.mask = BIT(id);
>   	engine->base.status_page.addr = (void *)(engine + 1);
>   
>   	engine->base.context_pin = mock_context_pin;
> diff --git a/drivers/gpu/drm/i915/selftests/mock_gem_device.c b/drivers/gpu/drm/i915/selftests/mock_gem_device.c
> index c27616efc4f8..b2c7808e0595 100644
> --- a/drivers/gpu/drm/i915/selftests/mock_gem_device.c
> +++ b/drivers/gpu/drm/i915/selftests/mock_gem_device.c
> @@ -206,13 +206,13 @@ struct drm_i915_private *mock_gem_device(void)
>   
>   	mock_init_ggtt(i915, &i915->ggtt);
>   
> -	mkwrite_device_info(i915)->ring_mask = BIT(0);
> +	mkwrite_device_info(i915)->engine_mask = BIT(0);
>   	i915->kernel_context = mock_context(i915, NULL);
>   	if (!i915->kernel_context)
>   		goto err_unlock;
>   
> -	i915->engine[RCS] = mock_engine(i915, "mock", RCS);
> -	if (!i915->engine[RCS])
> +	i915->engine[RCS0] = mock_engine(i915, "mock", RCS0);
> +	if (!i915->engine[RCS0])
>   		goto err_context;
>   
>   	mutex_unlock(&i915->drm.struct_mutex);
> 

I wasn't suggesting renaming the engine id enums, but on the other hand 
it is nicer to have VCS0, VCS1,.. instead of VCS, VCS2, VCS3,...

So ack from me. And since I read it all almost r-b if not the unrelated 
error state hunk and more importantly reservations about bit definition 
names from i915_reg.h.

Regards,

Tvrtko
Chris Wilson March 5, 2019, 2:59 p.m. UTC | #2
Quoting Tvrtko Ursulin (2019-03-05 14:44:04)
> 
> On 02/03/2019 10:06, Chris Wilson wrote:
> > In the next patch, we are introducing a broad virtual engine to encompass
> > multiple physical engines, losing the 1:1 nature of BIT(engine->id). To
> > reflect the broader set of engines implied by the virtual instance, lets
> > store the full bitmask.
> > 
> > v2: Use intel_engine_mask_t (s/ring_mask/engine_mask/)
> > v3: Tvrtko voted for moah churn so teach everyone to not mention ring
> > and use $class$instance throughout.
> > 
> > Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> > Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> > ---
> > -static void gen6_record_semaphore_state(struct intel_engine_cs *engine,
> > -                                     struct drm_i915_error_engine *ee)
> > -{
> > -     struct drm_i915_private *dev_priv = engine->i915;
> > -
> > -     ee->semaphore_mboxes[0] = I915_READ(RING_SYNC_0(engine->mmio_base));
> > -     ee->semaphore_mboxes[1] = I915_READ(RING_SYNC_1(engine->mmio_base));
> > -     if (HAS_VEBOX(dev_priv))
> > -             ee->semaphore_mboxes[2] =
> > -                     I915_READ(RING_SYNC_2(engine->mmio_base));
> > -}
> > -
> >   static void error_record_engine_registers(struct i915_gpu_state *error,
> >                                         struct intel_engine_cs *engine,
> >                                         struct drm_i915_error_engine *ee)
> > @@ -1161,7 +1142,6 @@ static void error_record_engine_registers(struct i915_gpu_state *error,
> >               if (INTEL_GEN(dev_priv) >= 8) {
> >                       ee->fault_reg = I915_READ(GEN8_RING_FAULT_REG);
> >               } else {
> > -                     gen6_record_semaphore_state(engine, ee);
> 
> Wrong patch?

There wasn't much point updating these as they are defunct, so I removed
them instead.

> >   /* Engine class */
> >   
> > @@ -7250,8 +7250,8 @@ enum {
> >   #define  GEN8_GT_VECS_IRQ           (1 << 6)
> >   #define  GEN8_GT_GUC_IRQ            (1 << 5)
> >   #define  GEN8_GT_PM_IRQ                     (1 << 4)
> > -#define  GEN8_GT_VCS2_IRQ            (1 << 3)
> > -#define  GEN8_GT_VCS1_IRQ            (1 << 2)
> > +#define  GEN8_GT_VCS1_IRQ            (1 << 3)
> > +#define  GEN8_GT_VCS0_IRQ            (1 << 2)
> 
> BSpec uses index 1. :( So I think best to leave these alone.

That does get confusing. So we either have confusing code
with VCS1 -> VCS0 and VCS2 -> VCS1, or just live with the difference
with bspec. Code wins (because I read that more often), but we can
comment that "old" bspec refers to these as 1-indexed?

[snip]

> I wasn't suggesting renaming the engine id enums, but on the other hand 
> it is nicer to have VCS0, VCS1,.. instead of VCS, VCS2, VCS3,...
> 
> So ack from me. And since I read it all almost r-b if not the unrelated 
> error state hunk and more importantly reservations about bit definition 
> names from i915_reg.h.

I'll go drop another couple of patches for the grumbles.
-Chris
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/gvt/cmd_parser.c b/drivers/gpu/drm/i915/gvt/cmd_parser.c
index 35b4ec3f7618..cf4a1ecf6853 100644
--- a/drivers/gpu/drm/i915/gvt/cmd_parser.c
+++ b/drivers/gpu/drm/i915/gvt/cmd_parser.c
@@ -391,12 +391,12 @@  struct cmd_info {
 #define F_POST_HANDLE	(1<<2)
 	u32 flag;
 
-#define R_RCS	(1 << RCS)
-#define R_VCS1  (1 << VCS)
-#define R_VCS2  (1 << VCS2)
+#define R_RCS	BIT(RCS0)
+#define R_VCS1  BIT(VCS0)
+#define R_VCS2  BIT(VCS1)
 #define R_VCS	(R_VCS1 | R_VCS2)
-#define R_BCS	(1 << BCS)
-#define R_VECS	(1 << VECS)
+#define R_BCS	BIT(BCS0)
+#define R_VECS	BIT(VECS0)
 #define R_ALL (R_RCS | R_VCS | R_BCS | R_VECS)
 	/* rings that support this cmd: BLT/RCS/VCS/VECS */
 	u16 rings;
@@ -558,7 +558,7 @@  static const struct decode_info decode_info_vebox = {
 };
 
 static const struct decode_info *ring_decode_info[I915_NUM_ENGINES][8] = {
-	[RCS] = {
+	[RCS0] = {
 		&decode_info_mi,
 		NULL,
 		NULL,
@@ -569,7 +569,7 @@  static const struct decode_info *ring_decode_info[I915_NUM_ENGINES][8] = {
 		NULL,
 	},
 
-	[VCS] = {
+	[VCS0] = {
 		&decode_info_mi,
 		NULL,
 		NULL,
@@ -580,7 +580,7 @@  static const struct decode_info *ring_decode_info[I915_NUM_ENGINES][8] = {
 		NULL,
 	},
 
-	[BCS] = {
+	[BCS0] = {
 		&decode_info_mi,
 		NULL,
 		&decode_info_2d,
@@ -591,7 +591,7 @@  static const struct decode_info *ring_decode_info[I915_NUM_ENGINES][8] = {
 		NULL,
 	},
 
-	[VECS] = {
+	[VECS0] = {
 		&decode_info_mi,
 		NULL,
 		NULL,
@@ -602,7 +602,7 @@  static const struct decode_info *ring_decode_info[I915_NUM_ENGINES][8] = {
 		NULL,
 	},
 
-	[VCS2] = {
+	[VCS1] = {
 		&decode_info_mi,
 		NULL,
 		NULL,
@@ -631,8 +631,7 @@  static inline const struct cmd_info *find_cmd_entry(struct intel_gvt *gvt,
 	struct cmd_entry *e;
 
 	hash_for_each_possible(gvt->cmd_table, e, hlist, opcode) {
-		if ((opcode == e->info->opcode) &&
-				(e->info->rings & (1 << ring_id)))
+		if (opcode == e->info->opcode && e->info->rings & BIT(ring_id))
 			return e->info;
 	}
 	return NULL;
@@ -943,15 +942,12 @@  static int cmd_handler_lri(struct parser_exec_state *s)
 	struct intel_gvt *gvt = s->vgpu->gvt;
 
 	for (i = 1; i < cmd_len; i += 2) {
-		if (IS_BROADWELL(gvt->dev_priv) &&
-				(s->ring_id != RCS)) {
-			if (s->ring_id == BCS &&
-					cmd_reg(s, i) ==
-					i915_mmio_reg_offset(DERRMR))
+		if (IS_BROADWELL(gvt->dev_priv) && s->ring_id != RCS0) {
+			if (s->ring_id == BCS0 &&
+			    cmd_reg(s, i) == i915_mmio_reg_offset(DERRMR))
 				ret |= 0;
 			else
-				ret |= (cmd_reg_inhibit(s, i)) ?
-					-EBADRQC : 0;
+				ret |= cmd_reg_inhibit(s, i) ? -EBADRQC : 0;
 		}
 		if (ret)
 			break;
@@ -1047,27 +1043,27 @@  struct cmd_interrupt_event {
 };
 
 static struct cmd_interrupt_event cmd_interrupt_events[] = {
-	[RCS] = {
+	[RCS0] = {
 		.pipe_control_notify = RCS_PIPE_CONTROL,
 		.mi_flush_dw = INTEL_GVT_EVENT_RESERVED,
 		.mi_user_interrupt = RCS_MI_USER_INTERRUPT,
 	},
-	[BCS] = {
+	[BCS0] = {
 		.pipe_control_notify = INTEL_GVT_EVENT_RESERVED,
 		.mi_flush_dw = BCS_MI_FLUSH_DW,
 		.mi_user_interrupt = BCS_MI_USER_INTERRUPT,
 	},
-	[VCS] = {
+	[VCS0] = {
 		.pipe_control_notify = INTEL_GVT_EVENT_RESERVED,
 		.mi_flush_dw = VCS_MI_FLUSH_DW,
 		.mi_user_interrupt = VCS_MI_USER_INTERRUPT,
 	},
-	[VCS2] = {
+	[VCS1] = {
 		.pipe_control_notify = INTEL_GVT_EVENT_RESERVED,
 		.mi_flush_dw = VCS2_MI_FLUSH_DW,
 		.mi_user_interrupt = VCS2_MI_USER_INTERRUPT,
 	},
-	[VECS] = {
+	[VECS0] = {
 		.pipe_control_notify = INTEL_GVT_EVENT_RESERVED,
 		.mi_flush_dw = VECS_MI_FLUSH_DW,
 		.mi_user_interrupt = VECS_MI_USER_INTERRUPT,
diff --git a/drivers/gpu/drm/i915/gvt/execlist.c b/drivers/gpu/drm/i915/gvt/execlist.c
index 70494e394d2c..1a93472cb34e 100644
--- a/drivers/gpu/drm/i915/gvt/execlist.c
+++ b/drivers/gpu/drm/i915/gvt/execlist.c
@@ -47,17 +47,16 @@ 
 		((a)->lrca == (b)->lrca))
 
 static int context_switch_events[] = {
-	[RCS] = RCS_AS_CONTEXT_SWITCH,
-	[BCS] = BCS_AS_CONTEXT_SWITCH,
-	[VCS] = VCS_AS_CONTEXT_SWITCH,
-	[VCS2] = VCS2_AS_CONTEXT_SWITCH,
-	[VECS] = VECS_AS_CONTEXT_SWITCH,
+	[RCS0]  = RCS_AS_CONTEXT_SWITCH,
+	[BCS0]  = BCS_AS_CONTEXT_SWITCH,
+	[VCS0]  = VCS_AS_CONTEXT_SWITCH,
+	[VCS1]  = VCS2_AS_CONTEXT_SWITCH,
+	[VECS0] = VECS_AS_CONTEXT_SWITCH,
 };
 
-static int ring_id_to_context_switch_event(int ring_id)
+static int ring_id_to_context_switch_event(unsigned int ring_id)
 {
-	if (WARN_ON(ring_id < RCS ||
-		    ring_id >= ARRAY_SIZE(context_switch_events)))
+	if (WARN_ON(ring_id >= ARRAY_SIZE(context_switch_events)))
 		return -EINVAL;
 
 	return context_switch_events[ring_id];
@@ -411,7 +410,7 @@  static int complete_execlist_workload(struct intel_vgpu_workload *workload)
 	gvt_dbg_el("complete workload %p status %d\n", workload,
 			workload->status);
 
-	if (workload->status || (vgpu->resetting_eng & ENGINE_MASK(ring_id)))
+	if (workload->status || (vgpu->resetting_eng & BIT(ring_id)))
 		goto out;
 
 	if (!list_empty(workload_q_head(vgpu, ring_id))) {
diff --git a/drivers/gpu/drm/i915/gvt/handlers.c b/drivers/gpu/drm/i915/gvt/handlers.c
index bc64b810e0d5..b596cb42e24e 100644
--- a/drivers/gpu/drm/i915/gvt/handlers.c
+++ b/drivers/gpu/drm/i915/gvt/handlers.c
@@ -323,25 +323,25 @@  static int gdrst_mmio_write(struct intel_vgpu *vgpu, unsigned int offset,
 	} else {
 		if (data & GEN6_GRDOM_RENDER) {
 			gvt_dbg_mmio("vgpu%d: request RCS reset\n", vgpu->id);
-			engine_mask |= (1 << RCS);
+			engine_mask |= BIT(RCS0);
 		}
 		if (data & GEN6_GRDOM_MEDIA) {
 			gvt_dbg_mmio("vgpu%d: request VCS reset\n", vgpu->id);
-			engine_mask |= (1 << VCS);
+			engine_mask |= BIT(VCS0);
 		}
 		if (data & GEN6_GRDOM_BLT) {
 			gvt_dbg_mmio("vgpu%d: request BCS Reset\n", vgpu->id);
-			engine_mask |= (1 << BCS);
+			engine_mask |= BIT(BCS0);
 		}
 		if (data & GEN6_GRDOM_VECS) {
 			gvt_dbg_mmio("vgpu%d: request VECS Reset\n", vgpu->id);
-			engine_mask |= (1 << VECS);
+			engine_mask |= BIT(VECS0);
 		}
 		if (data & GEN8_GRDOM_MEDIA2) {
 			gvt_dbg_mmio("vgpu%d: request VCS2 Reset\n", vgpu->id);
-			if (HAS_BSD2(vgpu->gvt->dev_priv))
-				engine_mask |= (1 << VCS2);
+			engine_mask |= BIT(VCS1);
 		}
+		engine_mask &= INTEL_INFO(vgpu->gvt->dev_priv)->engine_mask;
 	}
 
 	/* vgpu_lock already hold by emulate mmio r/w */
@@ -1704,7 +1704,7 @@  static int ring_mode_mmio_write(struct intel_vgpu *vgpu, unsigned int offset,
 			return 0;
 
 		ret = intel_vgpu_select_submission_ops(vgpu,
-			       ENGINE_MASK(ring_id),
+			       BIT(ring_id),
 			       INTEL_VGPU_EXECLIST_SUBMISSION);
 		if (ret)
 			return ret;
@@ -1724,19 +1724,19 @@  static int gvt_reg_tlb_control_handler(struct intel_vgpu *vgpu,
 
 	switch (offset) {
 	case 0x4260:
-		id = RCS;
+		id = RCS0;
 		break;
 	case 0x4264:
-		id = VCS;
+		id = VCS0;
 		break;
 	case 0x4268:
-		id = VCS2;
+		id = VCS1;
 		break;
 	case 0x426c:
-		id = BCS;
+		id = BCS0;
 		break;
 	case 0x4270:
-		id = VECS;
+		id = VECS0;
 		break;
 	default:
 		return -EINVAL;
@@ -1793,7 +1793,7 @@  static int ring_reset_ctl_write(struct intel_vgpu *vgpu,
 	MMIO_F(prefix(BLT_RING_BASE), s, f, am, rm, d, r, w); \
 	MMIO_F(prefix(GEN6_BSD_RING_BASE), s, f, am, rm, d, r, w); \
 	MMIO_F(prefix(VEBOX_RING_BASE), s, f, am, rm, d, r, w); \
-	if (HAS_BSD2(dev_priv)) \
+	if (HAS_ENGINE(dev_priv, VCS1)) \
 		MMIO_F(prefix(GEN8_BSD2_RING_BASE), s, f, am, rm, d, r, w); \
 } while (0)
 
diff --git a/drivers/gpu/drm/i915/gvt/interrupt.c b/drivers/gpu/drm/i915/gvt/interrupt.c
index 67125c5eec6e..951681813230 100644
--- a/drivers/gpu/drm/i915/gvt/interrupt.c
+++ b/drivers/gpu/drm/i915/gvt/interrupt.c
@@ -536,7 +536,7 @@  static void gen8_init_irq(
 	SET_BIT_INFO(irq, 4, VCS_MI_FLUSH_DW, INTEL_GVT_IRQ_INFO_GT1);
 	SET_BIT_INFO(irq, 8, VCS_AS_CONTEXT_SWITCH, INTEL_GVT_IRQ_INFO_GT1);
 
-	if (HAS_BSD2(gvt->dev_priv)) {
+	if (HAS_ENGINE(gvt->dev_priv, VCS1)) {
 		SET_BIT_INFO(irq, 16, VCS2_MI_USER_INTERRUPT,
 			INTEL_GVT_IRQ_INFO_GT1);
 		SET_BIT_INFO(irq, 20, VCS2_MI_FLUSH_DW,
diff --git a/drivers/gpu/drm/i915/gvt/mmio_context.c b/drivers/gpu/drm/i915/gvt/mmio_context.c
index 7d84cfb9051a..0209d27fcaf0 100644
--- a/drivers/gpu/drm/i915/gvt/mmio_context.c
+++ b/drivers/gpu/drm/i915/gvt/mmio_context.c
@@ -41,102 +41,102 @@ 
 
 /* Raw offset is appened to each line for convenience. */
 static struct engine_mmio gen8_engine_mmio_list[] __cacheline_aligned = {
-	{RCS, GFX_MODE_GEN7, 0xffff, false}, /* 0x229c */
-	{RCS, GEN9_CTX_PREEMPT_REG, 0x0, false}, /* 0x2248 */
-	{RCS, HWSTAM, 0x0, false}, /* 0x2098 */
-	{RCS, INSTPM, 0xffff, true}, /* 0x20c0 */
-	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 0), 0, false}, /* 0x24d0 */
-	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 1), 0, false}, /* 0x24d4 */
-	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 2), 0, false}, /* 0x24d8 */
-	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 3), 0, false}, /* 0x24dc */
-	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 4), 0, false}, /* 0x24e0 */
-	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 5), 0, false}, /* 0x24e4 */
-	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 6), 0, false}, /* 0x24e8 */
-	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 7), 0, false}, /* 0x24ec */
-	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 8), 0, false}, /* 0x24f0 */
-	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 9), 0, false}, /* 0x24f4 */
-	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 10), 0, false}, /* 0x24f8 */
-	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 11), 0, false}, /* 0x24fc */
-	{RCS, CACHE_MODE_1, 0xffff, true}, /* 0x7004 */
-	{RCS, GEN7_GT_MODE, 0xffff, true}, /* 0x7008 */
-	{RCS, CACHE_MODE_0_GEN7, 0xffff, true}, /* 0x7000 */
-	{RCS, GEN7_COMMON_SLICE_CHICKEN1, 0xffff, true}, /* 0x7010 */
-	{RCS, HDC_CHICKEN0, 0xffff, true}, /* 0x7300 */
-	{RCS, VF_GUARDBAND, 0xffff, true}, /* 0x83a4 */
-
-	{BCS, RING_GFX_MODE(BLT_RING_BASE), 0xffff, false}, /* 0x2229c */
-	{BCS, RING_MI_MODE(BLT_RING_BASE), 0xffff, false}, /* 0x2209c */
-	{BCS, RING_INSTPM(BLT_RING_BASE), 0xffff, false}, /* 0x220c0 */
-	{BCS, RING_HWSTAM(BLT_RING_BASE), 0x0, false}, /* 0x22098 */
-	{BCS, RING_EXCC(BLT_RING_BASE), 0x0, false}, /* 0x22028 */
-	{RCS, INVALID_MMIO_REG, 0, false } /* Terminated */
+	{RCS0, GFX_MODE_GEN7, 0xffff, false}, /* 0x229c */
+	{RCS0, GEN9_CTX_PREEMPT_REG, 0x0, false}, /* 0x2248 */
+	{RCS0, HWSTAM, 0x0, false}, /* 0x2098 */
+	{RCS0, INSTPM, 0xffff, true}, /* 0x20c0 */
+	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 0), 0, false}, /* 0x24d0 */
+	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 1), 0, false}, /* 0x24d4 */
+	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 2), 0, false}, /* 0x24d8 */
+	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 3), 0, false}, /* 0x24dc */
+	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 4), 0, false}, /* 0x24e0 */
+	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 5), 0, false}, /* 0x24e4 */
+	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 6), 0, false}, /* 0x24e8 */
+	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 7), 0, false}, /* 0x24ec */
+	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 8), 0, false}, /* 0x24f0 */
+	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 9), 0, false}, /* 0x24f4 */
+	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 10), 0, false}, /* 0x24f8 */
+	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 11), 0, false}, /* 0x24fc */
+	{RCS0, CACHE_MODE_1, 0xffff, true}, /* 0x7004 */
+	{RCS0, GEN7_GT_MODE, 0xffff, true}, /* 0x7008 */
+	{RCS0, CACHE_MODE_0_GEN7, 0xffff, true}, /* 0x7000 */
+	{RCS0, GEN7_COMMON_SLICE_CHICKEN1, 0xffff, true}, /* 0x7010 */
+	{RCS0, HDC_CHICKEN0, 0xffff, true}, /* 0x7300 */
+	{RCS0, VF_GUARDBAND, 0xffff, true}, /* 0x83a4 */
+
+	{BCS0, RING_GFX_MODE(BLT_RING_BASE), 0xffff, false}, /* 0x2229c */
+	{BCS0, RING_MI_MODE(BLT_RING_BASE), 0xffff, false}, /* 0x2209c */
+	{BCS0, RING_INSTPM(BLT_RING_BASE), 0xffff, false}, /* 0x220c0 */
+	{BCS0, RING_HWSTAM(BLT_RING_BASE), 0x0, false}, /* 0x22098 */
+	{BCS0, RING_EXCC(BLT_RING_BASE), 0x0, false}, /* 0x22028 */
+	{RCS0, INVALID_MMIO_REG, 0, false } /* Terminated */
 };
 
 static struct engine_mmio gen9_engine_mmio_list[] __cacheline_aligned = {
-	{RCS, GFX_MODE_GEN7, 0xffff, false}, /* 0x229c */
-	{RCS, GEN9_CTX_PREEMPT_REG, 0x0, false}, /* 0x2248 */
-	{RCS, HWSTAM, 0x0, false}, /* 0x2098 */
-	{RCS, INSTPM, 0xffff, true}, /* 0x20c0 */
-	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 0), 0, false}, /* 0x24d0 */
-	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 1), 0, false}, /* 0x24d4 */
-	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 2), 0, false}, /* 0x24d8 */
-	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 3), 0, false}, /* 0x24dc */
-	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 4), 0, false}, /* 0x24e0 */
-	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 5), 0, false}, /* 0x24e4 */
-	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 6), 0, false}, /* 0x24e8 */
-	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 7), 0, false}, /* 0x24ec */
-	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 8), 0, false}, /* 0x24f0 */
-	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 9), 0, false}, /* 0x24f4 */
-	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 10), 0, false}, /* 0x24f8 */
-	{RCS, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 11), 0, false}, /* 0x24fc */
-	{RCS, CACHE_MODE_1, 0xffff, true}, /* 0x7004 */
-	{RCS, GEN7_GT_MODE, 0xffff, true}, /* 0x7008 */
-	{RCS, CACHE_MODE_0_GEN7, 0xffff, true}, /* 0x7000 */
-	{RCS, GEN7_COMMON_SLICE_CHICKEN1, 0xffff, true}, /* 0x7010 */
-	{RCS, HDC_CHICKEN0, 0xffff, true}, /* 0x7300 */
-	{RCS, VF_GUARDBAND, 0xffff, true}, /* 0x83a4 */
-
-	{RCS, GEN8_PRIVATE_PAT_LO, 0, false}, /* 0x40e0 */
-	{RCS, GEN8_PRIVATE_PAT_HI, 0, false}, /* 0x40e4 */
-	{RCS, GEN8_CS_CHICKEN1, 0xffff, true}, /* 0x2580 */
-	{RCS, COMMON_SLICE_CHICKEN2, 0xffff, true}, /* 0x7014 */
-	{RCS, GEN9_CS_DEBUG_MODE1, 0xffff, false}, /* 0x20ec */
-	{RCS, GEN8_L3SQCREG4, 0, false}, /* 0xb118 */
-	{RCS, GEN7_HALF_SLICE_CHICKEN1, 0xffff, true}, /* 0xe100 */
-	{RCS, HALF_SLICE_CHICKEN2, 0xffff, true}, /* 0xe180 */
-	{RCS, HALF_SLICE_CHICKEN3, 0xffff, true}, /* 0xe184 */
-	{RCS, GEN9_HALF_SLICE_CHICKEN5, 0xffff, true}, /* 0xe188 */
-	{RCS, GEN9_HALF_SLICE_CHICKEN7, 0xffff, true}, /* 0xe194 */
-	{RCS, GEN8_ROW_CHICKEN, 0xffff, true}, /* 0xe4f0 */
-	{RCS, TRVATTL3PTRDW(0), 0, false}, /* 0x4de0 */
-	{RCS, TRVATTL3PTRDW(1), 0, false}, /* 0x4de4 */
-	{RCS, TRNULLDETCT, 0, false}, /* 0x4de8 */
-	{RCS, TRINVTILEDETCT, 0, false}, /* 0x4dec */
-	{RCS, TRVADR, 0, false}, /* 0x4df0 */
-	{RCS, TRTTE, 0, false}, /* 0x4df4 */
-
-	{BCS, RING_GFX_MODE(BLT_RING_BASE), 0xffff, false}, /* 0x2229c */
-	{BCS, RING_MI_MODE(BLT_RING_BASE), 0xffff, false}, /* 0x2209c */
-	{BCS, RING_INSTPM(BLT_RING_BASE), 0xffff, false}, /* 0x220c0 */
-	{BCS, RING_HWSTAM(BLT_RING_BASE), 0x0, false}, /* 0x22098 */
-	{BCS, RING_EXCC(BLT_RING_BASE), 0x0, false}, /* 0x22028 */
-
-	{VCS2, RING_EXCC(GEN8_BSD2_RING_BASE), 0xffff, false}, /* 0x1c028 */
-
-	{VECS, RING_EXCC(VEBOX_RING_BASE), 0xffff, false}, /* 0x1a028 */
-
-	{RCS, GEN8_HDC_CHICKEN1, 0xffff, true}, /* 0x7304 */
-	{RCS, GEN9_CTX_PREEMPT_REG, 0x0, false}, /* 0x2248 */
-	{RCS, GEN7_UCGCTL4, 0x0, false}, /* 0x940c */
-	{RCS, GAMT_CHKN_BIT_REG, 0x0, false}, /* 0x4ab8 */
-
-	{RCS, GEN9_GAMT_ECO_REG_RW_IA, 0x0, false}, /* 0x4ab0 */
-	{RCS, GEN9_CSFE_CHICKEN1_RCS, 0xffff, false}, /* 0x20d4 */
-
-	{RCS, GEN8_GARBCNTL, 0x0, false}, /* 0xb004 */
-	{RCS, GEN7_FF_THREAD_MODE, 0x0, false}, /* 0x20a0 */
-	{RCS, FF_SLICE_CS_CHICKEN2, 0xffff, false}, /* 0x20e4 */
-	{RCS, INVALID_MMIO_REG, 0, false } /* Terminated */
+	{RCS0, GFX_MODE_GEN7, 0xffff, false}, /* 0x229c */
+	{RCS0, GEN9_CTX_PREEMPT_REG, 0x0, false}, /* 0x2248 */
+	{RCS0, HWSTAM, 0x0, false}, /* 0x2098 */
+	{RCS0, INSTPM, 0xffff, true}, /* 0x20c0 */
+	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 0), 0, false}, /* 0x24d0 */
+	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 1), 0, false}, /* 0x24d4 */
+	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 2), 0, false}, /* 0x24d8 */
+	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 3), 0, false}, /* 0x24dc */
+	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 4), 0, false}, /* 0x24e0 */
+	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 5), 0, false}, /* 0x24e4 */
+	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 6), 0, false}, /* 0x24e8 */
+	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 7), 0, false}, /* 0x24ec */
+	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 8), 0, false}, /* 0x24f0 */
+	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 9), 0, false}, /* 0x24f4 */
+	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 10), 0, false}, /* 0x24f8 */
+	{RCS0, RING_FORCE_TO_NONPRIV(RENDER_RING_BASE, 11), 0, false}, /* 0x24fc */
+	{RCS0, CACHE_MODE_1, 0xffff, true}, /* 0x7004 */
+	{RCS0, GEN7_GT_MODE, 0xffff, true}, /* 0x7008 */
+	{RCS0, CACHE_MODE_0_GEN7, 0xffff, true}, /* 0x7000 */
+	{RCS0, GEN7_COMMON_SLICE_CHICKEN1, 0xffff, true}, /* 0x7010 */
+	{RCS0, HDC_CHICKEN0, 0xffff, true}, /* 0x7300 */
+	{RCS0, VF_GUARDBAND, 0xffff, true}, /* 0x83a4 */
+
+	{RCS0, GEN8_PRIVATE_PAT_LO, 0, false}, /* 0x40e0 */
+	{RCS0, GEN8_PRIVATE_PAT_HI, 0, false}, /* 0x40e4 */
+	{RCS0, GEN8_CS_CHICKEN1, 0xffff, true}, /* 0x2580 */
+	{RCS0, COMMON_SLICE_CHICKEN2, 0xffff, true}, /* 0x7014 */
+	{RCS0, GEN9_CS_DEBUG_MODE1, 0xffff, false}, /* 0x20ec */
+	{RCS0, GEN8_L3SQCREG4, 0, false}, /* 0xb118 */
+	{RCS0, GEN7_HALF_SLICE_CHICKEN1, 0xffff, true}, /* 0xe100 */
+	{RCS0, HALF_SLICE_CHICKEN2, 0xffff, true}, /* 0xe180 */
+	{RCS0, HALF_SLICE_CHICKEN3, 0xffff, true}, /* 0xe184 */
+	{RCS0, GEN9_HALF_SLICE_CHICKEN5, 0xffff, true}, /* 0xe188 */
+	{RCS0, GEN9_HALF_SLICE_CHICKEN7, 0xffff, true}, /* 0xe194 */
+	{RCS0, GEN8_ROW_CHICKEN, 0xffff, true}, /* 0xe4f0 */
+	{RCS0, TRVATTL3PTRDW(0), 0, false}, /* 0x4de0 */
+	{RCS0, TRVATTL3PTRDW(1), 0, false}, /* 0x4de4 */
+	{RCS0, TRNULLDETCT, 0, false}, /* 0x4de8 */
+	{RCS0, TRINVTILEDETCT, 0, false}, /* 0x4dec */
+	{RCS0, TRVADR, 0, false}, /* 0x4df0 */
+	{RCS0, TRTTE, 0, false}, /* 0x4df4 */
+
+	{BCS0, RING_GFX_MODE(BLT_RING_BASE), 0xffff, false}, /* 0x2229c */
+	{BCS0, RING_MI_MODE(BLT_RING_BASE), 0xffff, false}, /* 0x2209c */
+	{BCS0, RING_INSTPM(BLT_RING_BASE), 0xffff, false}, /* 0x220c0 */
+	{BCS0, RING_HWSTAM(BLT_RING_BASE), 0x0, false}, /* 0x22098 */
+	{BCS0, RING_EXCC(BLT_RING_BASE), 0x0, false}, /* 0x22028 */
+
+	{VCS1, RING_EXCC(GEN8_BSD2_RING_BASE), 0xffff, false}, /* 0x1c028 */
+
+	{VECS0, RING_EXCC(VEBOX_RING_BASE), 0xffff, false}, /* 0x1a028 */
+
+	{RCS0, GEN8_HDC_CHICKEN1, 0xffff, true}, /* 0x7304 */
+	{RCS0, GEN9_CTX_PREEMPT_REG, 0x0, false}, /* 0x2248 */
+	{RCS0, GEN7_UCGCTL4, 0x0, false}, /* 0x940c */
+	{RCS0, GAMT_CHKN_BIT_REG, 0x0, false}, /* 0x4ab8 */
+
+	{RCS0, GEN9_GAMT_ECO_REG_RW_IA, 0x0, false}, /* 0x4ab0 */
+	{RCS0, GEN9_CSFE_CHICKEN1_RCS, 0xffff, false}, /* 0x20d4 */
+
+	{RCS0, GEN8_GARBCNTL, 0x0, false}, /* 0xb004 */
+	{RCS0, GEN7_FF_THREAD_MODE, 0x0, false}, /* 0x20a0 */
+	{RCS0, FF_SLICE_CS_CHICKEN2, 0xffff, false}, /* 0x20e4 */
+	{RCS0, INVALID_MMIO_REG, 0, false } /* Terminated */
 };
 
 static struct {
@@ -149,11 +149,11 @@  static void load_render_mocs(struct drm_i915_private *dev_priv)
 {
 	i915_reg_t offset;
 	u32 regs[] = {
-		[RCS] = 0xc800,
-		[VCS] = 0xc900,
-		[VCS2] = 0xca00,
-		[BCS] = 0xcc00,
-		[VECS] = 0xcb00,
+		[RCS0]  = 0xc800,
+		[VCS0]  = 0xc900,
+		[VCS1]  = 0xca00,
+		[BCS0]  = 0xcc00,
+		[VECS0] = 0xcb00,
 	};
 	int ring_id, i;
 
@@ -301,7 +301,7 @@  int intel_vgpu_restore_inhibit_context(struct intel_vgpu *vgpu,
 		goto out;
 
 	/* no MOCS register in context except render engine */
-	if (req->engine->id != RCS)
+	if (req->engine->id != RCS0)
 		goto out;
 
 	ret = restore_render_mocs_control_for_inhibit(vgpu, req);
@@ -331,11 +331,11 @@  static void handle_tlb_pending_event(struct intel_vgpu *vgpu, int ring_id)
 	enum forcewake_domains fw;
 	i915_reg_t reg;
 	u32 regs[] = {
-		[RCS] = 0x4260,
-		[VCS] = 0x4264,
-		[VCS2] = 0x4268,
-		[BCS] = 0x426c,
-		[VECS] = 0x4270,
+		[RCS0]  = 0x4260,
+		[VCS0]  = 0x4264,
+		[VCS1]  = 0x4268,
+		[BCS0]  = 0x426c,
+		[VECS0] = 0x4270,
 	};
 
 	if (WARN_ON(ring_id >= ARRAY_SIZE(regs)))
@@ -353,7 +353,7 @@  static void handle_tlb_pending_event(struct intel_vgpu *vgpu, int ring_id)
 	 */
 	fw = intel_uncore_forcewake_for_reg(dev_priv, reg,
 					    FW_REG_READ | FW_REG_WRITE);
-	if (ring_id == RCS && (INTEL_GEN(dev_priv) >= 9))
+	if (ring_id == RCS0 && INTEL_GEN(dev_priv) >= 9)
 		fw |= FORCEWAKE_RENDER;
 
 	intel_uncore_forcewake_get(dev_priv, fw);
@@ -378,11 +378,11 @@  static void switch_mocs(struct intel_vgpu *pre, struct intel_vgpu *next,
 	u32 old_v, new_v;
 
 	u32 regs[] = {
-		[RCS] = 0xc800,
-		[VCS] = 0xc900,
-		[VCS2] = 0xca00,
-		[BCS] = 0xcc00,
-		[VECS] = 0xcb00,
+		[RCS0]  = 0xc800,
+		[VCS0]  = 0xc900,
+		[VCS1]  = 0xca00,
+		[BCS0]  = 0xcc00,
+		[VECS0] = 0xcb00,
 	};
 	int i;
 
@@ -390,8 +390,10 @@  static void switch_mocs(struct intel_vgpu *pre, struct intel_vgpu *next,
 	if (WARN_ON(ring_id >= ARRAY_SIZE(regs)))
 		return;
 
-	if ((IS_KABYLAKE(dev_priv)  || IS_BROXTON(dev_priv)
-		|| IS_COFFEELAKE(dev_priv)) && ring_id == RCS)
+	if (ring_id == RCS0 &&
+	    (IS_KABYLAKE(dev_priv) ||
+	     IS_BROXTON(dev_priv) ||
+	     IS_COFFEELAKE(dev_priv)))
 		return;
 
 	if (!pre && !gen9_render_mocs.initialized)
@@ -414,7 +416,7 @@  static void switch_mocs(struct intel_vgpu *pre, struct intel_vgpu *next,
 		offset.reg += 4;
 	}
 
-	if (ring_id == RCS) {
+	if (ring_id == RCS0) {
 		l3_offset.reg = 0xb020;
 		for (i = 0; i < GEN9_MOCS_SIZE / 2; i++) {
 			if (pre)
diff --git a/drivers/gpu/drm/i915/gvt/scheduler.c b/drivers/gpu/drm/i915/gvt/scheduler.c
index 1bb8f936fdaa..709bcaaed765 100644
--- a/drivers/gpu/drm/i915/gvt/scheduler.c
+++ b/drivers/gpu/drm/i915/gvt/scheduler.c
@@ -93,7 +93,7 @@  static void sr_oa_regs(struct intel_vgpu_workload *workload,
 		i915_mmio_reg_offset(EU_PERF_CNTL6),
 	};
 
-	if (workload->ring_id != RCS)
+	if (workload->ring_id != RCS0)
 		return;
 
 	if (save) {
@@ -149,7 +149,7 @@  static int populate_shadow_context(struct intel_vgpu_workload *workload)
 	COPY_REG_MASKED(ctx_ctrl);
 	COPY_REG(ctx_timestamp);
 
-	if (ring_id == RCS) {
+	if (ring_id == RCS0) {
 		COPY_REG(bb_per_ctx_ptr);
 		COPY_REG(rcs_indirect_ctx);
 		COPY_REG(rcs_indirect_ctx_offset);
@@ -177,7 +177,7 @@  static int populate_shadow_context(struct intel_vgpu_workload *workload)
 
 	context_page_num = context_page_num >> PAGE_SHIFT;
 
-	if (IS_BROADWELL(gvt->dev_priv) && ring_id == RCS)
+	if (IS_BROADWELL(gvt->dev_priv) && ring_id == RCS0)
 		context_page_num = 19;
 
 	i = 2;
@@ -440,8 +440,7 @@  int intel_gvt_scan_and_shadow_workload(struct intel_vgpu_workload *workload)
 	if (ret)
 		goto err_unpin;
 
-	if ((workload->ring_id == RCS) &&
-	    (workload->wa_ctx.indirect_ctx.size != 0)) {
+	if (workload->ring_id == RCS0 && workload->wa_ctx.indirect_ctx.size) {
 		ret = intel_gvt_scan_and_shadow_wa_ctx(&workload->wa_ctx);
 		if (ret)
 			goto err_shadow;
@@ -791,7 +790,7 @@  static void update_guest_context(struct intel_vgpu_workload *workload)
 	context_page_num = rq->engine->context_size;
 	context_page_num = context_page_num >> PAGE_SHIFT;
 
-	if (IS_BROADWELL(gvt->dev_priv) && rq->engine->id == RCS)
+	if (IS_BROADWELL(gvt->dev_priv) && rq->engine->id == RCS0)
 		context_page_num = 19;
 
 	i = 2;
@@ -891,8 +890,8 @@  static void complete_current_workload(struct intel_gvt *gvt, int ring_id)
 				workload->status = 0;
 		}
 
-		if (!workload->status && !(vgpu->resetting_eng &
-					   ENGINE_MASK(ring_id))) {
+		if (!workload->status &&
+		    !(vgpu->resetting_eng & BIT(ring_id))) {
 			update_guest_context(workload);
 
 			for_each_set_bit(event, workload->pending_events,
@@ -915,7 +914,7 @@  static void complete_current_workload(struct intel_gvt *gvt, int ring_id)
 
 	list_del_init(&workload->list);
 
-	if (workload->status || (vgpu->resetting_eng & ENGINE_MASK(ring_id))) {
+	if (workload->status || vgpu->resetting_eng & BIT(ring_id)) {
 		/* if workload->status is not successful means HW GPU
 		 * has occurred GPU hang or something wrong with i915/GVT,
 		 * and GVT won't inject context switch interrupt to guest.
@@ -929,7 +928,7 @@  static void complete_current_workload(struct intel_gvt *gvt, int ring_id)
 		 * cleaned up during the resetting process later, so doing
 		 * the workload clean up here doesn't have any impact.
 		 **/
-		intel_vgpu_clean_workloads(vgpu, ENGINE_MASK(ring_id));
+		intel_vgpu_clean_workloads(vgpu, BIT(ring_id));
 	}
 
 	workload->complete(workload);
@@ -1438,7 +1437,7 @@  intel_vgpu_create_workload(struct intel_vgpu *vgpu, int ring_id,
 	workload->rb_start = start;
 	workload->rb_ctl = ctl;
 
-	if (ring_id == RCS) {
+	if (ring_id == RCS0) {
 		intel_gvt_hypervisor_read_gpa(vgpu, ring_context_gpa +
 			RING_CTX_OFF(bb_per_ctx_ptr.val), &per_ctx, 4);
 		intel_gvt_hypervisor_read_gpa(vgpu, ring_context_gpa +
diff --git a/drivers/gpu/drm/i915/i915_cmd_parser.c b/drivers/gpu/drm/i915/i915_cmd_parser.c
index 33e8eed64423..503d548a55f7 100644
--- a/drivers/gpu/drm/i915/i915_cmd_parser.c
+++ b/drivers/gpu/drm/i915/i915_cmd_parser.c
@@ -868,8 +868,8 @@  void intel_engine_init_cmd_parser(struct intel_engine_cs *engine)
 	if (!IS_GEN(engine->i915, 7))
 		return;
 
-	switch (engine->id) {
-	case RCS:
+	switch (engine->class) {
+	case RENDER_CLASS:
 		if (IS_HASWELL(engine->i915)) {
 			cmd_tables = hsw_render_ring_cmds;
 			cmd_table_count =
@@ -889,12 +889,12 @@  void intel_engine_init_cmd_parser(struct intel_engine_cs *engine)
 
 		engine->get_cmd_length_mask = gen7_render_get_cmd_length_mask;
 		break;
-	case VCS:
+	case VIDEO_DECODE_CLASS:
 		cmd_tables = gen7_video_cmds;
 		cmd_table_count = ARRAY_SIZE(gen7_video_cmds);
 		engine->get_cmd_length_mask = gen7_bsd_get_cmd_length_mask;
 		break;
-	case BCS:
+	case COPY_ENGINE_CLASS:
 		if (IS_HASWELL(engine->i915)) {
 			cmd_tables = hsw_blt_ring_cmds;
 			cmd_table_count = ARRAY_SIZE(hsw_blt_ring_cmds);
@@ -913,14 +913,14 @@  void intel_engine_init_cmd_parser(struct intel_engine_cs *engine)
 
 		engine->get_cmd_length_mask = gen7_blt_get_cmd_length_mask;
 		break;
-	case VECS:
+	case VIDEO_ENHANCEMENT_CLASS:
 		cmd_tables = hsw_vebox_cmds;
 		cmd_table_count = ARRAY_SIZE(hsw_vebox_cmds);
 		/* VECS can use the same length_mask function as VCS */
 		engine->get_cmd_length_mask = gen7_bsd_get_cmd_length_mask;
 		break;
 	default:
-		MISSING_CASE(engine->id);
+		MISSING_CASE(engine->class);
 		return;
 	}
 
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 298371aad445..0a6348ad7c98 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -1298,7 +1298,7 @@  static int i915_hangcheck_info(struct seq_file *m, void *unused)
 			seqno[id] = intel_engine_get_hangcheck_seqno(engine);
 		}
 
-		intel_engine_get_instdone(dev_priv->engine[RCS], &instdone);
+		intel_engine_get_instdone(dev_priv->engine[RCS0], &instdone);
 	}
 
 	if (timer_pending(&dev_priv->gpu_error.hangcheck_work.timer))
@@ -1325,7 +1325,7 @@  static int i915_hangcheck_info(struct seq_file *m, void *unused)
 			   (long long)engine->hangcheck.acthd,
 			   (long long)acthd[id]);
 
-		if (engine->id == RCS) {
+		if (engine->id == RCS0) {
 			seq_puts(m, "\tinstdone read =\n");
 
 			i915_instdone_info(dev_priv, m, &instdone);
@@ -3178,7 +3178,7 @@  static int i915_shared_dplls_info(struct seq_file *m, void *unused)
 static int i915_wa_registers(struct seq_file *m, void *unused)
 {
 	struct drm_i915_private *i915 = node_to_i915(m->private);
-	const struct i915_wa_list *wal = &i915->engine[RCS]->ctx_wa_list;
+	const struct i915_wa_list *wal = &i915->engine[RCS0]->ctx_wa_list;
 	struct i915_wa *wa;
 	unsigned int i;
 
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index c08abdef5eb6..f61bb462127d 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -330,16 +330,16 @@  static int i915_getparam_ioctl(struct drm_device *dev, void *data,
 		value = dev_priv->overlay ? 1 : 0;
 		break;
 	case I915_PARAM_HAS_BSD:
-		value = !!dev_priv->engine[VCS];
+		value = !!dev_priv->engine[VCS0];
 		break;
 	case I915_PARAM_HAS_BLT:
-		value = !!dev_priv->engine[BCS];
+		value = !!dev_priv->engine[BCS0];
 		break;
 	case I915_PARAM_HAS_VEBOX:
-		value = !!dev_priv->engine[VECS];
+		value = !!dev_priv->engine[VECS0];
 		break;
 	case I915_PARAM_HAS_BSD2:
-		value = !!dev_priv->engine[VCS2];
+		value = !!dev_priv->engine[VCS1];
 		break;
 	case I915_PARAM_HAS_LLC:
 		value = HAS_LLC(dev_priv);
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 453af7438e67..0bcf03d02047 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2099,7 +2099,7 @@  static inline struct drm_i915_private *huc_to_i915(struct intel_huc *huc)
 
 /* Iterator over subset of engines selected by mask */
 #define for_each_engine_masked(engine__, dev_priv__, mask__, tmp__) \
-	for ((tmp__) = (mask__) & INTEL_INFO(dev_priv__)->ring_mask; \
+	for ((tmp__) = (mask__) & INTEL_INFO(dev_priv__)->engine_mask; \
 	     (tmp__) ? \
 	     ((engine__) = (dev_priv__)->engine[__mask_next_bit(tmp__)]), 1 : \
 	     0;)
@@ -2420,24 +2420,8 @@  static inline unsigned int i915_sg_segment_size(void)
 #define IS_GEN9_LP(dev_priv)	(IS_GEN(dev_priv, 9) && IS_LP(dev_priv))
 #define IS_GEN9_BC(dev_priv)	(IS_GEN(dev_priv, 9) && !IS_LP(dev_priv))
 
-#define ENGINE_MASK(id)	BIT(id)
-#define RENDER_RING	ENGINE_MASK(RCS)
-#define BSD_RING	ENGINE_MASK(VCS)
-#define BLT_RING	ENGINE_MASK(BCS)
-#define VEBOX_RING	ENGINE_MASK(VECS)
-#define BSD2_RING	ENGINE_MASK(VCS2)
-#define BSD3_RING	ENGINE_MASK(VCS3)
-#define BSD4_RING	ENGINE_MASK(VCS4)
-#define VEBOX2_RING	ENGINE_MASK(VECS2)
-#define ALL_ENGINES	(~0)
-
-#define HAS_ENGINE(dev_priv, id) \
-	(!!(INTEL_INFO(dev_priv)->ring_mask & ENGINE_MASK(id)))
-
-#define HAS_BSD(dev_priv)	HAS_ENGINE(dev_priv, VCS)
-#define HAS_BSD2(dev_priv)	HAS_ENGINE(dev_priv, VCS2)
-#define HAS_BLT(dev_priv)	HAS_ENGINE(dev_priv, BCS)
-#define HAS_VEBOX(dev_priv)	HAS_ENGINE(dev_priv, VECS)
+#define ALL_ENGINES	(~0u)
+#define HAS_ENGINE(dev_priv, id) (INTEL_INFO(dev_priv)->engine_mask & BIT(id))
 
 #define HAS_LLC(dev_priv)	(INTEL_INFO(dev_priv)->has_llc)
 #define HAS_SNOOP(dev_priv)	(INTEL_INFO(dev_priv)->has_snoop)
diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c
index d266ba3f7210..1e3211e909f1 100644
--- a/drivers/gpu/drm/i915/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/i915_gem_context.c
@@ -583,7 +583,7 @@  int i915_gem_contexts_init(struct drm_i915_private *dev_priv)
 	GEM_BUG_ON(dev_priv->kernel_context);
 	GEM_BUG_ON(dev_priv->preempt_context);
 
-	intel_engine_init_ctx_wa(dev_priv->engine[RCS]);
+	intel_engine_init_ctx_wa(dev_priv->engine[RCS0]);
 	init_contexts(dev_priv);
 
 	/* lowest priority; idle task */
@@ -1089,7 +1089,7 @@  __i915_gem_context_reconfigure_sseu(struct i915_gem_context *ctx,
 	int ret = 0;
 
 	GEM_BUG_ON(INTEL_GEN(ctx->i915) < 8);
-	GEM_BUG_ON(engine->id != RCS);
+	GEM_BUG_ON(engine->id != RCS0);
 
 	/* Nothing to do if unmodified. */
 	if (!memcmp(&ce->sseu, &sseu, sizeof(sseu)))
diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
index 53d0d70c97fa..943a221acb21 100644
--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
@@ -1957,7 +1957,7 @@  static int i915_reset_gen7_sol_offsets(struct i915_request *rq)
 	u32 *cs;
 	int i;
 
-	if (!IS_GEN(rq->i915, 7) || rq->engine->id != RCS) {
+	if (!IS_GEN(rq->i915, 7) || rq->engine->id != RCS0) {
 		DRM_DEBUG("sol reset is gen7/rcs only\n");
 		return -EINVAL;
 	}
@@ -2082,11 +2082,11 @@  gen8_dispatch_bsd_engine(struct drm_i915_private *dev_priv,
 #define I915_USER_RINGS (4)
 
 static const enum intel_engine_id user_ring_map[I915_USER_RINGS + 1] = {
-	[I915_EXEC_DEFAULT]	= RCS,
-	[I915_EXEC_RENDER]	= RCS,
-	[I915_EXEC_BLT]		= BCS,
-	[I915_EXEC_BSD]		= VCS,
-	[I915_EXEC_VEBOX]	= VECS
+	[I915_EXEC_DEFAULT]	= RCS0,
+	[I915_EXEC_RENDER]	= RCS0,
+	[I915_EXEC_BLT]		= BCS0,
+	[I915_EXEC_BSD]		= VCS0,
+	[I915_EXEC_VEBOX]	= VECS0
 };
 
 static struct intel_engine_cs *
@@ -2109,7 +2109,7 @@  eb_select_engine(struct drm_i915_private *dev_priv,
 		return NULL;
 	}
 
-	if (user_ring_id == I915_EXEC_BSD && HAS_BSD2(dev_priv)) {
+	if (user_ring_id == I915_EXEC_BSD && HAS_ENGINE(dev_priv, VCS1)) {
 		unsigned int bsd_idx = args->flags & I915_EXEC_BSD_MASK;
 
 		if (bsd_idx == I915_EXEC_BSD_DEFAULT) {
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
index 7e79691664e5..e4b8a710bd1a 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -798,7 +798,7 @@  static void gen8_initialize_pml4(struct i915_address_space *vm,
  */
 static void mark_tlbs_dirty(struct i915_hw_ppgtt *ppgtt)
 {
-	ppgtt->pd_dirty_rings = INTEL_INFO(ppgtt->vm.i915)->ring_mask;
+	ppgtt->pd_dirty_engines = INTEL_INFO(ppgtt->vm.i915)->engine_mask;
 }
 
 /* Removes entries from a single page table, releasing it if it's empty.
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.h b/drivers/gpu/drm/i915/i915_gem_gtt.h
index 03ade71b8d9a..adc1929ee28b 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.h
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.h
@@ -390,7 +390,7 @@  struct i915_hw_ppgtt {
 	struct i915_address_space vm;
 	struct kref ref;
 
-	unsigned long pd_dirty_rings;
+	unsigned long pd_dirty_engines;
 	union {
 		struct i915_pml4 pml4;		/* GEN8+ & 48b PPGTT */
 		struct i915_page_directory_pointer pdp;	/* GEN8+ */
diff --git a/drivers/gpu/drm/i915/i915_gem_render_state.c b/drivers/gpu/drm/i915/i915_gem_render_state.c
index 90baf9086d0a..91196348c68c 100644
--- a/drivers/gpu/drm/i915/i915_gem_render_state.c
+++ b/drivers/gpu/drm/i915/i915_gem_render_state.c
@@ -42,7 +42,7 @@  struct intel_render_state {
 static const struct intel_renderstate_rodata *
 render_state_get_rodata(const struct intel_engine_cs *engine)
 {
-	if (engine->id != RCS)
+	if (engine->id != RCS0)
 		return NULL;
 
 	switch (INTEL_GEN(engine->i915)) {
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c
index fa86c60fb56c..7c79693dd4f7 100644
--- a/drivers/gpu/drm/i915/i915_gpu_error.c
+++ b/drivers/gpu/drm/i915/i915_gpu_error.c
@@ -411,7 +411,7 @@  static void error_print_instdone(struct drm_i915_error_state_buf *m,
 	err_printf(m, "  INSTDONE: 0x%08x\n",
 		   ee->instdone.instdone);
 
-	if (ee->engine_id != RCS || INTEL_GEN(m->i915) <= 3)
+	if (ee->engine_id != RCS0 || INTEL_GEN(m->i915) <= 3)
 		return;
 
 	err_printf(m, "  SC_INSTDONE: 0x%08x\n",
@@ -502,13 +502,6 @@  static void error_print_engine(struct drm_i915_error_state_buf *m,
 	if (INTEL_GEN(m->i915) >= 6) {
 		err_printf(m, "  RC PSMI: 0x%08x\n", ee->rc_psmi);
 		err_printf(m, "  FAULT_REG: 0x%08x\n", ee->fault_reg);
-		err_printf(m, "  SYNC_0: 0x%08x\n",
-			   ee->semaphore_mboxes[0]);
-		err_printf(m, "  SYNC_1: 0x%08x\n",
-			   ee->semaphore_mboxes[1]);
-		if (HAS_VEBOX(m->i915))
-			err_printf(m, "  SYNC_2: 0x%08x\n",
-				   ee->semaphore_mboxes[2]);
 	}
 	if (HAS_PPGTT(m->i915)) {
 		err_printf(m, "  GFX_MODE: 0x%08x\n", ee->vm_info.gfx_mode);
@@ -1138,18 +1131,6 @@  static void gem_record_fences(struct i915_gpu_state *error)
 	error->nfence = i;
 }
 
-static void gen6_record_semaphore_state(struct intel_engine_cs *engine,
-					struct drm_i915_error_engine *ee)
-{
-	struct drm_i915_private *dev_priv = engine->i915;
-
-	ee->semaphore_mboxes[0] = I915_READ(RING_SYNC_0(engine->mmio_base));
-	ee->semaphore_mboxes[1] = I915_READ(RING_SYNC_1(engine->mmio_base));
-	if (HAS_VEBOX(dev_priv))
-		ee->semaphore_mboxes[2] =
-			I915_READ(RING_SYNC_2(engine->mmio_base));
-}
-
 static void error_record_engine_registers(struct i915_gpu_state *error,
 					  struct intel_engine_cs *engine,
 					  struct drm_i915_error_engine *ee)
@@ -1161,7 +1142,6 @@  static void error_record_engine_registers(struct i915_gpu_state *error,
 		if (INTEL_GEN(dev_priv) >= 8) {
 			ee->fault_reg = I915_READ(GEN8_RING_FAULT_REG);
 		} else {
-			gen6_record_semaphore_state(engine, ee);
 			ee->fault_reg = I915_READ(RING_FAULT_REG(engine));
 		}
 	}
@@ -1200,16 +1180,17 @@  static void error_record_engine_registers(struct i915_gpu_state *error,
 		if (IS_GEN(dev_priv, 7)) {
 			switch (engine->id) {
 			default:
-			case RCS:
+				MISSING_CASE(engine->id);
+			case RCS0:
 				mmio = RENDER_HWS_PGA_GEN7;
 				break;
-			case BCS:
+			case BCS0:
 				mmio = BLT_HWS_PGA_GEN7;
 				break;
-			case VCS:
+			case VCS0:
 				mmio = BSD_HWS_PGA_GEN7;
 				break;
-			case VECS:
+			case VECS0:
 				mmio = VEBOX_HWS_PGA_GEN7;
 				break;
 			}
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.h b/drivers/gpu/drm/i915/i915_gpu_error.h
index 8c1569c1830d..99d6b7b270c2 100644
--- a/drivers/gpu/drm/i915/i915_gpu_error.h
+++ b/drivers/gpu/drm/i915/i915_gpu_error.h
@@ -111,7 +111,6 @@  struct i915_gpu_state {
 		u32 fault_reg;
 		u64 faddr;
 		u32 rc_psmi; /* sleep state */
-		u32 semaphore_mboxes[I915_NUM_ENGINES - 1];
 		struct intel_instdone instdone;
 
 		struct drm_i915_error_context {
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index a42eb6394b69..1f4e984ce42f 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -1427,20 +1427,20 @@  static void ilk_gt_irq_handler(struct drm_i915_private *dev_priv,
 			       u32 gt_iir)
 {
 	if (gt_iir & GT_RENDER_USER_INTERRUPT)
-		intel_engine_breadcrumbs_irq(dev_priv->engine[RCS]);
+		intel_engine_breadcrumbs_irq(dev_priv->engine[RCS0]);
 	if (gt_iir & ILK_BSD_USER_INTERRUPT)
-		intel_engine_breadcrumbs_irq(dev_priv->engine[VCS]);
+		intel_engine_breadcrumbs_irq(dev_priv->engine[VCS0]);
 }
 
 static void snb_gt_irq_handler(struct drm_i915_private *dev_priv,
 			       u32 gt_iir)
 {
 	if (gt_iir & GT_RENDER_USER_INTERRUPT)
-		intel_engine_breadcrumbs_irq(dev_priv->engine[RCS]);
+		intel_engine_breadcrumbs_irq(dev_priv->engine[RCS0]);
 	if (gt_iir & GT_BSD_USER_INTERRUPT)
-		intel_engine_breadcrumbs_irq(dev_priv->engine[VCS]);
+		intel_engine_breadcrumbs_irq(dev_priv->engine[VCS0]);
 	if (gt_iir & GT_BLT_USER_INTERRUPT)
-		intel_engine_breadcrumbs_irq(dev_priv->engine[BCS]);
+		intel_engine_breadcrumbs_irq(dev_priv->engine[BCS0]);
 
 	if (gt_iir & (GT_BLT_CS_ERROR_INTERRUPT |
 		      GT_BSD_CS_ERROR_INTERRUPT |
@@ -1475,8 +1475,8 @@  static void gen8_gt_irq_ack(struct drm_i915_private *i915,
 
 #define GEN8_GT_IRQS (GEN8_GT_RCS_IRQ | \
 		      GEN8_GT_BCS_IRQ | \
+		      GEN8_GT_VCS0_IRQ | \
 		      GEN8_GT_VCS1_IRQ | \
-		      GEN8_GT_VCS2_IRQ | \
 		      GEN8_GT_VECS_IRQ | \
 		      GEN8_GT_PM_IRQ | \
 		      GEN8_GT_GUC_IRQ)
@@ -1487,7 +1487,7 @@  static void gen8_gt_irq_ack(struct drm_i915_private *i915,
 			raw_reg_write(regs, GEN8_GT_IIR(0), gt_iir[0]);
 	}
 
-	if (master_ctl & (GEN8_GT_VCS1_IRQ | GEN8_GT_VCS2_IRQ)) {
+	if (master_ctl & (GEN8_GT_VCS0_IRQ | GEN8_GT_VCS1_IRQ)) {
 		gt_iir[1] = raw_reg_read(regs, GEN8_GT_IIR(1));
 		if (likely(gt_iir[1]))
 			raw_reg_write(regs, GEN8_GT_IIR(1), gt_iir[1]);
@@ -1510,21 +1510,21 @@  static void gen8_gt_irq_handler(struct drm_i915_private *i915,
 				u32 master_ctl, u32 gt_iir[4])
 {
 	if (master_ctl & (GEN8_GT_RCS_IRQ | GEN8_GT_BCS_IRQ)) {
-		gen8_cs_irq_handler(i915->engine[RCS],
+		gen8_cs_irq_handler(i915->engine[RCS0],
 				    gt_iir[0] >> GEN8_RCS_IRQ_SHIFT);
-		gen8_cs_irq_handler(i915->engine[BCS],
+		gen8_cs_irq_handler(i915->engine[BCS0],
 				    gt_iir[0] >> GEN8_BCS_IRQ_SHIFT);
 	}
 
-	if (master_ctl & (GEN8_GT_VCS1_IRQ | GEN8_GT_VCS2_IRQ)) {
-		gen8_cs_irq_handler(i915->engine[VCS],
+	if (master_ctl & (GEN8_GT_VCS0_IRQ | GEN8_GT_VCS1_IRQ)) {
+		gen8_cs_irq_handler(i915->engine[VCS0],
+				    gt_iir[1] >> GEN8_VCS0_IRQ_SHIFT);
+		gen8_cs_irq_handler(i915->engine[VCS1],
 				    gt_iir[1] >> GEN8_VCS1_IRQ_SHIFT);
-		gen8_cs_irq_handler(i915->engine[VCS2],
-				    gt_iir[1] >> GEN8_VCS2_IRQ_SHIFT);
 	}
 
 	if (master_ctl & GEN8_GT_VECS_IRQ) {
-		gen8_cs_irq_handler(i915->engine[VECS],
+		gen8_cs_irq_handler(i915->engine[VECS0],
 				    gt_iir[3] >> GEN8_VECS_IRQ_SHIFT);
 	}
 
@@ -1801,13 +1801,11 @@  static void gen6_rps_irq_handler(struct drm_i915_private *dev_priv, u32 pm_iir)
 	if (INTEL_GEN(dev_priv) >= 8)
 		return;
 
-	if (HAS_VEBOX(dev_priv)) {
-		if (pm_iir & PM_VEBOX_USER_INTERRUPT)
-			intel_engine_breadcrumbs_irq(dev_priv->engine[VECS]);
+	if (pm_iir & PM_VEBOX_USER_INTERRUPT)
+		intel_engine_breadcrumbs_irq(dev_priv->engine[VECS0]);
 
-		if (pm_iir & PM_VEBOX_CS_ERROR_INTERRUPT)
-			DRM_DEBUG("Command parser error, pm_iir 0x%08x\n", pm_iir);
-	}
+	if (pm_iir & PM_VEBOX_CS_ERROR_INTERRUPT)
+		DRM_DEBUG("Command parser error, pm_iir 0x%08x\n", pm_iir);
 }
 
 static void gen9_guc_irq_handler(struct drm_i915_private *dev_priv, u32 gt_iir)
@@ -3782,7 +3780,7 @@  static void gen5_gt_irq_postinstall(struct drm_device *dev)
 		 * RPS interrupts will get enabled/disabled on demand when RPS
 		 * itself is enabled/disabled.
 		 */
-		if (HAS_VEBOX(dev_priv)) {
+		if (HAS_ENGINE(dev_priv, VECS0)) {
 			pm_irqs |= PM_VEBOX_USER_INTERRUPT;
 			dev_priv->pm_ier |= PM_VEBOX_USER_INTERRUPT;
 		}
@@ -3894,18 +3892,21 @@  static void gen8_gt_irq_postinstall(struct drm_i915_private *dev_priv)
 {
 	/* These are interrupts we'll toggle with the ring mask register */
 	u32 gt_interrupts[] = {
-		GT_RENDER_USER_INTERRUPT << GEN8_RCS_IRQ_SHIFT |
-			GT_CONTEXT_SWITCH_INTERRUPT << GEN8_RCS_IRQ_SHIFT |
-			GT_RENDER_USER_INTERRUPT << GEN8_BCS_IRQ_SHIFT |
-			GT_CONTEXT_SWITCH_INTERRUPT << GEN8_BCS_IRQ_SHIFT,
-		GT_RENDER_USER_INTERRUPT << GEN8_VCS1_IRQ_SHIFT |
-			GT_CONTEXT_SWITCH_INTERRUPT << GEN8_VCS1_IRQ_SHIFT |
-			GT_RENDER_USER_INTERRUPT << GEN8_VCS2_IRQ_SHIFT |
-			GT_CONTEXT_SWITCH_INTERRUPT << GEN8_VCS2_IRQ_SHIFT,
+		(GT_RENDER_USER_INTERRUPT << GEN8_RCS_IRQ_SHIFT |
+		 GT_CONTEXT_SWITCH_INTERRUPT << GEN8_RCS_IRQ_SHIFT |
+		 GT_RENDER_USER_INTERRUPT << GEN8_BCS_IRQ_SHIFT |
+		 GT_CONTEXT_SWITCH_INTERRUPT << GEN8_BCS_IRQ_SHIFT),
+
+		(GT_RENDER_USER_INTERRUPT << GEN8_VCS0_IRQ_SHIFT |
+		 GT_CONTEXT_SWITCH_INTERRUPT << GEN8_VCS0_IRQ_SHIFT |
+		 GT_RENDER_USER_INTERRUPT << GEN8_VCS1_IRQ_SHIFT |
+		 GT_CONTEXT_SWITCH_INTERRUPT << GEN8_VCS1_IRQ_SHIFT),
+
 		0,
-		GT_RENDER_USER_INTERRUPT << GEN8_VECS_IRQ_SHIFT |
-			GT_CONTEXT_SWITCH_INTERRUPT << GEN8_VECS_IRQ_SHIFT
-		};
+
+		(GT_RENDER_USER_INTERRUPT << GEN8_VECS_IRQ_SHIFT |
+		 GT_CONTEXT_SWITCH_INTERRUPT << GEN8_VECS_IRQ_SHIFT)
+	};
 
 	dev_priv->pm_ier = 0x0;
 	dev_priv->pm_imr = ~dev_priv->pm_ier;
@@ -4233,7 +4234,7 @@  static irqreturn_t i8xx_irq_handler(int irq, void *arg)
 		I915_WRITE16(IIR, iir);
 
 		if (iir & I915_USER_INTERRUPT)
-			intel_engine_breadcrumbs_irq(dev_priv->engine[RCS]);
+			intel_engine_breadcrumbs_irq(dev_priv->engine[RCS0]);
 
 		if (iir & I915_MASTER_ERROR_INTERRUPT)
 			i8xx_error_irq_handler(dev_priv, eir, eir_stuck);
@@ -4341,7 +4342,7 @@  static irqreturn_t i915_irq_handler(int irq, void *arg)
 		I915_WRITE(IIR, iir);
 
 		if (iir & I915_USER_INTERRUPT)
-			intel_engine_breadcrumbs_irq(dev_priv->engine[RCS]);
+			intel_engine_breadcrumbs_irq(dev_priv->engine[RCS0]);
 
 		if (iir & I915_MASTER_ERROR_INTERRUPT)
 			i9xx_error_irq_handler(dev_priv, eir, eir_stuck);
@@ -4486,10 +4487,10 @@  static irqreturn_t i965_irq_handler(int irq, void *arg)
 		I915_WRITE(IIR, iir);
 
 		if (iir & I915_USER_INTERRUPT)
-			intel_engine_breadcrumbs_irq(dev_priv->engine[RCS]);
+			intel_engine_breadcrumbs_irq(dev_priv->engine[RCS0]);
 
 		if (iir & I915_BSD_USER_INTERRUPT)
-			intel_engine_breadcrumbs_irq(dev_priv->engine[VCS]);
+			intel_engine_breadcrumbs_irq(dev_priv->engine[VCS0]);
 
 		if (iir & I915_MASTER_ERROR_INTERRUPT)
 			i9xx_error_irq_handler(dev_priv, eir, eir_stuck);
diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
index a9211c370cd1..c42c5ccf38fe 100644
--- a/drivers/gpu/drm/i915/i915_pci.c
+++ b/drivers/gpu/drm/i915/i915_pci.c
@@ -94,7 +94,7 @@ 
 	.gpu_reset_clobbers_display = true, \
 	.hws_needs_physical = 1, \
 	.unfenced_needs_alignment = 1, \
-	.ring_mask = RENDER_RING, \
+	.engine_mask = BIT(RCS0), \
 	.has_snoop = true, \
 	.has_coherent_ggtt = false, \
 	GEN_DEFAULT_PIPEOFFSETS, \
@@ -133,7 +133,7 @@  static const struct intel_device_info intel_i865g_info = {
 	.num_pipes = 2, \
 	.display.has_gmch = 1, \
 	.gpu_reset_clobbers_display = true, \
-	.ring_mask = RENDER_RING, \
+	.engine_mask = BIT(RCS0), \
 	.has_snoop = true, \
 	.has_coherent_ggtt = true, \
 	GEN_DEFAULT_PIPEOFFSETS, \
@@ -210,7 +210,7 @@  static const struct intel_device_info intel_pineview_info = {
 	.display.has_hotplug = 1, \
 	.display.has_gmch = 1, \
 	.gpu_reset_clobbers_display = true, \
-	.ring_mask = RENDER_RING, \
+	.engine_mask = BIT(RCS0), \
 	.has_snoop = true, \
 	.has_coherent_ggtt = true, \
 	GEN_DEFAULT_PIPEOFFSETS, \
@@ -239,7 +239,7 @@  static const struct intel_device_info intel_i965gm_info = {
 static const struct intel_device_info intel_g45_info = {
 	GEN4_FEATURES,
 	PLATFORM(INTEL_G45),
-	.ring_mask = RENDER_RING | BSD_RING,
+	.engine_mask = BIT(RCS0) | BIT(VCS0),
 	.gpu_reset_clobbers_display = false,
 };
 
@@ -249,7 +249,7 @@  static const struct intel_device_info intel_gm45_info = {
 	.is_mobile = 1,
 	.display.has_fbc = 1,
 	.display.supports_tv = 1,
-	.ring_mask = RENDER_RING | BSD_RING,
+	.engine_mask = BIT(RCS0) | BIT(VCS0),
 	.gpu_reset_clobbers_display = false,
 };
 
@@ -257,7 +257,7 @@  static const struct intel_device_info intel_gm45_info = {
 	GEN(5), \
 	.num_pipes = 2, \
 	.display.has_hotplug = 1, \
-	.ring_mask = RENDER_RING | BSD_RING, \
+	.engine_mask = BIT(RCS0) | BIT(VCS0), \
 	.has_snoop = true, \
 	.has_coherent_ggtt = true, \
 	/* ilk does support rc6, but we do not implement [power] contexts */ \
@@ -283,7 +283,7 @@  static const struct intel_device_info intel_ironlake_m_info = {
 	.num_pipes = 2, \
 	.display.has_hotplug = 1, \
 	.display.has_fbc = 1, \
-	.ring_mask = RENDER_RING | BSD_RING | BLT_RING, \
+	.engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0), \
 	.has_coherent_ggtt = true, \
 	.has_llc = 1, \
 	.has_rc6 = 1, \
@@ -328,7 +328,7 @@  static const struct intel_device_info intel_sandybridge_m_gt2_info = {
 	.num_pipes = 3, \
 	.display.has_hotplug = 1, \
 	.display.has_fbc = 1, \
-	.ring_mask = RENDER_RING | BSD_RING | BLT_RING, \
+	.engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0), \
 	.has_coherent_ggtt = true, \
 	.has_llc = 1, \
 	.has_rc6 = 1, \
@@ -389,7 +389,7 @@  static const struct intel_device_info intel_valleyview_info = {
 	.ppgtt = INTEL_PPGTT_FULL,
 	.has_snoop = true,
 	.has_coherent_ggtt = false,
-	.ring_mask = RENDER_RING | BSD_RING | BLT_RING,
+	.engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0),
 	.display_mmio_offset = VLV_DISPLAY_BASE,
 	GEN_DEFAULT_PAGE_SIZES,
 	GEN_DEFAULT_PIPEOFFSETS,
@@ -398,7 +398,7 @@  static const struct intel_device_info intel_valleyview_info = {
 
 #define G75_FEATURES  \
 	GEN7_FEATURES, \
-	.ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING, \
+	.engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0), \
 	.display.has_ddi = 1, \
 	.has_fpga_dbg = 1, \
 	.display.has_psr = 1, \
@@ -462,7 +462,8 @@  static const struct intel_device_info intel_broadwell_rsvd_info = {
 static const struct intel_device_info intel_broadwell_gt3_info = {
 	BDW_PLATFORM,
 	.gt = 3,
-	.ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING | BSD2_RING,
+	.engine_mask =
+		BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS1),
 };
 
 static const struct intel_device_info intel_cherryview_info = {
@@ -471,7 +472,7 @@  static const struct intel_device_info intel_cherryview_info = {
 	.num_pipes = 3,
 	.display.has_hotplug = 1,
 	.is_lp = 1,
-	.ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING,
+	.engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0),
 	.has_64bit_reloc = 1,
 	.has_runtime_pm = 1,
 	.has_rc6 = 1,
@@ -521,7 +522,8 @@  static const struct intel_device_info intel_skylake_gt2_info = {
 
 #define SKL_GT3_PLUS_PLATFORM \
 	SKL_PLATFORM, \
-	.ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING | BSD2_RING
+	.engine_mask = \
+		BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS1)
 
 
 static const struct intel_device_info intel_skylake_gt3_info = {
@@ -538,7 +540,7 @@  static const struct intel_device_info intel_skylake_gt4_info = {
 	GEN(9), \
 	.is_lp = 1, \
 	.display.has_hotplug = 1, \
-	.ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING, \
+	.engine_mask = BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0), \
 	.num_pipes = 3, \
 	.has_64bit_reloc = 1, \
 	.display.has_ddi = 1, \
@@ -592,7 +594,8 @@  static const struct intel_device_info intel_kabylake_gt2_info = {
 static const struct intel_device_info intel_kabylake_gt3_info = {
 	KBL_PLATFORM,
 	.gt = 3,
-	.ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING | BSD2_RING,
+	.engine_mask =
+		BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS1),
 };
 
 #define CFL_PLATFORM \
@@ -612,7 +615,8 @@  static const struct intel_device_info intel_coffeelake_gt2_info = {
 static const struct intel_device_info intel_coffeelake_gt3_info = {
 	CFL_PLATFORM,
 	.gt = 3,
-	.ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING | BSD2_RING,
+	.engine_mask =
+		BIT(RCS0) | BIT(VCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS1),
 };
 
 #define GEN10_FEATURES \
@@ -655,7 +659,8 @@  static const struct intel_device_info intel_icelake_11_info = {
 	GEN11_FEATURES,
 	PLATFORM(INTEL_ICELAKE),
 	.is_alpha_support = 1,
-	.ring_mask = RENDER_RING | BLT_RING | VEBOX_RING | BSD_RING | BSD3_RING,
+	.engine_mask =
+		BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS0) | BIT(VCS2),
 };
 
 #undef GEN
diff --git a/drivers/gpu/drm/i915/i915_perf.c b/drivers/gpu/drm/i915/i915_perf.c
index 9ebf99f3d8d3..891c1c2be695 100644
--- a/drivers/gpu/drm/i915/i915_perf.c
+++ b/drivers/gpu/drm/i915/i915_perf.c
@@ -1202,7 +1202,7 @@  static int i915_oa_read(struct i915_perf_stream *stream,
 static struct intel_context *oa_pin_context(struct drm_i915_private *i915,
 					    struct i915_gem_context *ctx)
 {
-	struct intel_engine_cs *engine = i915->engine[RCS];
+	struct intel_engine_cs *engine = i915->engine[RCS0];
 	struct intel_context *ce;
 	int ret;
 
@@ -1681,7 +1681,7 @@  static void gen8_update_reg_state_unlocked(struct i915_gem_context *ctx,
 	CTX_REG(reg_state, CTX_R_PWR_CLK_STATE, GEN8_R_PWR_CLK_STATE,
 		gen8_make_rpcs(dev_priv,
 			       &to_intel_context(ctx,
-						 dev_priv->engine[RCS])->sseu));
+						 dev_priv->engine[RCS0])->sseu));
 }
 
 /*
@@ -1711,7 +1711,7 @@  static void gen8_update_reg_state_unlocked(struct i915_gem_context *ctx,
 static int gen8_configure_all_contexts(struct drm_i915_private *dev_priv,
 				       const struct i915_oa_config *oa_config)
 {
-	struct intel_engine_cs *engine = dev_priv->engine[RCS];
+	struct intel_engine_cs *engine = dev_priv->engine[RCS0];
 	unsigned int map_type = i915_coherent_map_type(dev_priv);
 	struct i915_gem_context *ctx;
 	struct i915_request *rq;
@@ -2143,7 +2143,7 @@  void i915_oa_init_reg_state(struct intel_engine_cs *engine,
 {
 	struct i915_perf_stream *stream;
 
-	if (engine->id != RCS)
+	if (engine->class != RENDER_CLASS)
 		return;
 
 	stream = engine->i915->perf.oa.exclusive_stream;
diff --git a/drivers/gpu/drm/i915/i915_pmu.c b/drivers/gpu/drm/i915/i915_pmu.c
index 6560c356f279..084016200a1e 100644
--- a/drivers/gpu/drm/i915/i915_pmu.c
+++ b/drivers/gpu/drm/i915/i915_pmu.c
@@ -101,7 +101,7 @@  static bool pmu_needs_timer(struct drm_i915_private *i915, bool gpu_active)
 	 *
 	 * Use RCS as proxy for all engines.
 	 */
-	else if (intel_engine_supports_stats(i915->engine[RCS]))
+	else if (intel_engine_supports_stats(i915->engine[RCS0]))
 		enable &= ~BIT(I915_SAMPLE_BUSY);
 
 	/*
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index c9b482bc6433..dce392c18166 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -210,14 +210,14 @@  static inline bool i915_mmio_reg_valid(i915_reg_t reg)
 
 /* Engine ID */
 
-#define RCS_HW		0
-#define VCS_HW		1
-#define BCS_HW		2
-#define VECS_HW		3
-#define VCS2_HW		4
-#define VCS3_HW		6
-#define VCS4_HW		7
-#define VECS2_HW	12
+#define RCS0_HW		0
+#define VCS0_HW		1
+#define BCS0_HW		2
+#define VECS0_HW	3
+#define VCS1_HW		4
+#define VCS2_HW		6
+#define VCS3_HW		7
+#define VECS1_HW	12
 
 /* Engine class */
 
@@ -7250,8 +7250,8 @@  enum {
 #define  GEN8_GT_VECS_IRQ		(1 << 6)
 #define  GEN8_GT_GUC_IRQ		(1 << 5)
 #define  GEN8_GT_PM_IRQ			(1 << 4)
-#define  GEN8_GT_VCS2_IRQ		(1 << 3)
-#define  GEN8_GT_VCS1_IRQ		(1 << 2)
+#define  GEN8_GT_VCS1_IRQ		(1 << 3)
+#define  GEN8_GT_VCS0_IRQ		(1 << 2)
 #define  GEN8_GT_BCS_IRQ		(1 << 1)
 #define  GEN8_GT_RCS_IRQ		(1 << 0)
 
@@ -7272,8 +7272,8 @@  enum {
 
 #define GEN8_RCS_IRQ_SHIFT 0
 #define GEN8_BCS_IRQ_SHIFT 16
-#define GEN8_VCS1_IRQ_SHIFT 0
-#define GEN8_VCS2_IRQ_SHIFT 16
+#define GEN8_VCS0_IRQ_SHIFT 0
+#define GEN8_VCS1_IRQ_SHIFT 16
 #define GEN8_VECS_IRQ_SHIFT 0
 #define GEN8_WD_IRQ_SHIFT 16
 
diff --git a/drivers/gpu/drm/i915/i915_reset.c b/drivers/gpu/drm/i915/i915_reset.c
index 55d6123dbba4..3fbaa72a9eac 100644
--- a/drivers/gpu/drm/i915/i915_reset.c
+++ b/drivers/gpu/drm/i915/i915_reset.c
@@ -297,12 +297,12 @@  static int gen6_reset_engines(struct drm_i915_private *i915,
 			      unsigned int retry)
 {
 	struct intel_engine_cs *engine;
-	const u32 hw_engine_mask[I915_NUM_ENGINES] = {
-		[RCS] = GEN6_GRDOM_RENDER,
-		[BCS] = GEN6_GRDOM_BLT,
-		[VCS] = GEN6_GRDOM_MEDIA,
-		[VCS2] = GEN8_GRDOM_MEDIA2,
-		[VECS] = GEN6_GRDOM_VECS,
+	const u32 hw_engine_mask[] = {
+		[RCS0]  = GEN6_GRDOM_RENDER,
+		[BCS0]  = GEN6_GRDOM_BLT,
+		[VCS0]  = GEN6_GRDOM_MEDIA,
+		[VCS1]  = GEN8_GRDOM_MEDIA2,
+		[VECS0] = GEN6_GRDOM_VECS,
 	};
 	u32 hw_mask;
 
@@ -312,8 +312,10 @@  static int gen6_reset_engines(struct drm_i915_private *i915,
 		unsigned int tmp;
 
 		hw_mask = 0;
-		for_each_engine_masked(engine, i915, engine_mask, tmp)
+		for_each_engine_masked(engine, i915, engine_mask, tmp) {
+			GEM_BUG_ON(engine->id >= ARRAY_SIZE(hw_engine_mask));
 			hw_mask |= hw_engine_mask[engine->id];
+		}
 	}
 
 	return gen6_hw_domain_reset(i915, hw_mask);
@@ -420,28 +422,27 @@  static int gen11_reset_engines(struct drm_i915_private *i915,
 			       unsigned int engine_mask,
 			       unsigned int retry)
 {
-	const u32 hw_engine_mask[I915_NUM_ENGINES] = {
-		[RCS] = GEN11_GRDOM_RENDER,
-		[BCS] = GEN11_GRDOM_BLT,
-		[VCS] = GEN11_GRDOM_MEDIA,
-		[VCS2] = GEN11_GRDOM_MEDIA2,
-		[VCS3] = GEN11_GRDOM_MEDIA3,
-		[VCS4] = GEN11_GRDOM_MEDIA4,
-		[VECS] = GEN11_GRDOM_VECS,
-		[VECS2] = GEN11_GRDOM_VECS2,
+	const u32 hw_engine_mask[] = {
+		[RCS0]  = GEN11_GRDOM_RENDER,
+		[BCS0]  = GEN11_GRDOM_BLT,
+		[VCS0]  = GEN11_GRDOM_MEDIA,
+		[VCS1]  = GEN11_GRDOM_MEDIA2,
+		[VCS2]  = GEN11_GRDOM_MEDIA3,
+		[VCS3]  = GEN11_GRDOM_MEDIA4,
+		[VECS0] = GEN11_GRDOM_VECS,
+		[VECS1] = GEN11_GRDOM_VECS2,
 	};
 	struct intel_engine_cs *engine;
 	unsigned int tmp;
 	u32 hw_mask;
 	int ret;
 
-	BUILD_BUG_ON(VECS2 + 1 != I915_NUM_ENGINES);
-
 	if (engine_mask == ALL_ENGINES) {
 		hw_mask = GEN11_GRDOM_FULL;
 	} else {
 		hw_mask = 0;
 		for_each_engine_masked(engine, i915, engine_mask, tmp) {
+			GEM_BUG_ON(engine->id >= ARRAY_SIZE(hw_engine_mask));
 			hw_mask |= hw_engine_mask[engine->id];
 			hw_mask |= gen11_lock_sfc(i915, engine);
 		}
@@ -692,7 +693,7 @@  static int gt_reset(struct drm_i915_private *i915, unsigned int stalled_mask)
 		return err;
 
 	for_each_engine(engine, i915, id)
-		intel_engine_reset(engine, stalled_mask & ENGINE_MASK(id));
+		intel_engine_reset(engine, stalled_mask & engine->mask);
 
 	i915_gem_restore_fences(i915);
 
@@ -1057,7 +1058,7 @@  void i915_reset(struct drm_i915_private *i915,
 static inline int intel_gt_reset_engine(struct drm_i915_private *i915,
 					struct intel_engine_cs *engine)
 {
-	return intel_gpu_reset(i915, intel_engine_flag(engine));
+	return intel_gpu_reset(i915, engine->mask);
 }
 
 /**
@@ -1193,7 +1194,7 @@  void i915_clear_error_registers(struct drm_i915_private *dev_priv)
 				   I915_READ(RING_FAULT_REG(engine)) &
 				   ~RING_FAULT_VALID);
 		}
-		POSTING_READ(RING_FAULT_REG(dev_priv->engine[RCS]));
+		POSTING_READ(RING_FAULT_REG(dev_priv->engine[RCS0]));
 	}
 }
 
@@ -1241,7 +1242,7 @@  void i915_handle_error(struct drm_i915_private *i915,
 	 */
 	wakeref = intel_runtime_pm_get(i915);
 
-	engine_mask &= INTEL_INFO(i915)->ring_mask;
+	engine_mask &= INTEL_INFO(i915)->engine_mask;
 
 	if (flags & I915_ERROR_CAPTURE) {
 		i915_capture_error_state(i915, engine_mask, msg);
@@ -1260,7 +1261,7 @@  void i915_handle_error(struct drm_i915_private *i915,
 				continue;
 
 			if (i915_reset_engine(engine, msg) == 0)
-				engine_mask &= ~intel_engine_flag(engine);
+				engine_mask &= ~engine->mask;
 
 			clear_bit(I915_RESET_ENGINE + engine->id,
 				  &error->flags);
diff --git a/drivers/gpu/drm/i915/intel_device_info.c b/drivers/gpu/drm/i915/intel_device_info.c
index 855a5074ad77..2c1b46cfd6d3 100644
--- a/drivers/gpu/drm/i915/intel_device_info.c
+++ b/drivers/gpu/drm/i915/intel_device_info.c
@@ -738,7 +738,7 @@  void intel_device_info_runtime_init(struct drm_i915_private *dev_priv)
 		runtime->num_scalers[PIPE_C] = 1;
 	}
 
-	BUILD_BUG_ON(I915_NUM_ENGINES > BITS_PER_TYPE(intel_ring_mask_t));
+	BUILD_BUG_ON(BITS_PER_TYPE(intel_engine_mask_t) < I915_NUM_ENGINES);
 
 	if (IS_GEN(dev_priv, 11))
 		for_each_pipe(dev_priv, pipe)
@@ -887,7 +887,7 @@  void intel_device_info_init_mmio(struct drm_i915_private *dev_priv)
 			continue;
 
 		if (!(BIT(i) & RUNTIME_INFO(dev_priv)->vdbox_enable)) {
-			info->ring_mask &= ~ENGINE_MASK(_VCS(i));
+			info->engine_mask &= ~BIT(_VCS(i));
 			DRM_DEBUG_DRIVER("vcs%u fused off\n", i);
 			continue;
 		}
@@ -906,7 +906,7 @@  void intel_device_info_init_mmio(struct drm_i915_private *dev_priv)
 			continue;
 
 		if (!(BIT(i) & RUNTIME_INFO(dev_priv)->vebox_enable)) {
-			info->ring_mask &= ~ENGINE_MASK(_VECS(i));
+			info->engine_mask &= ~BIT(_VECS(i));
 			DRM_DEBUG_DRIVER("vecs%u fused off\n", i);
 		}
 	}
diff --git a/drivers/gpu/drm/i915/intel_device_info.h b/drivers/gpu/drm/i915/intel_device_info.h
index e8b8661df746..047d10bdd455 100644
--- a/drivers/gpu/drm/i915/intel_device_info.h
+++ b/drivers/gpu/drm/i915/intel_device_info.h
@@ -150,14 +150,14 @@  struct sseu_dev_info {
 	u8 eu_mask[GEN_MAX_SLICES * GEN_MAX_SUBSLICES];
 };
 
-typedef u8 intel_ring_mask_t;
+typedef u8 intel_engine_mask_t;
 
 struct intel_device_info {
 	u16 gen_mask;
 
 	u8 gen;
 	u8 gt; /* GT number, 0 if undefined */
-	intel_ring_mask_t ring_mask; /* Rings supported by the HW */
+	intel_engine_mask_t engine_mask; /* Engines supported by the HW */
 
 	enum intel_platform platform;
 	u32 platform_mask;
@@ -200,7 +200,7 @@  struct intel_runtime_info {
 	u8 num_sprites[I915_MAX_PIPES];
 	u8 num_scalers[I915_MAX_PIPES];
 
-	u8 num_rings;
+	u8 num_engines;
 
 	/* Slice/subslice/EU info */
 	struct sseu_dev_info sseu;
diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c b/drivers/gpu/drm/i915/intel_engine_cs.c
index 4fc7e2ac6278..2f7b6c7aeb78 100644
--- a/drivers/gpu/drm/i915/intel_engine_cs.c
+++ b/drivers/gpu/drm/i915/intel_engine_cs.c
@@ -95,8 +95,8 @@  struct engine_info {
 };
 
 static const struct engine_info intel_engines[] = {
-	[RCS] = {
-		.hw_id = RCS_HW,
+	[RCS0] = {
+		.hw_id = RCS0_HW,
 		.uabi_id = I915_EXEC_RENDER,
 		.class = RENDER_CLASS,
 		.instance = 0,
@@ -104,8 +104,8 @@  static const struct engine_info intel_engines[] = {
 			{ .gen = 1, .base = RENDER_RING_BASE }
 		},
 	},
-	[BCS] = {
-		.hw_id = BCS_HW,
+	[BCS0] = {
+		.hw_id = BCS0_HW,
 		.uabi_id = I915_EXEC_BLT,
 		.class = COPY_ENGINE_CLASS,
 		.instance = 0,
@@ -113,8 +113,8 @@  static const struct engine_info intel_engines[] = {
 			{ .gen = 6, .base = BLT_RING_BASE }
 		},
 	},
-	[VCS] = {
-		.hw_id = VCS_HW,
+	[VCS0] = {
+		.hw_id = VCS0_HW,
 		.uabi_id = I915_EXEC_BSD,
 		.class = VIDEO_DECODE_CLASS,
 		.instance = 0,
@@ -124,8 +124,8 @@  static const struct engine_info intel_engines[] = {
 			{ .gen = 4, .base = BSD_RING_BASE }
 		},
 	},
-	[VCS2] = {
-		.hw_id = VCS2_HW,
+	[VCS1] = {
+		.hw_id = VCS1_HW,
 		.uabi_id = I915_EXEC_BSD,
 		.class = VIDEO_DECODE_CLASS,
 		.instance = 1,
@@ -134,8 +134,8 @@  static const struct engine_info intel_engines[] = {
 			{ .gen = 8, .base = GEN8_BSD2_RING_BASE }
 		},
 	},
-	[VCS3] = {
-		.hw_id = VCS3_HW,
+	[VCS2] = {
+		.hw_id = VCS2_HW,
 		.uabi_id = I915_EXEC_BSD,
 		.class = VIDEO_DECODE_CLASS,
 		.instance = 2,
@@ -143,8 +143,8 @@  static const struct engine_info intel_engines[] = {
 			{ .gen = 11, .base = GEN11_BSD3_RING_BASE }
 		},
 	},
-	[VCS4] = {
-		.hw_id = VCS4_HW,
+	[VCS3] = {
+		.hw_id = VCS3_HW,
 		.uabi_id = I915_EXEC_BSD,
 		.class = VIDEO_DECODE_CLASS,
 		.instance = 3,
@@ -152,8 +152,8 @@  static const struct engine_info intel_engines[] = {
 			{ .gen = 11, .base = GEN11_BSD4_RING_BASE }
 		},
 	},
-	[VECS] = {
-		.hw_id = VECS_HW,
+	[VECS0] = {
+		.hw_id = VECS0_HW,
 		.uabi_id = I915_EXEC_VEBOX,
 		.class = VIDEO_ENHANCEMENT_CLASS,
 		.instance = 0,
@@ -162,8 +162,8 @@  static const struct engine_info intel_engines[] = {
 			{ .gen = 7, .base = VEBOX_RING_BASE }
 		},
 	},
-	[VECS2] = {
-		.hw_id = VECS2_HW,
+	[VECS1] = {
+		.hw_id = VECS1_HW,
 		.uabi_id = I915_EXEC_VEBOX,
 		.class = VIDEO_ENHANCEMENT_CLASS,
 		.instance = 1,
@@ -313,7 +313,10 @@  intel_engine_setup(struct drm_i915_private *dev_priv,
 	if (!engine)
 		return -ENOMEM;
 
+	BUILD_BUG_ON(BITS_PER_TYPE(engine->mask) < I915_NUM_ENGINES);
+
 	engine->id = id;
+	engine->mask = BIT(id);
 	engine->i915 = dev_priv;
 	__sprint_engine_name(engine->name, info);
 	engine->hw_id = engine->guc_id = info->hw_id;
@@ -355,15 +358,15 @@  intel_engine_setup(struct drm_i915_private *dev_priv,
 int intel_engines_init_mmio(struct drm_i915_private *dev_priv)
 {
 	struct intel_device_info *device_info = mkwrite_device_info(dev_priv);
-	const unsigned int ring_mask = INTEL_INFO(dev_priv)->ring_mask;
+	const unsigned int engine_mask = INTEL_INFO(dev_priv)->engine_mask;
 	struct intel_engine_cs *engine;
 	enum intel_engine_id id;
 	unsigned int mask = 0;
 	unsigned int i;
 	int err;
 
-	WARN_ON(ring_mask == 0);
-	WARN_ON(ring_mask &
+	WARN_ON(engine_mask == 0);
+	WARN_ON(engine_mask &
 		GENMASK(BITS_PER_TYPE(mask) - 1, I915_NUM_ENGINES));
 
 	if (i915_inject_load_failure())
@@ -377,7 +380,7 @@  int intel_engines_init_mmio(struct drm_i915_private *dev_priv)
 		if (err)
 			goto cleanup;
 
-		mask |= ENGINE_MASK(i);
+		mask |= BIT(i);
 	}
 
 	/*
@@ -385,16 +388,16 @@  int intel_engines_init_mmio(struct drm_i915_private *dev_priv)
 	 * are added to the driver by a warning and disabling the forgotten
 	 * engines.
 	 */
-	if (WARN_ON(mask != ring_mask))
-		device_info->ring_mask = mask;
+	if (WARN_ON(mask != engine_mask))
+		device_info->engine_mask = mask;
 
 	/* We always presume we have at least RCS available for later probing */
-	if (WARN_ON(!HAS_ENGINE(dev_priv, RCS))) {
+	if (WARN_ON(!HAS_ENGINE(dev_priv, RCS0))) {
 		err = -ENODEV;
 		goto cleanup;
 	}
 
-	RUNTIME_INFO(dev_priv)->num_rings = hweight32(mask);
+	RUNTIME_INFO(dev_priv)->num_engines = hweight32(mask);
 
 	i915_check_and_clear_faults(dev_priv);
 
@@ -964,7 +967,7 @@  void intel_engine_get_instdone(struct intel_engine_cs *engine,
 	default:
 		instdone->instdone = I915_READ(RING_INSTDONE(mmio_base));
 
-		if (engine->id != RCS)
+		if (engine->id != RCS0)
 			break;
 
 		instdone->slice_common = I915_READ(GEN7_SC_INSTDONE);
@@ -980,7 +983,7 @@  void intel_engine_get_instdone(struct intel_engine_cs *engine,
 	case 7:
 		instdone->instdone = I915_READ(RING_INSTDONE(mmio_base));
 
-		if (engine->id != RCS)
+		if (engine->id != RCS0)
 			break;
 
 		instdone->slice_common = I915_READ(GEN7_SC_INSTDONE);
@@ -993,7 +996,7 @@  void intel_engine_get_instdone(struct intel_engine_cs *engine,
 	case 4:
 		instdone->instdone = I915_READ(RING_INSTDONE(mmio_base));
 
-		if (engine->id == RCS)
+		if (engine->id == RCS0)
 			/* HACK: Using the wrong struct member */
 			instdone->slice_common = I915_READ(GEN4_INSTDONE1);
 		break;
@@ -1365,7 +1368,7 @@  static void intel_engine_print_registers(const struct intel_engine_cs *engine,
 		&engine->execlists;
 	u64 addr;
 
-	if (engine->id == RCS && IS_GEN_RANGE(dev_priv, 4, 7))
+	if (engine->id == RCS0 && IS_GEN_RANGE(dev_priv, 4, 7))
 		drm_printf(m, "\tCCID: 0x%08x\n", I915_READ(CCID));
 	drm_printf(m, "\tRING_START: 0x%08x\n",
 		   I915_READ(RING_START(engine->mmio_base)));
diff --git a/drivers/gpu/drm/i915/intel_guc_ads.c b/drivers/gpu/drm/i915/intel_guc_ads.c
index f0db62887f50..c51d558fd431 100644
--- a/drivers/gpu/drm/i915/intel_guc_ads.c
+++ b/drivers/gpu/drm/i915/intel_guc_ads.c
@@ -122,7 +122,7 @@  int intel_guc_ads_create(struct intel_guc *guc)
 	 * because our GuC shared data is there.
 	 */
 	kernel_ctx_vma = to_intel_context(dev_priv->kernel_context,
-					  dev_priv->engine[RCS])->state;
+					  dev_priv->engine[RCS0])->state;
 	blob->ads.golden_context_lrca =
 		intel_guc_ggtt_offset(guc, kernel_ctx_vma) + skipped_offset;
 
diff --git a/drivers/gpu/drm/i915/intel_guc_submission.c b/drivers/gpu/drm/i915/intel_guc_submission.c
index 56ba2fcbabe6..e3afc91f0e7b 100644
--- a/drivers/gpu/drm/i915/intel_guc_submission.c
+++ b/drivers/gpu/drm/i915/intel_guc_submission.c
@@ -575,7 +575,7 @@  static void inject_preempt_context(struct work_struct *work)
 		u32 *cs;
 
 		cs = ce->ring->vaddr;
-		if (engine->id == RCS) {
+		if (engine->class == RENDER_CLASS) {
 			cs = gen8_emit_ggtt_write_rcs(cs,
 						      GUC_PREEMPT_FINISHED,
 						      addr,
@@ -1030,7 +1030,7 @@  static int guc_clients_create(struct intel_guc *guc)
 	GEM_BUG_ON(guc->preempt_client);
 
 	client = guc_client_alloc(dev_priv,
-				  INTEL_INFO(dev_priv)->ring_mask,
+				  INTEL_INFO(dev_priv)->engine_mask,
 				  GUC_CLIENT_PRIORITY_KMD_NORMAL,
 				  dev_priv->kernel_context);
 	if (IS_ERR(client)) {
@@ -1041,7 +1041,7 @@  static int guc_clients_create(struct intel_guc *guc)
 
 	if (dev_priv->preempt_context) {
 		client = guc_client_alloc(dev_priv,
-					  INTEL_INFO(dev_priv)->ring_mask,
+					  INTEL_INFO(dev_priv)->engine_mask,
 					  GUC_CLIENT_PRIORITY_KMD_HIGH,
 					  dev_priv->preempt_context);
 		if (IS_ERR(client)) {
diff --git a/drivers/gpu/drm/i915/intel_hangcheck.c b/drivers/gpu/drm/i915/intel_hangcheck.c
index f1d8dfc58049..57ed49dc19c4 100644
--- a/drivers/gpu/drm/i915/intel_hangcheck.c
+++ b/drivers/gpu/drm/i915/intel_hangcheck.c
@@ -56,7 +56,7 @@  static bool subunits_stuck(struct intel_engine_cs *engine)
 	int slice;
 	int subslice;
 
-	if (engine->id != RCS)
+	if (engine->id != RCS0)
 		return true;
 
 	intel_engine_get_instdone(engine, &instdone);
@@ -120,7 +120,7 @@  engine_stuck(struct intel_engine_cs *engine, u64 acthd)
 	 */
 	tmp = I915_READ_CTL(engine);
 	if (tmp & RING_WAIT) {
-		i915_handle_error(dev_priv, BIT(engine->id), 0,
+		i915_handle_error(dev_priv, engine->mask, 0,
 				  "stuck wait on %s", engine->name);
 		I915_WRITE_CTL(engine, tmp);
 		return ENGINE_WAIT_KICK;
@@ -282,13 +282,13 @@  static void i915_hangcheck_elapsed(struct work_struct *work)
 		hangcheck_store_sample(engine, &hc);
 
 		if (hc.stalled) {
-			hung |= intel_engine_flag(engine);
+			hung |= engine->mask;
 			if (hc.action != ENGINE_DEAD)
-				stuck |= intel_engine_flag(engine);
+				stuck |= engine->mask;
 		}
 
 		if (hc.wedged)
-			wedged |= intel_engine_flag(engine);
+			wedged |= engine->mask;
 	}
 
 	if (GEM_SHOW_DEBUG() && (hung | stuck)) {
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index 578c8c98c718..6ec6c4e175a2 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -1777,7 +1777,7 @@  static int intel_init_workaround_bb(struct intel_engine_cs *engine)
 	unsigned int i;
 	int ret;
 
-	if (GEM_DEBUG_WARN_ON(engine->id != RCS))
+	if (GEM_DEBUG_WARN_ON(engine->id != RCS0))
 		return -EINVAL;
 
 	switch (INTEL_GEN(engine->i915)) {
@@ -2376,11 +2376,11 @@  logical_ring_default_irqs(struct intel_engine_cs *engine)
 
 	if (INTEL_GEN(engine->i915) < 11) {
 		const u8 irq_shifts[] = {
-			[RCS]  = GEN8_RCS_IRQ_SHIFT,
-			[BCS]  = GEN8_BCS_IRQ_SHIFT,
-			[VCS]  = GEN8_VCS1_IRQ_SHIFT,
-			[VCS2] = GEN8_VCS2_IRQ_SHIFT,
-			[VECS] = GEN8_VECS_IRQ_SHIFT,
+			[RCS0]  = GEN8_RCS_IRQ_SHIFT,
+			[BCS0]  = GEN8_BCS_IRQ_SHIFT,
+			[VCS0]  = GEN8_VCS0_IRQ_SHIFT,
+			[VCS1]  = GEN8_VCS1_IRQ_SHIFT,
+			[VECS0] = GEN8_VECS_IRQ_SHIFT,
 		};
 
 		shift = irq_shifts[engine->id];
diff --git a/drivers/gpu/drm/i915/intel_mocs.c b/drivers/gpu/drm/i915/intel_mocs.c
index 331e7a678fb7..80dcc08222d0 100644
--- a/drivers/gpu/drm/i915/intel_mocs.c
+++ b/drivers/gpu/drm/i915/intel_mocs.c
@@ -288,17 +288,17 @@  static bool get_mocs_settings(struct drm_i915_private *dev_priv,
 static i915_reg_t mocs_register(enum intel_engine_id engine_id, int index)
 {
 	switch (engine_id) {
-	case RCS:
+	case RCS0:
 		return GEN9_GFX_MOCS(index);
-	case VCS:
+	case VCS0:
 		return GEN9_MFX0_MOCS(index);
-	case BCS:
+	case BCS0:
 		return GEN9_BLT_MOCS(index);
-	case VECS:
+	case VECS0:
 		return GEN9_VEBOX_MOCS(index);
-	case VCS2:
+	case VCS1:
 		return GEN9_MFX1_MOCS(index);
-	case VCS3:
+	case VCS2:
 		return GEN11_MFX2_MOCS(index);
 	default:
 		MISSING_CASE(engine_id);
diff --git a/drivers/gpu/drm/i915/intel_overlay.c b/drivers/gpu/drm/i915/intel_overlay.c
index c0df1dbb0069..a882b8d42bd9 100644
--- a/drivers/gpu/drm/i915/intel_overlay.c
+++ b/drivers/gpu/drm/i915/intel_overlay.c
@@ -236,7 +236,7 @@  static int intel_overlay_do_wait_request(struct intel_overlay *overlay,
 static struct i915_request *alloc_request(struct intel_overlay *overlay)
 {
 	struct drm_i915_private *dev_priv = overlay->i915;
-	struct intel_engine_cs *engine = dev_priv->engine[RCS];
+	struct intel_engine_cs *engine = dev_priv->engine[RCS0];
 
 	return i915_request_alloc(engine, dev_priv->kernel_context);
 }
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index 1b96b0960adc..1dd0c99b893f 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -552,16 +552,17 @@  static void set_hwsp(struct intel_engine_cs *engine, u32 offset)
 		 */
 		default:
 			GEM_BUG_ON(engine->id);
-		case RCS:
+			/* fallthrough */
+		case RCS0:
 			hwsp = RENDER_HWS_PGA_GEN7;
 			break;
-		case BCS:
+		case BCS0:
 			hwsp = BLT_HWS_PGA_GEN7;
 			break;
-		case VCS:
+		case VCS0:
 			hwsp = BSD_HWS_PGA_GEN7;
 			break;
-		case VECS:
+		case VECS0:
 			hwsp = VEBOX_HWS_PGA_GEN7;
 			break;
 		}
@@ -1692,8 +1693,8 @@  static inline int mi_set_context(struct i915_request *rq, u32 flags)
 	struct drm_i915_private *i915 = rq->i915;
 	struct intel_engine_cs *engine = rq->engine;
 	enum intel_engine_id id;
-	const int num_rings =
-		IS_HSW_GT1(i915) ? RUNTIME_INFO(i915)->num_rings - 1 : 0;
+	const int num_engines =
+		IS_HSW_GT1(i915) ? RUNTIME_INFO(i915)->num_engines - 1 : 0;
 	bool force_restore = false;
 	int len;
 	u32 *cs;
@@ -1707,7 +1708,7 @@  static inline int mi_set_context(struct i915_request *rq, u32 flags)
 
 	len = 4;
 	if (IS_GEN(i915, 7))
-		len += 2 + (num_rings ? 4*num_rings + 6 : 0);
+		len += 2 + (num_engines ? 4 * num_engines + 6 : 0);
 	if (flags & MI_FORCE_RESTORE) {
 		GEM_BUG_ON(flags & MI_RESTORE_INHIBIT);
 		flags &= ~MI_FORCE_RESTORE;
@@ -1722,10 +1723,10 @@  static inline int mi_set_context(struct i915_request *rq, u32 flags)
 	/* WaProgramMiArbOnOffAroundMiSetContext:ivb,vlv,hsw,bdw,chv */
 	if (IS_GEN(i915, 7)) {
 		*cs++ = MI_ARB_ON_OFF | MI_ARB_DISABLE;
-		if (num_rings) {
+		if (num_engines) {
 			struct intel_engine_cs *signaller;
 
-			*cs++ = MI_LOAD_REGISTER_IMM(num_rings);
+			*cs++ = MI_LOAD_REGISTER_IMM(num_engines);
 			for_each_engine(signaller, i915, id) {
 				if (signaller == engine)
 					continue;
@@ -1768,11 +1769,11 @@  static inline int mi_set_context(struct i915_request *rq, u32 flags)
 	*cs++ = MI_NOOP;
 
 	if (IS_GEN(i915, 7)) {
-		if (num_rings) {
+		if (num_engines) {
 			struct intel_engine_cs *signaller;
 			i915_reg_t last_reg = {}; /* keep gcc quiet */
 
-			*cs++ = MI_LOAD_REGISTER_IMM(num_rings);
+			*cs++ = MI_LOAD_REGISTER_IMM(num_engines);
 			for_each_engine(signaller, i915, id) {
 				if (signaller == engine)
 					continue;
@@ -1850,7 +1851,7 @@  static int switch_context(struct i915_request *rq)
 		 * explanation.
 		 */
 		loops = 1;
-		if (engine->id == BCS && IS_VALLEYVIEW(engine->i915))
+		if (engine->id == BCS0 && IS_VALLEYVIEW(engine->i915))
 			loops = 32;
 
 		do {
@@ -1859,15 +1860,15 @@  static int switch_context(struct i915_request *rq)
 				goto err;
 		} while (--loops);
 
-		if (intel_engine_flag(engine) & ppgtt->pd_dirty_rings) {
-			unwind_mm = intel_engine_flag(engine);
-			ppgtt->pd_dirty_rings &= ~unwind_mm;
+		if (ppgtt->pd_dirty_engines & engine->mask) {
+			unwind_mm = engine->mask;
+			ppgtt->pd_dirty_engines &= ~unwind_mm;
 			hw_flags = MI_FORCE_RESTORE;
 		}
 	}
 
 	if (rq->hw_context->state) {
-		GEM_BUG_ON(engine->id != RCS);
+		GEM_BUG_ON(engine->id != RCS0);
 
 		/*
 		 * The kernel context(s) is treated as pure scratch and is not
@@ -1927,7 +1928,7 @@  static int switch_context(struct i915_request *rq)
 
 err_mm:
 	if (unwind_mm)
-		ppgtt->pd_dirty_rings |= unwind_mm;
+		ppgtt->pd_dirty_engines |= unwind_mm;
 err:
 	return ret;
 }
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h
index 2e7264119ec4..ec968140b46f 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.h
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.h
@@ -10,12 +10,12 @@ 
 #include <linux/seqlock.h>
 
 #include "i915_gem_batch_pool.h"
-
-#include "i915_reg.h"
 #include "i915_pmu.h"
+#include "i915_reg.h"
 #include "i915_request.h"
 #include "i915_selftest.h"
 #include "i915_timeline.h"
+#include "intel_device_info.h"
 #include "intel_gpu_commands.h"
 #include "intel_workarounds.h"
 
@@ -175,16 +175,16 @@  struct i915_request;
  * Keep instances of the same type engine together.
  */
 enum intel_engine_id {
-	RCS = 0,
-	BCS,
-	VCS,
+	RCS0 = 0,
+	BCS0,
+	VCS0,
+	VCS1,
 	VCS2,
 	VCS3,
-	VCS4,
-#define _VCS(n) (VCS + (n))
-	VECS,
-	VECS2
-#define _VECS(n) (VECS + (n))
+#define _VCS(n) (VCS0 + (n))
+	VECS0,
+	VECS1
+#define _VECS(n) (VECS0 + (n))
 };
 
 struct st_preempt_hang {
@@ -334,6 +334,7 @@  struct intel_engine_cs {
 	enum intel_engine_id id;
 	unsigned int hw_id;
 	unsigned int guc_id;
+	intel_engine_mask_t mask;
 
 	u8 uabi_id;
 	u8 uabi_class;
@@ -668,12 +669,6 @@  execlists_port_complete(struct intel_engine_execlists * const execlists,
 	return port;
 }
 
-static inline unsigned int
-intel_engine_flag(const struct intel_engine_cs *engine)
-{
-	return BIT(engine->id);
-}
-
 static inline u32
 intel_read_status_page(const struct intel_engine_cs *engine, int reg)
 {
diff --git a/drivers/gpu/drm/i915/intel_workarounds.c b/drivers/gpu/drm/i915/intel_workarounds.c
index 743cf5b00155..7bbc5849f111 100644
--- a/drivers/gpu/drm/i915/intel_workarounds.c
+++ b/drivers/gpu/drm/i915/intel_workarounds.c
@@ -1059,7 +1059,7 @@  void intel_engine_init_whitelist(struct intel_engine_cs *engine)
 	struct drm_i915_private *i915 = engine->i915;
 	struct i915_wa_list *w = &engine->whitelist;
 
-	GEM_BUG_ON(engine->id != RCS);
+	GEM_BUG_ON(engine->id != RCS0);
 
 	wa_init_start(w, "whitelist");
 
@@ -1236,7 +1236,7 @@  engine_init_workarounds(struct intel_engine_cs *engine, struct i915_wa_list *wal
 	if (I915_SELFTEST_ONLY(INTEL_GEN(engine->i915) < 8))
 		return;
 
-	if (engine->id == RCS)
+	if (engine->id == RCS0)
 		rcs_engine_wa_init(engine, wal);
 	else
 		xcs_engine_wa_init(engine, wal);
diff --git a/drivers/gpu/drm/i915/selftests/huge_pages.c b/drivers/gpu/drm/i915/selftests/huge_pages.c
index 4b9ded4ca0f5..1e66cff985f8 100644
--- a/drivers/gpu/drm/i915/selftests/huge_pages.c
+++ b/drivers/gpu/drm/i915/selftests/huge_pages.c
@@ -1535,7 +1535,7 @@  static int igt_ppgtt_pin_update(void *arg)
 	 * land in the now stale 2M page.
 	 */
 
-	err = gpu_write(vma, ctx, dev_priv->engine[RCS], 0, 0xdeadbeaf);
+	err = gpu_write(vma, ctx, dev_priv->engine[RCS0], 0, 0xdeadbeaf);
 	if (err)
 		goto out_unpin;
 
@@ -1653,7 +1653,7 @@  static int igt_shrink_thp(void *arg)
 	if (err)
 		goto out_unpin;
 
-	err = gpu_write(vma, ctx, i915->engine[RCS], 0, 0xdeadbeaf);
+	err = gpu_write(vma, ctx, i915->engine[RCS0], 0, 0xdeadbeaf);
 	if (err)
 		goto out_unpin;
 
diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_coherency.c b/drivers/gpu/drm/i915/selftests/i915_gem_coherency.c
index 9c16aff87028..e43630b40fce 100644
--- a/drivers/gpu/drm/i915/selftests/i915_gem_coherency.c
+++ b/drivers/gpu/drm/i915/selftests/i915_gem_coherency.c
@@ -202,7 +202,7 @@  static int gpu_set(struct drm_i915_gem_object *obj,
 	if (IS_ERR(vma))
 		return PTR_ERR(vma);
 
-	rq = i915_request_alloc(i915->engine[RCS], i915->kernel_context);
+	rq = i915_request_alloc(i915->engine[RCS0], i915->kernel_context);
 	if (IS_ERR(rq)) {
 		i915_vma_unpin(vma);
 		return PTR_ERR(rq);
@@ -256,7 +256,7 @@  static bool needs_mi_store_dword(struct drm_i915_private *i915)
 	if (i915_terminally_wedged(i915))
 		return false;
 
-	return intel_engine_can_store_dword(i915->engine[RCS]);
+	return intel_engine_can_store_dword(i915->engine[RCS0]);
 }
 
 static const struct igt_coherency_mode {
diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_context.c b/drivers/gpu/drm/i915/selftests/i915_gem_context.c
index 3a238b9628b3..30111c004eb6 100644
--- a/drivers/gpu/drm/i915/selftests/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/selftests/i915_gem_context.c
@@ -556,7 +556,7 @@  static int igt_ctx_exec(void *arg)
 		ncontexts++;
 	}
 	pr_info("Submitted %lu contexts (across %u engines), filling %lu dwords\n",
-		ncontexts, RUNTIME_INFO(i915)->num_rings, ndwords);
+		ncontexts, RUNTIME_INFO(i915)->num_engines, ndwords);
 
 	dw = 0;
 	list_for_each_entry(obj, &objects, st_link) {
@@ -923,7 +923,7 @@  __igt_ctx_sseu(struct drm_i915_private *i915,
 	       unsigned int flags)
 {
 	struct intel_sseu default_sseu = intel_device_default_sseu(i915);
-	struct intel_engine_cs *engine = i915->engine[RCS];
+	struct intel_engine_cs *engine = i915->engine[RCS0];
 	struct drm_i915_gem_object *obj;
 	struct i915_gem_context *ctx;
 	struct intel_sseu pg_sseu;
@@ -1126,7 +1126,7 @@  static int igt_ctx_readonly(void *arg)
 		}
 	}
 	pr_info("Submitted %lu dwords (across %u engines)\n",
-		ndwords, RUNTIME_INFO(i915)->num_rings);
+		ndwords, RUNTIME_INFO(i915)->num_engines);
 
 	dw = 0;
 	list_for_each_entry(obj, &objects, st_link) {
@@ -1459,7 +1459,7 @@  static int igt_vm_isolation(void *arg)
 		count += this;
 	}
 	pr_info("Checked %lu scratch offsets across %d engines\n",
-		count, RUNTIME_INFO(i915)->num_rings);
+		count, RUNTIME_INFO(i915)->num_engines);
 
 out_rpm:
 	intel_runtime_pm_put(i915, wakeref);
diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_object.c b/drivers/gpu/drm/i915/selftests/i915_gem_object.c
index 784982aed625..971148fbe6f5 100644
--- a/drivers/gpu/drm/i915/selftests/i915_gem_object.c
+++ b/drivers/gpu/drm/i915/selftests/i915_gem_object.c
@@ -468,7 +468,7 @@  static int make_obj_busy(struct drm_i915_gem_object *obj)
 	if (err)
 		return err;
 
-	rq = i915_request_alloc(i915->engine[RCS], i915->kernel_context);
+	rq = i915_request_alloc(i915->engine[RCS0], i915->kernel_context);
 	if (IS_ERR(rq)) {
 		i915_vma_unpin(vma);
 		return PTR_ERR(rq);
diff --git a/drivers/gpu/drm/i915/selftests/i915_request.c b/drivers/gpu/drm/i915/selftests/i915_request.c
index 7e1b65b8eb19..3eb6a6b075ab 100644
--- a/drivers/gpu/drm/i915/selftests/i915_request.c
+++ b/drivers/gpu/drm/i915/selftests/i915_request.c
@@ -42,7 +42,7 @@  static int igt_add_request(void *arg)
 	/* Basic preliminary test to create a request and let it loose! */
 
 	mutex_lock(&i915->drm.struct_mutex);
-	request = mock_request(i915->engine[RCS],
+	request = mock_request(i915->engine[RCS0],
 			       i915->kernel_context,
 			       HZ / 10);
 	if (!request)
@@ -66,7 +66,7 @@  static int igt_wait_request(void *arg)
 	/* Submit a request, then wait upon it */
 
 	mutex_lock(&i915->drm.struct_mutex);
-	request = mock_request(i915->engine[RCS], i915->kernel_context, T);
+	request = mock_request(i915->engine[RCS0], i915->kernel_context, T);
 	if (!request) {
 		err = -ENOMEM;
 		goto out_unlock;
@@ -136,7 +136,7 @@  static int igt_fence_wait(void *arg)
 	/* Submit a request, treat it as a fence and wait upon it */
 
 	mutex_lock(&i915->drm.struct_mutex);
-	request = mock_request(i915->engine[RCS], i915->kernel_context, T);
+	request = mock_request(i915->engine[RCS0], i915->kernel_context, T);
 	if (!request) {
 		err = -ENOMEM;
 		goto out_locked;
@@ -193,7 +193,7 @@  static int igt_request_rewind(void *arg)
 
 	mutex_lock(&i915->drm.struct_mutex);
 	ctx[0] = mock_context(i915, "A");
-	request = mock_request(i915->engine[RCS], ctx[0], 2 * HZ);
+	request = mock_request(i915->engine[RCS0], ctx[0], 2 * HZ);
 	if (!request) {
 		err = -ENOMEM;
 		goto err_context_0;
@@ -203,7 +203,7 @@  static int igt_request_rewind(void *arg)
 	i915_request_add(request);
 
 	ctx[1] = mock_context(i915, "B");
-	vip = mock_request(i915->engine[RCS], ctx[1], 0);
+	vip = mock_request(i915->engine[RCS0], ctx[1], 0);
 	if (!vip) {
 		err = -ENOMEM;
 		goto err_context_1;
@@ -415,7 +415,7 @@  static int mock_breadcrumbs_smoketest(void *arg)
 {
 	struct drm_i915_private *i915 = arg;
 	struct smoketest t = {
-		.engine = i915->engine[RCS],
+		.engine = i915->engine[RCS0],
 		.ncontexts = 1024,
 		.max_batch = 1024,
 		.request_alloc = __mock_request_alloc
@@ -1216,7 +1216,7 @@  static int live_breadcrumbs_smoketest(void *arg)
 		num_fences += atomic_long_read(&t[id].num_fences);
 	}
 	pr_info("Completed %lu waits for %lu fences across %d engines and %d cpus\n",
-		num_waits, num_fences, RUNTIME_INFO(i915)->num_rings, ncpus);
+		num_waits, num_fences, RUNTIME_INFO(i915)->num_engines, ncpus);
 
 	mutex_lock(&i915->drm.struct_mutex);
 	ret = igt_live_test_end(&live) ?: ret;
diff --git a/drivers/gpu/drm/i915/selftests/intel_guc.c b/drivers/gpu/drm/i915/selftests/intel_guc.c
index c5e0a0e98fcb..b05a21eaa8f4 100644
--- a/drivers/gpu/drm/i915/selftests/intel_guc.c
+++ b/drivers/gpu/drm/i915/selftests/intel_guc.c
@@ -111,7 +111,7 @@  static int validate_client(struct intel_guc_client *client,
 			dev_priv->preempt_context : dev_priv->kernel_context;
 
 	if (client->owner != ctx_owner ||
-	    client->engines != INTEL_INFO(dev_priv)->ring_mask ||
+	    client->engines != INTEL_INFO(dev_priv)->engine_mask ||
 	    client->priority != client_priority ||
 	    client->doorbell_id == GUC_DOORBELL_INVALID)
 		return -EINVAL;
@@ -261,7 +261,7 @@  static int igt_guc_doorbells(void *arg)
 
 	for (i = 0; i < ATTEMPTS; i++) {
 		clients[i] = guc_client_alloc(dev_priv,
-					      INTEL_INFO(dev_priv)->ring_mask,
+					      INTEL_INFO(dev_priv)->engine_mask,
 					      i % GUC_CLIENT_PRIORITY_NUM,
 					      dev_priv->kernel_context);
 
diff --git a/drivers/gpu/drm/i915/selftests/intel_hangcheck.c b/drivers/gpu/drm/i915/selftests/intel_hangcheck.c
index 12e047328ab8..10658ad05305 100644
--- a/drivers/gpu/drm/i915/selftests/intel_hangcheck.c
+++ b/drivers/gpu/drm/i915/selftests/intel_hangcheck.c
@@ -1126,7 +1126,7 @@  static int igt_reset_wait(void *arg)
 	long timeout;
 	int err;
 
-	if (!intel_engine_can_store_dword(i915->engine[RCS]))
+	if (!intel_engine_can_store_dword(i915->engine[RCS0]))
 		return 0;
 
 	/* Check that we detect a stuck waiter and issue a reset */
@@ -1138,7 +1138,7 @@  static int igt_reset_wait(void *arg)
 	if (err)
 		goto unlock;
 
-	rq = hang_create_request(&h, i915->engine[RCS]);
+	rq = hang_create_request(&h, i915->engine[RCS0]);
 	if (IS_ERR(rq)) {
 		err = PTR_ERR(rq);
 		goto fini;
@@ -1255,7 +1255,7 @@  static int __igt_reset_evict_vma(struct drm_i915_private *i915,
 	struct hang h;
 	int err;
 
-	if (!intel_engine_can_store_dword(i915->engine[RCS]))
+	if (!intel_engine_can_store_dword(i915->engine[RCS0]))
 		return 0;
 
 	/* Check that we can recover an unbind stuck on a hanging request */
@@ -1285,7 +1285,7 @@  static int __igt_reset_evict_vma(struct drm_i915_private *i915,
 		goto out_obj;
 	}
 
-	rq = hang_create_request(&h, i915->engine[RCS]);
+	rq = hang_create_request(&h, i915->engine[RCS0]);
 	if (IS_ERR(rq)) {
 		err = PTR_ERR(rq);
 		goto out_obj;
@@ -1358,7 +1358,7 @@  static int __igt_reset_evict_vma(struct drm_i915_private *i915,
 
 out_reset:
 	igt_global_reset_lock(i915);
-	fake_hangcheck(rq->i915, intel_engine_flag(rq->engine));
+	fake_hangcheck(rq->i915, rq->engine->mask);
 	igt_global_reset_unlock(i915);
 
 	if (tsk) {
@@ -1537,7 +1537,7 @@  static int igt_reset_queue(void *arg)
 				goto fini;
 			}
 
-			reset_count = fake_hangcheck(i915, ENGINE_MASK(id));
+			reset_count = fake_hangcheck(i915, BIT(id));
 
 			if (prev->fence.error != -EIO) {
 				pr_err("GPU reset not recorded on hanging request [fence.error=%d]!\n",
@@ -1596,7 +1596,7 @@  static int igt_reset_queue(void *arg)
 static int igt_handle_error(void *arg)
 {
 	struct drm_i915_private *i915 = arg;
-	struct intel_engine_cs *engine = i915->engine[RCS];
+	struct intel_engine_cs *engine = i915->engine[RCS0];
 	struct hang h;
 	struct i915_request *rq;
 	struct i915_gpu_state *error;
@@ -1643,7 +1643,7 @@  static int igt_handle_error(void *arg)
 	/* Temporarily disable error capture */
 	error = xchg(&i915->gpu_error.first_error, (void *)-1);
 
-	i915_handle_error(i915, ENGINE_MASK(engine->id), 0, NULL);
+	i915_handle_error(i915, engine->mask, 0, NULL);
 
 	xchg(&i915->gpu_error.first_error, error);
 
diff --git a/drivers/gpu/drm/i915/selftests/intel_lrc.c b/drivers/gpu/drm/i915/selftests/intel_lrc.c
index 0677038a5466..565e949a4722 100644
--- a/drivers/gpu/drm/i915/selftests/intel_lrc.c
+++ b/drivers/gpu/drm/i915/selftests/intel_lrc.c
@@ -929,7 +929,7 @@  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_rings, smoke->ncontext);
+		RUNTIME_INFO(smoke->i915)->num_engines, smoke->ncontext);
 	return 0;
 }
 
@@ -957,7 +957,7 @@  static int smoke_random(struct preempt_smoke *smoke, unsigned int flags)
 
 	pr_info("Submitted %lu random:%x requests across %d engines and %d contexts\n",
 		count, flags,
-		RUNTIME_INFO(smoke->i915)->num_rings, smoke->ncontext);
+		RUNTIME_INFO(smoke->i915)->num_engines, smoke->ncontext);
 	return 0;
 }
 
diff --git a/drivers/gpu/drm/i915/selftests/intel_workarounds.c b/drivers/gpu/drm/i915/selftests/intel_workarounds.c
index 9f12a0ec804b..f2a2b51a4662 100644
--- a/drivers/gpu/drm/i915/selftests/intel_workarounds.c
+++ b/drivers/gpu/drm/i915/selftests/intel_workarounds.c
@@ -222,7 +222,7 @@  static int check_whitelist(struct i915_gem_context *ctx,
 
 static int do_device_reset(struct intel_engine_cs *engine)
 {
-	i915_reset(engine->i915, ENGINE_MASK(engine->id), "live_workarounds");
+	i915_reset(engine->i915, engine->mask, "live_workarounds");
 	return 0;
 }
 
@@ -709,7 +709,7 @@  static int live_dirty_whitelist(void *arg)
 static int live_reset_whitelist(void *arg)
 {
 	struct drm_i915_private *i915 = arg;
-	struct intel_engine_cs *engine = i915->engine[RCS];
+	struct intel_engine_cs *engine = i915->engine[RCS0];
 	int err = 0;
 
 	/* If we reset the gpu, we should not lose the RING_NONPRIV */
diff --git a/drivers/gpu/drm/i915/selftests/mock_engine.c b/drivers/gpu/drm/i915/selftests/mock_engine.c
index ec1ae948954c..c2c954f64226 100644
--- a/drivers/gpu/drm/i915/selftests/mock_engine.c
+++ b/drivers/gpu/drm/i915/selftests/mock_engine.c
@@ -223,6 +223,7 @@  struct intel_engine_cs *mock_engine(struct drm_i915_private *i915,
 	engine->base.i915 = i915;
 	snprintf(engine->base.name, sizeof(engine->base.name), "%s", name);
 	engine->base.id = id;
+	engine->base.mask = BIT(id);
 	engine->base.status_page.addr = (void *)(engine + 1);
 
 	engine->base.context_pin = mock_context_pin;
diff --git a/drivers/gpu/drm/i915/selftests/mock_gem_device.c b/drivers/gpu/drm/i915/selftests/mock_gem_device.c
index c27616efc4f8..b2c7808e0595 100644
--- a/drivers/gpu/drm/i915/selftests/mock_gem_device.c
+++ b/drivers/gpu/drm/i915/selftests/mock_gem_device.c
@@ -206,13 +206,13 @@  struct drm_i915_private *mock_gem_device(void)
 
 	mock_init_ggtt(i915, &i915->ggtt);
 
-	mkwrite_device_info(i915)->ring_mask = BIT(0);
+	mkwrite_device_info(i915)->engine_mask = BIT(0);
 	i915->kernel_context = mock_context(i915, NULL);
 	if (!i915->kernel_context)
 		goto err_unlock;
 
-	i915->engine[RCS] = mock_engine(i915, "mock", RCS);
-	if (!i915->engine[RCS])
+	i915->engine[RCS0] = mock_engine(i915, "mock", RCS0);
+	if (!i915->engine[RCS0])
 		goto err_context;
 
 	mutex_unlock(&i915->drm.struct_mutex);