| .. SPDX-License-Identifier: GPL-2.0 | |
| =============================================================== | |
| Intel(R) Dynamic Platform and Thermal Framework Sysfs Interface | |
| =============================================================== | |
| :Copyright: © 2022 Intel Corporation | |
| :Author: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> | |
| Introduction | |
| ------------ | |
| Intel(R) Dynamic Platform and Thermal Framework (DPTF) is a platform | |
| level hardware/software solution for power and thermal management. | |
| As a container for multiple power/thermal technologies, DPTF provides | |
| a coordinated approach for different policies to effect the hardware | |
| state of a system. | |
| Since it is a platform level framework, this has several components. | |
| Some parts of the technology is implemented in the firmware and uses | |
| ACPI and PCI devices to expose various features for monitoring and | |
| control. Linux has a set of kernel drivers exposing hardware interface | |
| to user space. This allows user space thermal solutions like | |
| "Linux Thermal Daemon" to read platform specific thermal and power | |
| tables to deliver adequate performance while keeping the system under | |
| thermal limits. | |
| DPTF ACPI Drivers interface | |
| ---------------------------- | |
| :file:`/sys/bus/platform/devices/<N>/uuids`, where <N> | |
| =INT3400|INTC1040|INTC1041|INTC10A0 | |
| ``available_uuids`` (RO) | |
| A set of UUIDs strings presenting available policies | |
| which should be notified to the firmware when the | |
| user space can support those policies. | |
| UUID strings: | |
| "42A441D6-AE6A-462b-A84B-4A8CE79027D3" : Passive 1 | |
| "3A95C389-E4B8-4629-A526-C52C88626BAE" : Active | |
| "97C68AE7-15FA-499c-B8C9-5DA81D606E0A" : Critical | |
| "63BE270F-1C11-48FD-A6F7-3AF253FF3E2D" : Adaptive performance | |
| "5349962F-71E6-431D-9AE8-0A635B710AEE" : Emergency call | |
| "9E04115A-AE87-4D1C-9500-0F3E340BFE75" : Passive 2 | |
| "F5A35014-C209-46A4-993A-EB56DE7530A1" : Power Boss | |
| "6ED722A7-9240-48A5-B479-31EEF723D7CF" : Virtual Sensor | |
| "16CAF1B7-DD38-40ED-B1C1-1B8A1913D531" : Cooling mode | |
| "BE84BABF-C4D4-403D-B495-3128FD44dAC1" : HDC | |
| ``current_uuid`` (RW) | |
| User space can write strings from available UUIDs, one at a | |
| time. | |
| :file:`/sys/bus/platform/devices/<N>/`, where <N> | |
| =INT3400|INTC1040|INTC1041|INTC10A0 | |
| ``imok`` (WO) | |
| User space daemon write 1 to respond to firmware event | |
| for sending keep alive notification. User space receives | |
| THERMAL_EVENT_KEEP_ALIVE kobject uevent notification when | |
| firmware calls for user space to respond with imok ACPI | |
| method. | |
| ``odvp*`` (RO) | |
| Firmware thermal status variable values. Thermal tables | |
| calls for different processing based on these variable | |
| values. | |
| ``data_vault`` (RO) | |
| Binary thermal table. Refer to | |
| https:/github.com/intel/thermal_daemon for decoding | |
| thermal table. | |
| ``production_mode`` (RO) | |
| When different from zero, manufacturer locked thermal configuration | |
| from further changes. | |
| ACPI Thermal Relationship table interface | |
| ------------------------------------------ | |
| :file:`/dev/acpi_thermal_rel` | |
| This device provides IOCTL interface to read standard ACPI | |
| thermal relationship tables via ACPI methods _TRT and _ART. | |
| These IOCTLs are defined in | |
| drivers/thermal/intel/int340x_thermal/acpi_thermal_rel.h | |
| IOCTLs: | |
| ACPI_THERMAL_GET_TRT_LEN: Get length of TRT table | |
| ACPI_THERMAL_GET_ART_LEN: Get length of ART table | |
| ACPI_THERMAL_GET_TRT_COUNT: Number of records in TRT table | |
| ACPI_THERMAL_GET_ART_COUNT: Number of records in ART table | |
| ACPI_THERMAL_GET_TRT: Read binary TRT table, length to read is | |
| provided via argument to ioctl(). | |
| ACPI_THERMAL_GET_ART: Read binary ART table, length to read is | |
| provided via argument to ioctl(). | |
| DPTF ACPI Sensor drivers | |
| ------------------------- | |
| DPTF Sensor drivers are presented as standard thermal sysfs thermal_zone. | |
| DPTF ACPI Cooling drivers | |
| -------------------------- | |
| DPTF cooling drivers are presented as standard thermal sysfs cooling_device. | |
| DPTF Processor thermal PCI Driver interface | |
| -------------------------------------------- | |
| :file:`/sys/bus/pci/devices/0000\:00\:04.0/power_limits/` | |
| Refer to Documentation/power/powercap/powercap.rst for powercap | |
| ABI. | |
| ``power_limit_0_max_uw`` (RO) | |
| Maximum powercap sysfs constraint_0_power_limit_uw for Intel RAPL | |
| ``power_limit_0_step_uw`` (RO) | |
| Power limit increment/decrements for Intel RAPL constraint 0 power limit | |
| ``power_limit_0_min_uw`` (RO) | |
| Minimum powercap sysfs constraint_0_power_limit_uw for Intel RAPL | |
| ``power_limit_0_tmin_us`` (RO) | |
| Minimum powercap sysfs constraint_0_time_window_us for Intel RAPL | |
| ``power_limit_0_tmax_us`` (RO) | |
| Maximum powercap sysfs constraint_0_time_window_us for Intel RAPL | |
| ``power_limit_1_max_uw`` (RO) | |
| Maximum powercap sysfs constraint_1_power_limit_uw for Intel RAPL | |
| ``power_limit_1_step_uw`` (RO) | |
| Power limit increment/decrements for Intel RAPL constraint 1 power limit | |
| ``power_limit_1_min_uw`` (RO) | |
| Minimum powercap sysfs constraint_1_power_limit_uw for Intel RAPL | |
| ``power_limit_1_tmin_us`` (RO) | |
| Minimum powercap sysfs constraint_1_time_window_us for Intel RAPL | |
| ``power_limit_1_tmax_us`` (RO) | |
| Maximum powercap sysfs constraint_1_time_window_us for Intel RAPL | |
| ``power_floor_status`` (RO) | |
| When set to 1, the power floor of the system in the current | |
| configuration has been reached. It needs to be reconfigured to allow | |
| power to be reduced any further. | |
| ``power_floor_enable`` (RW) | |
| When set to 1, enable reading and notification of the power floor | |
| status. Notifications are triggered for the power_floor_status | |
| attribute value changes. | |
| :file:`/sys/bus/pci/devices/0000\:00\:04.0/` | |
| ``tcc_offset_degree_celsius`` (RW) | |
| TCC offset from the critical temperature where hardware will throttle | |
| CPU. | |
| :file:`/sys/bus/pci/devices/0000\:00\:04.0/workload_request` | |
| ``workload_available_types`` (RO) | |
| Available workload types. User space can specify one of the workload type | |
| it is currently executing via workload_type. For example: idle, bursty, | |
| sustained etc. | |
| ``workload_type`` (RW) | |
| User space can specify any one of the available workload type using | |
| this interface. | |
| DPTF Processor thermal RFIM interface | |
| -------------------------------------------- | |
| RFIM interface allows adjustment of FIVR (Fully Integrated Voltage Regulator), | |
| DDR (Double Data Rate) and DLVR (Digital Linear Voltage Regulator) | |
| frequencies to avoid RF interference with WiFi and 5G. | |
| Switching voltage regulators (VR) generate radiated EMI or RFI at the | |
| fundamental frequency and its harmonics. Some harmonics may interfere | |
| with very sensitive wireless receivers such as Wi-Fi and cellular that | |
| are integrated into host systems like notebook PCs. One of mitigation | |
| methods is requesting SOC integrated VR (IVR) switching frequency to a | |
| small % and shift away the switching noise harmonic interference from | |
| radio channels. OEM or ODMs can use the driver to control SOC IVR | |
| operation within the range where it does not impact IVR performance. | |
| Some products use DLVR instead of FIVR as switching voltage regulator. | |
| In this case attributes of DLVR must be adjusted instead of FIVR. | |
| While shifting the frequencies additional clock noise can be introduced, | |
| which is compensated by adjusting Spread spectrum percent. This helps | |
| to reduce the clock noise to meet regulatory compliance. This spreading | |
| % increases bandwidth of signal transmission and hence reduces the | |
| effects of interference, noise and signal fading. | |
| DRAM devices of DDR IO interface and their power plane can generate EMI | |
| at the data rates. Similar to IVR control mechanism, Intel offers a | |
| mechanism by which DDR data rates can be changed if several conditions | |
| are met: there is strong RFI interference because of DDR; CPU power | |
| management has no other restriction in changing DDR data rates; | |
| PC ODMs enable this feature (real time DDR RFI Mitigation referred to as | |
| DDR-RFIM) for Wi-Fi from BIOS. | |
| FIVR attributes | |
| :file:`/sys/bus/pci/devices/0000\:00\:04.0/fivr/` | |
| ``vco_ref_code_lo`` (RW) | |
| The VCO reference code is an 11-bit field and controls the FIVR | |
| switching frequency. This is the 3-bit LSB field. | |
| ``vco_ref_code_hi`` (RW) | |
| The VCO reference code is an 11-bit field and controls the FIVR | |
| switching frequency. This is the 8-bit MSB field. | |
| ``spread_spectrum_pct`` (RW) | |
| Set the FIVR spread spectrum clocking percentage | |
| ``spread_spectrum_clk_enable`` (RW) | |
| Enable/disable of the FIVR spread spectrum clocking feature | |
| ``rfi_vco_ref_code`` (RW) | |
| This field is a read only status register which reflects the | |
| current FIVR switching frequency | |
| ``fivr_fffc_rev`` (RW) | |
| This field indicated the revision of the FIVR HW. | |
| DVFS attributes | |
| :file:`/sys/bus/pci/devices/0000\:00\:04.0/dvfs/` | |
| ``rfi_restriction_run_busy`` (RW) | |
| Request the restriction of specific DDR data rate and set this | |
| value 1. Self reset to 0 after operation. | |
| ``rfi_restriction_err_code`` (RW) | |
| 0 :Request is accepted, 1:Feature disabled, | |
| 2: the request restricts more points than it is allowed | |
| ``rfi_restriction_data_rate_Delta`` (RW) | |
| Restricted DDR data rate for RFI protection: Lower Limit | |
| ``rfi_restriction_data_rate_Base`` (RW) | |
| Restricted DDR data rate for RFI protection: Upper Limit | |
| ``ddr_data_rate_point_0`` (RO) | |
| DDR data rate selection 1st point | |
| ``ddr_data_rate_point_1`` (RO) | |
| DDR data rate selection 2nd point | |
| ``ddr_data_rate_point_2`` (RO) | |
| DDR data rate selection 3rd point | |
| ``ddr_data_rate_point_3`` (RO) | |
| DDR data rate selection 4th point | |
| ``rfi_disable (RW)`` | |
| Disable DDR rate change feature | |
| DLVR attributes | |
| :file:`/sys/bus/pci/devices/0000\:00\:04.0/dlvr/` | |
| ``dlvr_hardware_rev`` (RO) | |
| DLVR hardware revision. | |
| ``dlvr_freq_mhz`` (RO) | |
| Current DLVR PLL frequency in MHz. | |
| ``dlvr_freq_select`` (RW) | |
| Sets DLVR PLL clock frequency. Once set, and enabled via | |
| dlvr_rfim_enable, the dlvr_freq_mhz will show the current | |
| DLVR PLL frequency. | |
| ``dlvr_pll_busy`` (RO) | |
| PLL can't accept frequency change when set. | |
| ``dlvr_rfim_enable`` (RW) | |
| 0: Disable RF frequency hopping, 1: Enable RF frequency hopping. | |
| ``dlvr_spread_spectrum_pct`` (RW) | |
| Sets DLVR spread spectrum percent value. | |
| ``dlvr_control_mode`` (RW) | |
| Specifies how frequencies are spread using spread spectrum. | |
| 0: Down spread, | |
| 1: Spread in the Center. | |
| ``dlvr_control_lock`` (RW) | |
| 1: future writes are ignored. | |
| DPTF Power supply and Battery Interface | |
| ---------------------------------------- | |
| Refer to Documentation/ABI/testing/sysfs-platform-dptf | |
| DPTF Fan Control | |
| ---------------------------------------- | |
| Refer to Documentation/admin-guide/acpi/fan_performance_states.rst | |
| Workload Type Hints | |
| ---------------------------------------- | |
| The firmware in Meteor Lake processor generation is capable of identifying | |
| workload type and passing hints regarding it to the OS. A special sysfs | |
| interface is provided to allow user space to obtain workload type hints from | |
| the firmware and control the rate at which they are provided. | |
| User space can poll attribute "workload_type_index" for the current hint or | |
| can receive a notification whenever the value of this attribute is updated. | |
| file:`/sys/bus/pci/devices/0000:00:04.0/workload_hint/` | |
| Segment 0, bus 0, device 4, function 0 is reserved for the processor thermal | |
| device on all Intel client processors. So, the above path doesn't change | |
| based on the processor generation. | |
| ``workload_hint_enable`` (RW) | |
| Enable firmware to send workload type hints to user space. | |
| ``notification_delay_ms`` (RW) | |
| Minimum delay in milliseconds before firmware will notify OS. This is | |
| for the rate control of notifications. This delay is between changing | |
| the workload type prediction in the firmware and notifying the OS about | |
| the change. The default delay is 1024 ms. The delay of 0 is invalid. | |
| The delay is rounded up to the nearest power of 2 to simplify firmware | |
| programming of the delay value. The read of notification_delay_ms | |
| attribute shows the effective value used. | |
| ``workload_type_index`` (RO) | |
| Predicted workload type index. User space can get notification of | |
| change via existing sysfs attribute change notification mechanism. | |
| The supported index values and their meaning for the Meteor Lake | |
| processor generation are as follows: | |
| 0 - Idle: System performs no tasks, power and idle residency are | |
| consistently low for long periods of time. | |
| 1 – Battery Life: Power is relatively low, but the processor may | |
| still be actively performing a task, such as video playback for | |
| a long period of time. | |
| 2 – Sustained: Power level that is relatively high for a long period | |
| of time, with very few to no periods of idleness, which will | |
| eventually exhaust RAPL Power Limit 1 and 2. | |
| 3 – Bursty: Consumes a relatively constant average amount of power, but | |
| periods of relative idleness are interrupted by bursts of | |
| activity. The bursts are relatively short and the periods of | |
| relative idleness between them typically prevent RAPL Power | |
| Limit 1 from being exhausted. | |
| 4 – Unknown: Can't classify. |