2020-12-29 19:18:25 -05:00
|
|
|
=====================================================================
|
|
|
|
Platform Profile Selection (e.g. /sys/firmware/acpi/platform_profile)
|
|
|
|
=====================================================================
|
|
|
|
|
|
|
|
On modern systems the platform performance, temperature, fan and other
|
|
|
|
hardware related characteristics are often dynamically configurable. The
|
|
|
|
platform configuration is often automatically adjusted to the current
|
|
|
|
conditions by some automatic mechanism (which may very well live outside
|
|
|
|
the kernel).
|
|
|
|
|
|
|
|
These auto platform adjustment mechanisms often can be configured with
|
|
|
|
one of several platform profiles, with either a bias towards low power
|
|
|
|
operation or towards performance.
|
|
|
|
|
|
|
|
The purpose of the platform_profile attribute is to offer a generic sysfs
|
|
|
|
API for selecting the platform profile of these automatic mechanisms.
|
|
|
|
|
|
|
|
Note that this API is only for selecting the platform profile, it is
|
|
|
|
NOT a goal of this API to allow monitoring the resulting performance
|
|
|
|
characteristics. Monitoring performance is best done with device/vendor
|
2025-05-22 14:52:55 +03:00
|
|
|
specific tools, e.g. turbostat.
|
2020-12-29 19:18:25 -05:00
|
|
|
|
2025-05-22 14:52:55 +03:00
|
|
|
Specifically, when selecting a high performance profile the actual achieved
|
2020-12-29 19:18:25 -05:00
|
|
|
performance may be limited by various factors such as: the heat generated
|
|
|
|
by other components, room temperature, free air flow at the bottom of a
|
|
|
|
laptop, etc. It is explicitly NOT a goal of this API to let userspace know
|
|
|
|
about any sub-optimal conditions which are impeding reaching the requested
|
|
|
|
performance level.
|
|
|
|
|
|
|
|
Since numbers on their own cannot represent the multiple variables that a
|
|
|
|
profile will adjust (power consumption, heat generation, etc) this API
|
|
|
|
uses strings to describe the various profiles. To make sure that userspace
|
|
|
|
gets a consistent experience the sysfs-platform_profile ABI document defines
|
|
|
|
a fixed set of profile names. Drivers *must* map their internal profile
|
|
|
|
representation onto this fixed set.
|
|
|
|
|
|
|
|
If there is no good match when mapping then a new profile name may be
|
|
|
|
added. Drivers which wish to introduce new profile names must:
|
|
|
|
|
2023-01-29 15:10:53 -08:00
|
|
|
1. Explain why the existing profile names cannot be used.
|
2020-12-29 19:18:25 -05:00
|
|
|
2. Add the new profile name, along with a clear description of the
|
|
|
|
expected behaviour, to the sysfs-platform_profile ABI documentation.
|
2024-12-05 21:19:18 -06:00
|
|
|
|
|
|
|
"Custom" profile support
|
|
|
|
========================
|
|
|
|
The platform_profile class also supports profiles advertising a "custom"
|
2025-05-22 14:52:55 +03:00
|
|
|
profile. This is intended to be set by drivers when the settings in the
|
2024-12-05 21:19:18 -06:00
|
|
|
driver have been modified in a way that a standard profile doesn't represent
|
|
|
|
the current state.
|
|
|
|
|
|
|
|
Multiple driver support
|
|
|
|
=======================
|
|
|
|
When multiple drivers on a system advertise a platform profile handler, the
|
|
|
|
platform profile handler core will only advertise the profiles that are
|
|
|
|
common between all drivers to the ``/sys/firmware/acpi`` interfaces.
|
|
|
|
|
|
|
|
This is to ensure there is no ambiguity on what the profile names mean when
|
|
|
|
all handlers don't support a profile.
|
|
|
|
|
|
|
|
Individual drivers will register a 'platform_profile' class device that has
|
|
|
|
similar semantics as the ``/sys/firmware/acpi/platform_profile`` interface.
|
|
|
|
|
|
|
|
To discover which driver is associated with a platform profile handler the
|
|
|
|
user can read the ``name`` attribute of the class device.
|
|
|
|
|
|
|
|
To discover available profiles from the class interface the user can read the
|
|
|
|
``choices`` attribute.
|
|
|
|
|
|
|
|
If a user wants to select a profile for a specific driver, they can do so
|
|
|
|
by writing to the ``profile`` attribute of the driver's class device.
|
|
|
|
|
|
|
|
This will allow users to set different profiles for different drivers on the
|
|
|
|
same system. If the selected profile by individual drivers differs the
|
|
|
|
platform profile handler core will display the profile 'custom' to indicate
|
|
|
|
that the profiles are not the same.
|
|
|
|
|
|
|
|
While the ``platform_profile`` attribute has the value ``custom``, writing a
|
|
|
|
common profile from ``platform_profile_choices`` to the platform_profile
|
|
|
|
attribute of the platform profile handler core will set the profile for all
|
|
|
|
drivers.
|