[PATCH 3/8] drm/i915/xehp: Add Compute CS IRQ handlers

Tvrtko Ursulin tvrtko.ursulin at linux.intel.com
Wed Sep 8 10:09:05 UTC 2021


On 07/09/2021 18:19, Matt Roper wrote:
> Add execlists and GuC interrupts for compute CS into existing IRQ handlers.
> 
> All compute command streamers belong to the same compute class, so the
> only change needed to enable their interrupts is to program their GT engine
> interrupt mask registers.
> 
> CCS0 shares the register with CCS1, while CCS2 and CCS3 are in a new one.
> 
> BSpec: 50844, 54029, 54030, 53223, 53224.
> Original-patch-by: Michel Thierry
> Cc: Tvrtko Ursulin <tvrtko.ursulin at linux.intel.com>
> Cc: Vinay Belgaumkar <vinay.belgaumkar at intel.com>
> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio at intel.com>
> Signed-off-by: Aravind Iddamsetty <aravind.iddamsetty at intel.com>
> Signed-off-by: Matt Roper <matthew.d.roper at intel.com>
> ---
>   drivers/gpu/drm/i915/gt/intel_gt_irq.c | 15 ++++++++++++++-
>   drivers/gpu/drm/i915/i915_drv.h        |  2 ++
>   drivers/gpu/drm/i915/i915_reg.h        |  3 +++
>   3 files changed, 19 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/gt/intel_gt_irq.c b/drivers/gpu/drm/i915/gt/intel_gt_irq.c
> index b2de83be4d97..612281d47513 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gt_irq.c
> +++ b/drivers/gpu/drm/i915/gt/intel_gt_irq.c
> @@ -96,7 +96,7 @@ gen11_gt_identity_handler(struct intel_gt *gt, const u32 identity)
>   	if (unlikely(!intr))
>   		return;
>   
> -	if (class <= COPY_ENGINE_CLASS)
> +	if (class <= COPY_ENGINE_CLASS || class == COMPUTE_CLASS)
>   		return gen11_engine_irq_handler(gt, class, instance, intr);
>   
>   	if (class == OTHER_CLASS)
> @@ -178,6 +178,8 @@ void gen11_gt_irq_reset(struct intel_gt *gt)
>   	/* Disable RCS, BCS, VCS and VECS class engines. */
>   	intel_uncore_write(uncore, GEN11_RENDER_COPY_INTR_ENABLE, 0);
>   	intel_uncore_write(uncore, GEN11_VCS_VECS_INTR_ENABLE,	  0);
> +	if (CCS_MASK(gt))
> +		intel_uncore_write(uncore, GEN12_CCS_RSVD_INTR_ENABLE, 0);
>   
>   	/* Restore masks irqs on RCS, BCS, VCS and VECS engines. */
>   	intel_uncore_write(uncore, GEN11_RCS0_RSVD_INTR_MASK,	~0);
> @@ -191,6 +193,10 @@ void gen11_gt_irq_reset(struct intel_gt *gt)
>   	intel_uncore_write(uncore, GEN11_VECS0_VECS1_INTR_MASK,	~0);
>   	if (HAS_ENGINE(gt, VECS2) || HAS_ENGINE(gt, VECS3))
>   		intel_uncore_write(uncore, GEN12_VECS2_VECS3_INTR_MASK, ~0);
> +	if (HAS_ENGINE(gt, CCS0) || HAS_ENGINE(gt, CCS1))
> +		intel_uncore_write(uncore, GEN12_CCS0_CCS1_INTR_MASK, ~0);
> +	if (HAS_ENGINE(gt, CCS2) || HAS_ENGINE(gt, CCS3))
> +		intel_uncore_write(uncore, GEN12_CCS2_CCS3_INTR_MASK, ~0);
>   
>   	intel_uncore_write(uncore, GEN11_GPM_WGBOXPERF_INTR_ENABLE, 0);
>   	intel_uncore_write(uncore, GEN11_GPM_WGBOXPERF_INTR_MASK,  ~0);
> @@ -218,6 +224,8 @@ void gen11_gt_irq_postinstall(struct intel_gt *gt)
>   	/* Enable RCS, BCS, VCS and VECS class interrupts. */
>   	intel_uncore_write(uncore, GEN11_RENDER_COPY_INTR_ENABLE, dmask);
>   	intel_uncore_write(uncore, GEN11_VCS_VECS_INTR_ENABLE, dmask);
> +	if (CCS_MASK(gt))
> +		intel_uncore_write(uncore, GEN12_CCS_RSVD_INTR_ENABLE, smask);
>   
>   	/* Unmask irqs on RCS, BCS, VCS and VECS engines. */
>   	intel_uncore_write(uncore, GEN11_RCS0_RSVD_INTR_MASK, ~smask);
> @@ -231,6 +239,11 @@ void gen11_gt_irq_postinstall(struct intel_gt *gt)
>   	intel_uncore_write(uncore, GEN11_VECS0_VECS1_INTR_MASK, ~dmask);
>   	if (HAS_ENGINE(gt, VECS2) || HAS_ENGINE(gt, VECS3))
>   		intel_uncore_write(uncore, GEN12_VECS2_VECS3_INTR_MASK, ~dmask);
> +	if (HAS_ENGINE(gt, CCS0) || HAS_ENGINE(gt, CCS1))
> +		intel_uncore_write(uncore, GEN12_CCS0_CCS1_INTR_MASK, ~dmask);
> +	if (HAS_ENGINE(gt, CCS2) || HAS_ENGINE(gt, CCS3))
> +		intel_uncore_write(uncore, GEN12_CCS2_CCS3_INTR_MASK, ~dmask);
> +
>   	/*
>   	 * RPS interrupts will get enabled/disabled on demand when RPS itself
>   	 * is enabled/disabled.
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 1fd3040b6771..5b6eee5d8ade 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -1573,6 +1573,8 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915,
>   	ENGINE_INSTANCES_MASK(gt, VCS0, I915_MAX_VCS)
>   #define VEBOX_MASK(gt) \
>   	ENGINE_INSTANCES_MASK(gt, VECS0, I915_MAX_VECS)
> +#define CCS_MASK(gt) \
> +	ENGINE_INSTANCES_MASK(gt, CCS0, I915_MAX_CCS)
>   
>   /*
>    * The Gen7 cmdparser copies the scanned buffer to the ggtt for execution
> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> index 33d6aa0b07c1..31e9c2cc4c0c 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -8139,6 +8139,7 @@ enum {
>   #define GEN11_GPM_WGBOXPERF_INTR_ENABLE	_MMIO(0x19003c)
>   #define GEN11_CRYPTO_RSVD_INTR_ENABLE	_MMIO(0x190040)
>   #define GEN11_GUNIT_CSME_INTR_ENABLE	_MMIO(0x190044)
> +#define GEN12_CCS_RSVD_INTR_ENABLE	_MMIO(0x190048)
>   
>   #define GEN11_RCS0_RSVD_INTR_MASK	_MMIO(0x190090)
>   #define GEN11_BCS_RSVD_INTR_MASK	_MMIO(0x1900a0)
> @@ -8152,6 +8153,8 @@ enum {
>   #define GEN11_GPM_WGBOXPERF_INTR_MASK	_MMIO(0x1900ec)
>   #define GEN11_CRYPTO_RSVD_INTR_MASK	_MMIO(0x1900f0)
>   #define GEN11_GUNIT_CSME_INTR_MASK	_MMIO(0x1900f4)
> +#define GEN12_CCS0_CCS1_INTR_MASK	_MMIO(0x190100)
> +#define GEN12_CCS2_CCS3_INTR_MASK	_MMIO(0x190104)
>   
>   #define   ENGINE1_MASK			REG_GENMASK(31, 16)
>   #define   ENGINE0_MASK			REG_GENMASK(15, 0)
> 

Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>

Regards,

Tvrtko


More information about the dri-devel mailing list