Re: [PATCH 3/3] pwm: lpss: Set DPM_FLAG_SMART_SUSPEND on Cherry Trail devices

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On 10/30/20 1:45 PM, Andy Shevchenko wrote:
> On Fri, Oct 30, 2020 at 11:48 AM Hans de Goede <hdegoede@xxxxxxxxxx> wrote:
>>
>> As the comment above the code setting the DPM_FLAG_NO_DIRECT_COMPLETE
>> flag explains:
>>
>>     /*
>>      * On Cherry Trail devices the GFX0._PS0 AML checks if the controller
>>      * is on and if it is not on it turns it on and restores what it
>>      * believes is the correct state to the PWM controller.
>>      * Because of this we must disallow direct-complete, which keeps the
>>      * controller (runtime)suspended, on resume to avoid 2 issues:
>>      * 1. The controller getting turned on without the linux-pm code
>>      *    knowing about this. On devices where the controller is unused
>>      *    this causes it to stay on during the next suspend causing high
>>      *    battery drain (because S0i3 is not reached)
>>      * 2. The state restoring code unexpectedly messing with the controller
>>      */
>>
>> The pm-core must not skip resume to avoid the GFX0._PS0 AML code messing
>> with the PWM controller behind our back. But
> 
>> leaving the controller
>> runtime-suspended (skipping runtime-resume + normal-suspend) during
>> suspend is fine.
> 
> This paragraph is good to have in the comment of the code I think.

Agreed, I've added this as comment for v2 of this patch set and I
will send out a v2 of the entire series with your reviewed-by
added.

Thanks & Regards,

Hans



> 
>> Set the DPM_FLAG_SMART_SUSPEND flag to allow this.
>>
>> Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx>
>> ---
>>  drivers/pwm/pwm-lpss-platform.c | 3 ++-
>>  1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/pwm/pwm-lpss-platform.c b/drivers/pwm/pwm-lpss-platform.c
>> index ac33861edb48..38d17e2e2b4c 100644
>> --- a/drivers/pwm/pwm-lpss-platform.c
>> +++ b/drivers/pwm/pwm-lpss-platform.c
>> @@ -71,7 +71,8 @@ static int pwm_lpss_probe_platform(struct platform_device *pdev)
>>          * 2. The state restoring code unexpectedly messing with the controller
>>          */
>>         if (info->other_devices_aml_touches_pwm_regs)
>> -               dev_pm_set_driver_flags(&pdev->dev, DPM_FLAG_NO_DIRECT_COMPLETE);
>> +               dev_pm_set_driver_flags(&pdev->dev, DPM_FLAG_NO_DIRECT_COMPLETE|
>> +                                                   DPM_FLAG_SMART_SUSPEND);
>>
>>         pm_runtime_set_active(&pdev->dev);
>>         pm_runtime_enable(&pdev->dev);
>> --
>> 2.28.0
>>
> 
> 




[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux