Re: [PATCH v1 1/2] PM/devfreq: add suspend frequency support

MyungJoo Ham myungjoo.ham at
Wed Nov 23 21:19:03 PST 2016

On Wed, Nov 23, 2016 at 11:01 AM, hl <hl at> wrote:
> On 2016年11月22日 20:48, MyungJoo Ham wrote:
>> On Thu, Nov 3, 2016 at 4:03 PM, hl <hl at> wrote:
>>> Hi MyungJoo Ham,
>>> On 2016年11月02日 14:35, MyungJoo Ham wrote:
>>>>> Add suspend frequency support and if needed set it to
>>>>> the frequency obtained from the suspend opp (can be defined
>>>>> using opp-v2 bindings and is optional).
>>>>> +       if (devfreq->suspend_freq)
>>>>> +               devfreq_update_status(devfreq, devfreq->suspend_freq);
>>>>> +       else
>>>>> +               devfreq_update_status(devfreq, devfreq->previous_freq);
>>>> This is incorrect.
>>>> devfreq_update_status is to record the statistics.
>>>> This code intends to record the current status before entering suspend;
>>>> thus you should not record "suspend_freq" here.
>>>> If you really need to record the frequency during suspended state
>>>> for the statistics, you need to do that at resume; however, I object to
>>>> that idea either.
>>>> If you really want to set a predefined suspend-to-RAM mode frequency,
>>>> (probably because of HW instability during resume process)
>>>> you need to update, not udpate_status (statistics).
>>> Thanks for pointing it, but if i use update_devfreq(), it can not specify
>>> the
>>> frequency, it call the get_target_freq() to get the frequency and
>>> setting,
>>> use now devfreq framework, it seems hard to set the specific freqeuency
>>> when suspend. Do you have any idea, thanks.
>> It appears that we need to set the frequency directly with target()
>> function
>> at suspend/resume after it is assured that related routines are
>> already suspended.
>> Plus, you might need to consider using devfreq_suspend/resume_device
>> instead
>> of monitor. monitor functions are for the governor-specific behaviors.
>> You'll need such capabilities regardless of governors. (even
>> userspace-governor
>> needs this)
> We still need to sync the all status even i call target() in
> devfreq_suspend/resume_device
> directly, so still need update_devfreq() other setp except
> devfreq->governor->get_target_freq(devfreq, &freq);

The devfreq_update() there, which is to invoke corresponding
governor to decide next frequency (get_target_freq).

In order to change the frequency ignoring whatever governors might say
(i.e., we are going to suspend / resume now), you need to talk to
the driver directly without invoking governors.

You only need to be careful on the sequence of notification chains and
status updating (you will probably be writing a much simpler version of
update_devfreq() for suspend/resume)




More information about the Linux-rockchip mailing list