Re: [RFC] ACPI: platform-profile: support for AC vs DC modes

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

 



Hi,

On 3/8/22 16:55, Limonciello, Mario wrote:
> [AMD Official Use Only]
> 
>>> I don't think that's right for the PSC Thinkpads.  They have dedicated
>>> different tunings for each of the slider positions on AC vs DC.
>>>
>>> So "balanced" on AC will not be the same as "balanced" on DC.
>>
>> I see, but it is not like balanced on AC is closer to performance
>> on DC then it is to balanced on DC, right? IOW in the UI we should
>> still call them both balanced ?
> 
> I feel that's a gross oversimplification to say balanced on AC is close
> to performance on DC.  There are *so many* other (otherwise invisible)
> tuning knobs behind what PSC does that Lenovo has weighed out the benefits
> of using for different circumstances.  
> 
> You nerf all this by just having one user space facing knob and let userspace
> change to performance mode when you on charger.

The way I see this there are 2 ways this can work on the kernel to fw/ec
boundary:

1. There are actually 6 values we can write to a single slot:
   ac-low-power,dc-lowpower,ac-balanced,dc-balanced,ac-performance,dc-performance

2. There are separate ac-setting + dc-setting slots to which we can
   write one of 3 values: low-power, balanced, performance; and the fw/ec
   automatically picks which slot to used based on ac vs battery status

If 1 is the case for PSC then I agree that the kernel should indeed get involved
and it should automatically write either the ac or dc variant of the last
userspace requested value so that things behave as expected.

If 2 however is the case then I think all that is necessary is for the
driver to just write the last userspace selected value to both slots.

Note that neither case requires a userspace API change when solved
as I suggest.

> At least the way Windows does this is that it offers "one" UI slider but you
> have last selected values based on if you're plugged in or on battery.
> 
> 1) So on battery I might have balanced selected to start out.
> 2) Then I plug in a charger, and balanced is still selected but this has
> different characteristics from balanced on battery.
> 3) Now I change to performance while on charger.
> 4) Then I unplug charger and it goes back to my selection for battery: "balanced".

The above is more about policy then it is about mechanism, userspace
can easily remember 2 separate settings for ac vs battery and restore
the last set value for ac or battery when changing between the 2.

Since this mostly about the policy which profile to set when this
really belongs in userspace IMHO and solving this in userspace means that
we will have a single universal solution for all the different
platform_profile implementations, and we seem to have quite a lot of
those (at least one per laptop vendor, Lenovo currently has 2)

>> If that is right then I think my point still stands, if PSC
>> has 2 separate slots (one AC one DC) for the performance
>> setting, then we can just set both when userspace selects a
>> performance level and have the actual e.g. balanced -> performance
>> change be done by userspace when userspace select the machine
>> has been connected to a charger.
> 
> But you *don't want to* actually select performance when you switch to a
> charger.  If you have 3 value slots for AC and 3 value slots for DC you
> should only be swapping between what is in those 3 values slots.

That only works if all implementation have separate AC and DC profile
slots, which most won't have. If we just sync the 2 slots for implementations
which do have 2 slots and then always "fake" 2 slots in userspace we
have a universal implementation which will work well everywhere, without
any significant downside to the implementations which do have 2 slots.

Regards,

Hans




[Index of Archives]     [Linux Kernel Development]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux