[Intel-gfx] [PATCH 6/6] drm/i915/icl: Support co-existence between per-context SSEU and OA
Tvrtko Ursulin
tvrtko.ursulin at linux.intel.com
Mon Oct 1 10:20:56 UTC 2018
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
>
>
>> + 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