[Intel-gfx] [PATCH 6/6] drm/i915/icl: Support co-existence between per-context SSEU and OA

Lionel Landwerlin lionel.g.landwerlin at intel.com
Mon Oct 1 11:06:37 UTC 2018


On 01/10/2018 12:20, Tvrtko Ursulin wrote:
>
> On 01/10/2018 10:50, Lionel Landwerlin wrote:
>> On 17/09/2018 13:30, Tvrtko Ursulin wrote:
>>> From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
>>>
>>> When OA is active we want to lock the powergating configuration, but on
>>> Icelake, users like the media stack will have issues if we lock to the
>>> full device configuration.
>>>
>>> Instead lock to a subset of (sub)slices which are currently a known
>>> working configuration for all users.
>>>
>>> v2:
>>>   * Fix commit message spelling.
>>>
>>> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
>>> Cc: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
>>> ---
>>>   drivers/gpu/drm/i915/intel_lrc.c | 25 ++++++++++++++++++++-----
>>>   1 file changed, 20 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/i915/intel_lrc.c 
>>> b/drivers/gpu/drm/i915/intel_lrc.c
>>> index b5603e977a3f..cded1f1d9ec2 100644
>>> --- a/drivers/gpu/drm/i915/intel_lrc.c
>>> +++ b/drivers/gpu/drm/i915/intel_lrc.c
>>> @@ -2521,13 +2521,28 @@ u32 gen8_make_rpcs(struct drm_i915_private 
>>> *i915, struct intel_sseu *req_sseu)
>>>       /*
>>>        * If i915/perf is active, we want a stable powergating 
>>> configuration
>>> -     * on the system. The most natural configuration to take in 
>>> that case
>>> -     * is the default (i.e maximum the hardware can do).
>>> +     * on the system.
>>> +     *
>>> +     * We could choose full enablement, but on ICL we know there 
>>> are use
>>> +     * cases which disable slices for functional, apart for 
>>> performance
>>> +     * reasons. So in this case we select a known stable subset.
>>>        */
>>> -    if (unlikely(i915->perf.oa.exclusive_stream))
>>> -        ctx_sseu = intel_device_default_sseu(i915);
>>> -    else
>>> +    if (!i915->perf.oa.exclusive_stream) {
>>>           ctx_sseu = *req_sseu;
>>> +    } else {
>>> +        ctx_sseu = intel_device_default_sseu(i915);
>>> +
>>> +        if (IS_GEN11(i915)) {
>>> +            /*
>>> +             * We only need subslice count so it doesn't matter
>>> +             * which ones we select - just turn of low bits in the
>>
>> s/turn of/turn off/
>
> Yep, thanks.
>
>>
>>> +             * amount of half of all available subslices per slice.
>>> +             */
>>> +            ctx_sseu.subslice_mask =
>>> +                ~(~0 << (hweight8(ctx_sseu.subslice_mask) / 2));
>>
>>
>> I would go with :
>>
>>
>> ctx_sseu.subslice_mask = ctx_sseu.subslice_mask & 0xf;
>>
>>
>> Documentation says that the first 4 subslices are the "big" ones 
>> (gathered from the fusing register fields which go from 
>> slice0-subslice[0-3] then slice1-subslice[0-3], etc...), so this 
>> should be equally media/3d capable.
>
> Doesn't work I think - one 1x6x8 part I've seen has a subslice mask of 
> 0b11111100 and there we want to have three subslices enabled.
>
> Regards,
>
> Tvrtko


Thanks, then the fusing fields don't match for a big/small sets of 
subslices.

I guess the fusing might be in this pattern (Small/Big) : SBSBSBSB

I was hoping we could know so that we program the powergating at the 
most capable configuration.


-

Lionel


>
>>
>>
>>> +            ctx_sseu.slice_mask = 0x1;
>>> +        }
>>> +    }
>>>       slices = hweight8(ctx_sseu.slice_mask);
>>>       subslices = hweight8(ctx_sseu.subslice_mask);
>>
>>
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>



More information about the Intel-gfx mailing list