[PATCH 3/4] drm/i915/guc: Update rps.intr_keep_unmasked in guc_interrupts_capture/release

Kamble, Sagar A sagar.a.kamble at intel.com
Fri Mar 10 17:39:30 UTC 2017


Thanks for the inputs Chris.

On 3/10/2017 11:00 PM, Chris Wilson wrote:
> On Fri, Mar 10, 2017 at 10:22:27PM +0530, Sagar Arun Kamble wrote:
>> Different state is to be maintained for rps.intr_keep_unmasked for GuC and
>> Execlists. Updating it inside guc_interrupts_* routines as in those
>> routines GuC load/submission params are sanitized and it should not be set
>> based on HAS_GUC_SCHED during intel_irq_init.
>>
>> Cc: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
>> Cc: Chris Wilson <chris at chris-wilson.co.uk>
>> Cc: Oscar Mateo <oscar.mateo at intel.com>
>> Cc: Radoslaw Szwichtenberg <radoslaw.szwichtenberg at intel.com>
>> Signed-off-by: Sagar Arun Kamble <sagar.a.kamble at intel.com>
>> ---
>>   drivers/gpu/drm/i915/i915_guc_submission.c | 29 +++++++++++++++++++++++++++++
>>   drivers/gpu/drm/i915/i915_irq.c            | 24 ------------------------
>>   2 files changed, 29 insertions(+), 24 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/i915_guc_submission.c b/drivers/gpu/drm/i915/i915_guc_submission.c
>> index 2282d83..314880f 100644
>> --- a/drivers/gpu/drm/i915/i915_guc_submission.c
>> +++ b/drivers/gpu/drm/i915/i915_guc_submission.c
>> @@ -954,6 +954,30 @@ static void guc_interrupts_capture(struct drm_i915_private *dev_priv)
>>   	I915_WRITE(GUC_BCS_RCS_IER, ~irqs);
>>   	I915_WRITE(GUC_VCS2_VCS1_IER, ~irqs);
>>   	I915_WRITE(GUC_WD_VECS_IER, ~irqs);
>> +
>> +	/*
>> +	 * The REDIRECT_TO_GUC bit of the PMINTRMSK register directs all
>> +	 * (unmasked) PM interrupts to the GuC. All other bits of this
>> +	 * register *disable* generation of a specific interrupt.
>> +	 *
>> +	 * 'intr_keep_unmasked' indicates bits that are NOT to be set when
>> +	 * writing to the PM interrupt mask register, i.e. interrupts
>> +	 * that must not be disabled.
>> +	 *
>> +	 * If the GuC is handling these interrupts, then we must not let
>> +	 * the PM code disable ANY interrupt that the GuC is expecting.
>> +	 * So for each ENABLED (0) bit in this register, we must SET the
>> +	 * bit in intr_keep_unmasked so that it's left enabled for the GuC.
>> +	 * GuC needs ARAT expired interrupt unmasked hence it is set in
>> +	 * intr_keep_unmasked.
>> +	 *
>> +	 * Here we CLEAR REDIRECT_TO_GUC bit in intr_keep_unmasked, which will
>> +	 * result in the register bit being left SET!
>> +	 */
>> +	if (HAS_GUC_SCHED(dev_priv)) {
> Cen we get here without HAS_GUC_SCHED() ?
Checked now. can't. will fix this.
>
>> +		dev_priv->rps.intr_keep_unmasked |= ARAT_EXPIRED_INTRMSK;
>> +		dev_priv->rps.intr_keep_unmasked &= ~GEN8_PMINTR_REDIRECT_TO_GUC;
>> +	}
>>   }
>>   
>>   int i915_guc_submission_enable(struct drm_i915_private *dev_priv)
>> @@ -1011,6 +1035,11 @@ static void guc_interrupts_release(struct drm_i915_private *dev_priv)
>>   	I915_WRITE(GUC_BCS_RCS_IER, 0);
>>   	I915_WRITE(GUC_VCS2_VCS1_IER, 0);
>>   	I915_WRITE(GUC_WD_VECS_IER, 0);
>> +
>> +	dev_priv->rps.intr_keep_unmasked = 0;
>> +
>> +	if (INTEL_INFO(dev_priv)->gen >= 8)
>> +		dev_priv->rps.intr_keep_unmasked |= GEN8_PMINTR_REDIRECT_TO_GUC;
> Here we can safely say that should be unconditional.
>
> I think symmetry would be better, i.e.
> dev_priv->rps.intr_keep_unmasked |= GEN8_PMINTR_REDIRECT_TO_GUC;
> dev_priv->rps.intr_keep_unmasked &= ~ARAT_EXPIRED_INTRMSK;
>
> Looks ok to me here. We did at one point talk about trying to keep the
> rps together, but adding entry points just to set/clear these bits seems
> overkill right now.
> -Chris
Yes. symmetry makes sense. Will update. Thank you.
>



More information about the Intel-gfx-trybot mailing list