[Intel-gfx] [RFC] drm/i915: Allow the UMD to configure their own power clock state

Oscar Mateo oscar.mateo at intel.com
Wed May 10 08:29:27 UTC 2017




On 05/10/2017 02:09 PM, MichaƂ Winiarski wrote:
> On Wed, May 10, 2017 at 04:47:50PM +0300, Mika Kuoppala wrote:
>> Oscar Mateo <oscar.mateo at intel.com> writes:
>>
>>> This allows userspace to shutdown slices at will for performance/power reasons
>>> (because it doesn't have a use for more slices).
>>>
>>> Cc: Dmitry Rogozhkin <dmitry.v.rogozhkin at intel.com>
>>> Cc: Chris Wilson <chris at chris-wilson.co.uk>
>>> Signed-off-by: Oscar Mateo <oscar.mateo at intel.com>
>>> ---
>>>   drivers/gpu/drm/i915/intel_engine_cs.c | 11 +++++++++++
>>>   1 file changed, 11 insertions(+)
>>>
>>> diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c b/drivers/gpu/drm/i915/intel_engine_cs.c
>>> index 402769d..17ff88d 100644
>>> --- a/drivers/gpu/drm/i915/intel_engine_cs.c
>>> +++ b/drivers/gpu/drm/i915/intel_engine_cs.c
>>> @@ -628,6 +628,7 @@ static int wa_ring_whitelist_reg(struct intel_engine_cs *engine,
>>>   static int gen8_init_workarounds(struct intel_engine_cs *engine)
>>>   {
>>>   	struct drm_i915_private *dev_priv = engine->i915;
>>> +	int ret;
>>>   
>>>   	WA_SET_BIT_MASKED(INSTPM, INSTPM_FORCE_ORDERING);
>>>   
>>> @@ -673,6 +674,11 @@ static int gen8_init_workarounds(struct intel_engine_cs *engine)
>>>   			    GEN6_WIZ_HASHING_MASK,
>>>   			    GEN6_WIZ_HASHING_16x4);
>>>   
>>> +	/* Allow the UMD to configure their own power clock state */
>>> +	ret = wa_ring_whitelist_reg(engine, GEN8_R_PWR_CLK_STATE);
>>> +	if (ret)
>>> +		return ret;
>>> +
>> How will the different userspace clients coordinate with the slice
>> state? I guess in another words, is this part of the context?
>>
>> -Mika

As Michal said, this is context-saved/restored, so no need to coordinate 
between clients.

> Spec says (see IHD-OS-SKL-Vol2c-05.16 page 614):
> "This register must be initialized correctly when the context is submitted for
> the first time. This register is context save/restored as part of Exec-List
> context image in both Exec-List and Ring-Buffer mode of scheduling."
>
> So we're good, right?

Ditto :)

>
> Except there's also:
> "This register must not be programmed using MI_LOAD_REGISTER_IMM command in ring
> buffer or in batch buffer, however programming "NON - SLM Indication" field
> through MI_LOAD_REGISTER_IMM is an exception defined below. If a need arises to
> change the render configuration for a context being executed in HW, Scheduler
> must preempt the context and update the desired render configuration in the
> logical render context image in memory and resubmit the context"
>
> So... are we sure that we're fine with giving userspace control over this
> register? If so - it would still be a good idea to mention that the info in the
> spec is bogus (commit message or just a comment).

This approach has been double-checked with HW and they believe there 
should be no problem, as long as the update is done as:

- PIPECONTROL - Stalling flish, flush all caches (color, depth, DC$)
- LOAD_REGISTER_IMMEDIATE - R_PWR_CLK_STATE
- Reprogram complete state

I'm trying to get them to change the BSpec accordingly.

>>>   	return 0;
>>>   }
>>>   
>>> @@ -841,6 +847,11 @@ static int gen9_init_workarounds(struct intel_engine_cs *engine)
>>>   	if (ret)
>>>   		return ret;
>>>   
>>> +	/* Allow the UMD to configure their own power clock state */
>>> +	ret = wa_ring_whitelist_reg(engine, GEN8_R_PWR_CLK_STATE);
>>> +	if (ret)
>>> +		return ret;
>>> +
>>>   	return 0;
>>>   }
>>>   
>>> -- 
>>> 1.9.1
>>>
>>> _______________________________________________
>>> Intel-gfx mailing list
>>> Intel-gfx at lists.freedesktop.org
>>> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>> _______________________________________________
>> 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