All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
To: Oscar Mateo <oscar.mateo@intel.com>,
	Paulo Zanoni <paulo.r.zanoni@intel.com>,
	intel-gfx@lists.freedesktop.org
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Subject: Re: [PATCH 20/27] drm/i915/icl: Make use of the SW counter field in the new context descriptor
Date: Thu, 11 Jan 2018 15:11:43 -0800	[thread overview]
Message-ID: <82d325b1-6939-8c87-1956-2ddc79541d42@intel.com> (raw)
In-Reply-To: <e9aace97-6223-fa00-ffe6-ffd8dd05698d@intel.com>



On 11/01/18 14:37, Oscar Mateo wrote:
> 
> 
> On 01/11/2018 01:10 PM, Daniele Ceraolo Spurio wrote:
>> This could potentially be squashed with patch 15, as it doesn't make 
>> much sense to add a TODO there and solve it here. We might also want 
>> to update the comment above intel_lr_context_descriptor_update to 
>> remove the implication that SW context ID == ctx->hw_id (which is 
>> still technically true after this patch but we're preparing for it not 
>> to be anymore).
>>
> 
> I was actually thinking of a different fate for this patch: leave patch 
> 15 as is (maybe make the TODO more open, like "TODO: decide what to do 
> with sw_counter"), slap a "drm/i915/icl/guc" prefix on this one and 
> consider it together with the rest of the GuC patches. At least in the 
> meantime, while  we decide how to go about sw_counter (CCing Tvrtko). 
> What do you think?
> 

Sounds good to me, this patch doesn't really impact the !GuC path anyway 
since the number of IDs stays the same. I'll wait to see if there is any 
more feedback and if no one complains I'll send a new revision of patch 15.


>> Thanks,
>> Daniele
>>
>> On 09/01/18 15:28, Paulo Zanoni wrote:
>>> From: Oscar Mateo <oscar.mateo@intel.com>
>>>
>>> The new context descriptor format in Gen11 contains two assignable 
>>> fields: the
>>> SW Context ID (technically 11 bits, but practically limited to 2032 
>>> entries due
>>> to some being reserved for future use by the GuC) and the SW Counter 
>>> (6 bits).
>>>
>>> We don't want to limit ourselves too much in the maximum number of 
>>> concurrent
>>> contexts we want to allow, so ideally we want to employ every 
>>> possible bit
>>> available. Unfortunately, a further limitation in the interface with 
>>> the GuC
>>> means the combination of SW Context ID + SW Counter has to be unique 
>>> within the
>>> same engine class (as we use the SW Context ID to index in the GuC stage
>>> descriptor pool, and the Engine Class + SW Counter to index in the 
>>> 2-dimensional
>>> lrc array). This essentially means we need to somehow encode the 
>>> engine instance.
>>>
>>> Since the BSpec allows 6 bits for engine instance, we use the whole 
>>> SW counter
>>> for this task. If the limitation of 2032 maximum simultaneous 
>>> contexts is too
>>> restrictive, we can always squeeze things a bit more (3 extras bits 
>>> for hw_id,
>>> 3 bits for instance) and things will still work (Gen11 does not 
>>> instance more
>>> than 8 engines of any class).
>>>
>>> Another alternative would be to generate the hw_id per HW context 
>>> instead of per
>>> GEM context, but that has other problems (e.g. maximum number of 
>>> user-created
>>> contexts would be variable, no relationship between a GuC principal 
>>> descriptor
>>> and the proxy descriptor it uses, etc...).
>>>
>>> Bspec: 12254
>>>
>>> v2:
>>>    - Squashed with parts of "Interface changes for GuC fw 22.108" 
>>> (Daniele)
>>>    - Do not apply the 16 reserved entries limitation to the non-GuC 
>>> path (Joonas)
>>> v3: Rebased by Rodrigo.
>>> v4: Rebased 
>>> (s/i915_modparams.enable_guc_submission/USES_GUC_SUBMISSION(dev_priv))
>>>
>>> Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
>>> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
>>> Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
>>> Cc: Michel Thierry <michel.thierry@intel.com>
>>> Signed-off-by: Oscar Mateo <oscar.mateo@intel.com>
>>> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
>>> ---
>>>   drivers/gpu/drm/i915/i915_drv.h         | 11 ++++++++---
>>>   drivers/gpu/drm/i915/i915_gem_context.c |  9 ++++++---
>>>   drivers/gpu/drm/i915/i915_gem_context.h |  2 ++
>>>   drivers/gpu/drm/i915/i915_reg.h         |  2 ++
>>>   drivers/gpu/drm/i915/intel_lrc.c        | 15 ++++++++-------
>>>   5 files changed, 26 insertions(+), 13 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/i915/i915_drv.h 
>>> b/drivers/gpu/drm/i915/i915_drv.h
>>> index aa4f2b178d97..3f1d8c0d2b0a 100644
>>> --- a/drivers/gpu/drm/i915/i915_drv.h
>>> +++ b/drivers/gpu/drm/i915/i915_drv.h
>>> @@ -2079,11 +2079,16 @@ struct drm_i915_private {
>>>             /* The hw wants to have a stable context identifier for the
>>>            * lifetime of the context (for OA, PASID, faults, etc).
>>> -         * This is limited in execlists to 21 bits.
>>> +         * This is limited in execlists to 21 bits. In enhanced 
>>> execlist
>>> +         * (GEN11+) this is limited to 11 bits (the SW Context ID 
>>> field)
>>> +         * but GuC limits it a bit further (11 bits - 16) due to some
>>> +         * entries being reserved for future use (so the firmware only
>>> +         * supports a GuC stage descriptor pool of 2032 entries).
>>>            */
>>>           struct ida hw_ida;
>>> -#define MAX_CONTEXT_HW_ID (1<<21) /* exclusive */
>>> -#define GEN11_MAX_CONTEXT_HW_ID (1<<11) /* exclusive */
>>> +#define MAX_CONTEXT_HW_ID            (1<<21) /* exclusive */
>>> +#define GEN11_MAX_CONTEXT_HW_ID            (1<<11) /* exclusive */
>>> +#define GEN11_MAX_CONTEXT_HW_ID_WITH_GUC GEN11_MAX_CONTEXT_HW_ID - 16
>>>       } contexts;
>>>         u32 fdi_rx_config;
>>> diff --git a/drivers/gpu/drm/i915/i915_gem_context.c 
>>> b/drivers/gpu/drm/i915/i915_gem_context.c
>>> index dbc50b9e18c9..bb5d070083f5 100644
>>> --- a/drivers/gpu/drm/i915/i915_gem_context.c
>>> +++ b/drivers/gpu/drm/i915/i915_gem_context.c
>>> @@ -213,9 +213,12 @@ static int assign_hw_id(struct drm_i915_private 
>>> *dev_priv, unsigned *out)
>>>       int ret;
>>>       unsigned int max;
>>>   -    if (INTEL_GEN(dev_priv) >= 11)
>>> -        max = GEN11_MAX_CONTEXT_HW_ID;
>>> -    else
>>> +    if (INTEL_GEN(dev_priv) >= 11) {
>>> +        if (USES_GUC_SUBMISSION(dev_priv))
>>> +            max = GEN11_MAX_CONTEXT_HW_ID_WITH_GUC;
>>> +        else
>>> +            max = GEN11_MAX_CONTEXT_HW_ID;
>>> +    } else
>>>           max = MAX_CONTEXT_HW_ID;
>>>         ret = ida_simple_get(&dev_priv->contexts.hw_ida,
>>> diff --git a/drivers/gpu/drm/i915/i915_gem_context.h 
>>> b/drivers/gpu/drm/i915/i915_gem_context.h
>>> index 4bfb72f8e1cb..7a39d54e9962 100644
>>> --- a/drivers/gpu/drm/i915/i915_gem_context.h
>>> +++ b/drivers/gpu/drm/i915/i915_gem_context.h
>>> @@ -156,6 +156,8 @@ struct i915_gem_context {
>>>           struct intel_ring *ring;
>>>           u32 *lrc_reg_state;
>>>           u64 lrc_desc;
>>> +        u32 sw_context_id;
>>> +        u32 sw_counter;
>>>           int pin_count;
>>>       } engine[I915_NUM_ENGINES];
>>>   diff --git a/drivers/gpu/drm/i915/i915_reg.h 
>>> b/drivers/gpu/drm/i915/i915_reg.h
>>> index d8b537570b8e..6d5e2c651580 100644
>>> --- a/drivers/gpu/drm/i915/i915_reg.h
>>> +++ b/drivers/gpu/drm/i915/i915_reg.h
>>> @@ -3860,6 +3860,8 @@ enum {
>>>   #define GEN8_CTX_ID_WIDTH 21
>>>   #define GEN11_SW_CTX_ID_SHIFT 37
>>>   #define GEN11_SW_CTX_ID_WIDTH 11
>>> +#define GEN11_SW_COUNTER_SHIFT 55
>>> +#define GEN11_SW_COUNTER_WIDTH 6
>>>   #define GEN11_ENGINE_CLASS_SHIFT 61
>>>   #define GEN11_ENGINE_INSTANCE_SHIFT 48
>>>   diff --git a/drivers/gpu/drm/i915/intel_lrc.c 
>>> b/drivers/gpu/drm/i915/intel_lrc.c
>>> index d527a79c872c..edf050de8ffe 100644
>>> --- a/drivers/gpu/drm/i915/intel_lrc.c
>>> +++ b/drivers/gpu/drm/i915/intel_lrc.c
>>> @@ -267,15 +267,11 @@ intel_lr_context_descriptor_update(struct 
>>> i915_gem_context *ctx,
>>>       if (INTEL_GEN(ctx->i915) >= 11) {
>>>           desc |= (u64)engine->class << GEN11_ENGINE_CLASS_SHIFT;
>>>                                   /* bits 61-63 */
>>> -
>>> -        /*
>>> -         * TODO: use SW counter (bits 60-55) to support more CTXs by
>>> -         * combining it with the SW context ID field?
>>> -         */
>>> -
>>> +        desc |= (u64)ce->sw_counter << GEN11_SW_COUNTER_SHIFT;
>>> +                                /* bits 55-60 */
>>>           desc |= (u64)engine->instance << GEN11_ENGINE_INSTANCE_SHIFT;
>>>                                   /* bits 53-48 */
>>> -        desc |= (u64)ctx->hw_id << GEN11_SW_CTX_ID_SHIFT;
>>> +        desc |= (u64)ce->sw_context_id << GEN11_SW_CTX_ID_SHIFT;
>>>                                   /* bits 37-47 */
>>>       } else {
>>>           desc |= (u64)ctx->hw_id << GEN8_CTX_ID_SHIFT;    /* bits 
>>> 32-52 */
>>> @@ -2398,6 +2394,11 @@ static int 
>>> execlists_context_deferred_alloc(struct i915_gem_context *ctx,
>>>       ce->ring = ring;
>>>       ce->state = vma;
>>>   +    if (INTEL_GEN(ctx->i915) >= 11) {
>>> +        ce->sw_context_id = ctx->hw_id;
>>> +        ce->sw_counter = engine->instance;
>>> +    }
>>> +
>>>       return 0;
>>>     error_ring_free:
>>>
> 
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2018-01-11 23:11 UTC|newest]

Thread overview: 118+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-09 23:23 [PATCH 00/27] ICL basic enabling + GEM Paulo Zanoni
2018-01-09 23:23 ` [PATCH 01/27] drm/i915/icl: Add initial Icelake definitions Paulo Zanoni
2018-01-09 23:59   ` Oscar Mateo
2018-01-10 17:57     ` Paulo Zanoni
2018-01-10 18:08       ` Oscar Mateo
2018-01-10 18:22         ` Rodrigo Vivi
2018-01-10 18:38           ` Paulo Zanoni
2018-01-11  1:25             ` Rodrigo Vivi
2018-01-10 10:15   ` Chris Wilson
2018-01-10 18:19     ` Paulo Zanoni
2018-01-10 19:17   ` Paulo Zanoni
2018-01-19 11:27     ` Joonas Lahtinen
2018-01-09 23:23 ` [PATCH 02/27] drm/i915/icl: Add the ICL PCI IDs Paulo Zanoni
2018-01-10  0:09   ` Oscar Mateo
2018-01-10  1:02     ` De Marchi, Lucas
2018-01-10  1:07       ` Oscar Mateo
2018-01-10 14:08         ` Paulo Zanoni
2018-01-09 23:23 ` [PATCH 03/27] drm/i915/icl: add icelake_init_clock_gating() Paulo Zanoni
2018-01-10  9:39   ` Joonas Lahtinen
2018-01-10 18:42     ` Paulo Zanoni
2018-01-09 23:23 ` [PATCH 04/27] drm/i915/icl: Icelake interrupt register addresses and bits Paulo Zanoni
2018-01-10 19:54   ` Paulo Zanoni
2018-01-09 23:23 ` [PATCH 05/27] drm/i915/icl: Show interrupt registers in debugfs Paulo Zanoni
2018-01-10  9:02   ` Tvrtko Ursulin
2018-01-10 18:49     ` Paulo Zanoni
2018-01-11  8:55       ` Tvrtko Ursulin
2018-01-09 23:23 ` [PATCH 06/27] drm/i915/icl: Prepare for more rings Paulo Zanoni
2018-02-07 22:03   ` Oscar Mateo
2018-01-09 23:23 ` [PATCH 07/27] drm/i915/icl: Interrupt handling Paulo Zanoni
2018-01-10 10:16   ` Joonas Lahtinen
2018-01-10 18:56     ` Paulo Zanoni
2018-01-19 17:30     ` Tvrtko Ursulin
2018-01-19 18:10       ` Paulo Zanoni
2018-01-19 20:33         ` Chris Wilson
2018-01-26 11:22           ` Jani Nikula
2018-02-09 22:34   ` Daniele Ceraolo Spurio
2018-01-09 23:23 ` [PATCH 08/27] drm/i915/icl: Ringbuffer interrupt handling Paulo Zanoni
2018-01-10 10:12   ` Chris Wilson
2018-01-11 19:17     ` Daniele Ceraolo Spurio
2018-01-15 10:38       ` Tvrtko Ursulin
2018-02-01 23:58         ` Belgaumkar, Vinay
2018-02-02  0:36           ` Belgaumkar, Vinay
2018-01-09 23:23 ` [PATCH 09/27] drm/i915/icl: Correctly initialize the Gen11 engines Paulo Zanoni
2018-01-09 23:28 ` [PATCH 10/27] drm/i915/icl: Enhanced execution list support Paulo Zanoni
2018-01-09 23:28   ` [PATCH 11/27] drm/i915/icl: Gen11 render context size Paulo Zanoni
2018-01-11  1:21     ` Rodrigo Vivi
2018-01-11 18:20       ` Oscar Mateo
2018-01-11 18:23     ` [PATCH v3] " Oscar Mateo
2018-01-11 19:40       ` Rodrigo Vivi
2018-01-11 22:53         ` Oscar Mateo
2018-01-11 22:55       ` [PATCH 1/2] drm/i915: Return a default RCS " Oscar Mateo
2018-01-11 22:55         ` [PATCH 2/2 v4] drm/i915/icl: Gen11 render " Oscar Mateo
2018-01-12  0:01           ` Daniele Ceraolo Spurio
2018-01-11 23:08         ` [PATCH 1/2] drm/i915: Return a default RCS " Daniele Ceraolo Spurio
2018-01-09 23:28   ` [PATCH 12/27] drm/i915/icl: Add Indirect Context Offset for Gen11 Paulo Zanoni
2018-01-10 23:44     ` Oscar Mateo
2018-01-25  1:06     ` [PATCH v2 " Michel Thierry
2018-01-09 23:28   ` [PATCH 13/27] drm/i915/icl: Gen11 forcewake support Paulo Zanoni
2018-02-01  0:52     ` [PATCH v10] " Michel Thierry
2018-02-01 10:25       ` Tvrtko Ursulin
2018-02-01 16:02         ` Michel Thierry
2018-02-01 16:08       ` [PATCH v11] " Michel Thierry
2018-02-03 20:26       ` [PATCH v10] " kbuild test robot
2018-02-03 21:43       ` kbuild test robot
2018-01-09 23:28   ` [PATCH 14/27] drm/i915/icl: Set graphics mode register for gen11 Paulo Zanoni
2018-01-10 13:40     ` Arkadiusz Hiler
2018-01-11 19:32     ` Daniele Ceraolo Spurio
2018-01-19 19:30     ` [PATCH v3] " Kelvin Gardiner
2018-01-19 22:46       ` Daniele Ceraolo Spurio
2018-01-09 23:28   ` [PATCH 15/27] drm/i915/icl: new context descriptor support Paulo Zanoni
2018-01-09 23:28   ` [PATCH 16/27] drm/i915/icl: Check for fused-off VDBOX and VEBOX instances Paulo Zanoni
2018-01-10  9:36     ` Chris Wilson
2018-01-10 19:25       ` Oscar Mateo
2018-01-10 19:32         ` Chris Wilson
2018-01-10 19:33           ` Chris Wilson
2018-01-10 23:02             ` Oscar Mateo
2018-01-10 23:03     ` [PATCH v8] " Oscar Mateo
2018-01-09 23:28   ` [PATCH 17/27] drm/i915/icl: Enable the extra video decode and enhancement boxes for Icelake 11 Paulo Zanoni
2018-01-09 23:28   ` [PATCH 18/27] drm/i915/icl: Update subslice define for ICL 11 Paulo Zanoni
2018-01-11  0:06     ` Oscar Mateo
2018-01-11 18:25     ` [PATCH v2] " Oscar Mateo
2018-02-08 16:35       ` Lionel Landwerlin
2018-02-09 17:44         ` Oscar Mateo
2018-02-09 17:48           ` Lionel Landwerlin
2018-02-09 18:00       ` [PATCH v3] " Oscar Mateo
2018-01-09 23:28   ` [PATCH 19/27] drm/i915/icl: Added ICL 11 slice, subslice and EU fuse detection Paulo Zanoni
2018-01-10 12:02     ` Tvrtko Ursulin
2018-01-09 23:28   ` [PATCH 20/27] drm/i915/icl: Make use of the SW counter field in the new context descriptor Paulo Zanoni
2018-01-11 21:10     ` Daniele Ceraolo Spurio
2018-01-11 22:37       ` Oscar Mateo
2018-01-11 23:11         ` Daniele Ceraolo Spurio [this message]
2018-01-09 23:28   ` [PATCH 21/27] drm/i915/icl: Add reset control register changes Paulo Zanoni
2018-01-09 23:28   ` [PATCH 22/27] drm/i915/icl: Add configuring MOCS in new Icelake engines Paulo Zanoni
2018-01-09 23:28   ` [PATCH 23/27] drm/i915/icl: Split out the servicing of the Selector and Shared IIR registers Paulo Zanoni
2018-01-09 23:28   ` [PATCH 24/27] drm/i915/icl: Handle RPS interrupts correctly for Gen11 Paulo Zanoni
2018-01-09 23:28   ` [PATCH 25/27] drm/i915/icl: Enable RC6 and RPS in Gen11 Paulo Zanoni
2018-01-09 23:28   ` [PATCH 26/27] drm/i915/icl: allow the reg_read ioctl to read the RCS TIMESTAMP register Paulo Zanoni
2018-01-11  1:19     ` Rodrigo Vivi
2018-01-09 23:28   ` [PATCH 27/27] drm/i915/gen11: add support for reading the timestamp frequency Paulo Zanoni
2018-03-28 11:34     ` Lionel Landwerlin
2018-01-10  9:45   ` [PATCH 10/27] drm/i915/icl: Enhanced execution list support Chris Wilson
2018-01-11 19:55   ` Daniele Ceraolo Spurio
2018-01-11 20:55     ` Daniele Ceraolo Spurio
2018-01-17 21:53   ` [PATCH v5] " Daniele Ceraolo Spurio
2018-01-19 13:05     ` Mika Kuoppala
2018-01-19 16:15       ` Daniele Ceraolo Spurio
2018-01-22 15:08         ` Mika Kuoppala
2018-01-22 15:13           ` Chris Wilson
2018-01-22 16:09             ` Daniele Ceraolo Spurio
2018-01-22 17:32               ` Chris Wilson
2018-01-22 21:38                 ` Daniele Ceraolo Spurio
2018-01-11  1:32 ` [PATCH 00/27] ICL basic enabling + GEM Rodrigo Vivi
2018-01-19 11:45   ` Joonas Lahtinen
2018-01-19 11:55     ` Tvrtko Ursulin
2018-01-19 13:14       ` Mika Kuoppala
2018-01-19 12:08     ` Jani Nikula
2018-01-12 10:06 ` ✗ Fi.CI.BAT: failure for ICL basic enabling + GEM (rev24) Patchwork
2018-01-18 10:21 ` ✗ Fi.CI.BAT: failure for ICL basic enabling + GEM (rev25) Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=82d325b1-6939-8c87-1956-2ddc79541d42@intel.com \
    --to=daniele.ceraolospurio@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=oscar.mateo@intel.com \
    --cc=paulo.r.zanoni@intel.com \
    --cc=rodrigo.vivi@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.