drm/etnaviv: disable MLCG and pulse eater on GPU reset
Sui Jingfeng
suijingfeng at loongson.cn
Wed Jun 14 17:49:31 UTC 2023
Hi
On 2023/6/14 15:45, Lucas Stach wrote:
> Hi,
>
> Am Mittwoch, dem 14.06.2023 um 00:42 +0800 schrieb Sui Jingfeng:
>> Hi, Lucas
>>
>>
>> I love your patch, perhaps something to improve:
>>
>> The MLCG stand for "Module Level Clock Gating",
>>
>> without reading the commit message, I guess there may have people don't
>> know its meaning.
>>
> Yea, I expect people to read the commit message and not just the
> subject if they want to know what a patch does. The MLCG abbreviation
> is already well established within the driver code.
Yeah, I agree with you that the reviewer should read the commit message
and the patch itself(code)
But after look the code quite a while, I'm wondering that
1) is the "Module Level" absolutely needed ?
2) is it accurate enough ?
For question in 1), I meant that is it better by saying: "drm/etnaviv:
disable clock gating and pulse eater on GPU reset"
For question in 2), I mean that the code inside the
etnaviv_hw_reset(struct etnaviv_gpu *gpu) function are per GPU instance
level.
Every GPU instance managed by the drm/etnaviv will run those clock
gating related code.
So it is per GPU instance level.
As far as I can understand, the "Module Level" stand for the
drm/etnaviv(etnaviv.ko) as a whole
Nearly all patches for the gpu/drm/drivers are module level by default,
What's you really want to emphasize?
I think you probably want to drop the "ML", and replace the "MLCG" with
"clock gating".
explain the "ML" in the commit message should be enough.
>> There are still more thing in this patch can only be understand relay on
>> guessing... :-)
>>
> That's unfortunately true. I don't know exactly what the pulse eater
> control bits mean either. I've taken them verbatim from the reset
> sequence in the Vivante kernel driver, which is also why I didn't try
> to assign some meaning by giving them a name, but keep them as BITs in
> the driver code.
>
> Regards,
> Lucas
>
>> But drm/etnaviv drvier still works with this patch applied, so
>>
>>
>> On 2023/6/7 20:58, Lucas Stach wrote:
>>> Module level clock gating and the pulse eater might interfere with
>>> the GPU reset, as they both have the potential to stop the clock
>>> and thus reset propagation to parts of the GPU.
>>>
>>> Signed-off-by: Lucas Stach <l.stach at pengutronix.de>
>>> Reviewed-by: Christian Gmeiner <cgmeiner at igalia.com>
>>
>> Tested-by: Sui Jingfeng <suijingfeng at loongson.cn>
>>
>>
>>> ---
>>> I'm not aware of any cases where this would have been an issue, but
>>> it is what the downstream driver does and fundametally seems like
>>> the right thing to do.
>>> ---
>>> drivers/gpu/drm/etnaviv/etnaviv_gpu.c | 13 ++++++++++++-
>>> 1 file changed, 12 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
>>> index de8c9894967c..41aab1aa330b 100644
>>> --- a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
>>> +++ b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
>>> @@ -505,8 +505,19 @@ static int etnaviv_hw_reset(struct etnaviv_gpu *gpu)
>>> timeout = jiffies + msecs_to_jiffies(1000);
>>>
>>> while (time_is_after_jiffies(timeout)) {
>>> - /* enable clock */
>>> unsigned int fscale = 1 << (6 - gpu->freq_scale);
>>> + u32 pulse_eater = 0x01590880;
>>> +
>>> + /* disable clock gating */
>>> + gpu_write_power(gpu, VIVS_PM_POWER_CONTROLS, 0x0);
>>> +
>>> + /* disable pulse eater */
>>> + pulse_eater |= BIT(17);
>>> + gpu_write_power(gpu, VIVS_PM_PULSE_EATER, pulse_eater);
>>> + pulse_eater |= BIT(0);
>>> + gpu_write_power(gpu, VIVS_PM_PULSE_EATER, pulse_eater);
>>> +
>>> + /* enable clock */
>>> control = VIVS_HI_CLOCK_CONTROL_FSCALE_VAL(fscale);
>>> etnaviv_gpu_load_clock(gpu, control);
>>>
--
Jingfeng
More information about the dri-devel
mailing list