116c02447SSrinivas Pandruvada.. SPDX-License-Identifier: GPL-2.0 216c02447SSrinivas Pandruvada 316c02447SSrinivas Pandruvada=============================================================== 416c02447SSrinivas PandruvadaIntel(R) Dynamic Platform and Thermal Framework Sysfs Interface 516c02447SSrinivas Pandruvada=============================================================== 616c02447SSrinivas Pandruvada 72c2de6f2SAkira Yokosawa:Copyright: © 2022 Intel Corporation 816c02447SSrinivas Pandruvada 916c02447SSrinivas Pandruvada:Author: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> 1016c02447SSrinivas Pandruvada 1116c02447SSrinivas PandruvadaIntroduction 1216c02447SSrinivas Pandruvada------------ 1316c02447SSrinivas Pandruvada 1416c02447SSrinivas PandruvadaIntel(R) Dynamic Platform and Thermal Framework (DPTF) is a platform 1516c02447SSrinivas Pandruvadalevel hardware/software solution for power and thermal management. 1616c02447SSrinivas Pandruvada 1716c02447SSrinivas PandruvadaAs a container for multiple power/thermal technologies, DPTF provides 1816c02447SSrinivas Pandruvadaa coordinated approach for different policies to effect the hardware 1916c02447SSrinivas Pandruvadastate of a system. 2016c02447SSrinivas Pandruvada 2116c02447SSrinivas PandruvadaSince it is a platform level framework, this has several components. 2216c02447SSrinivas PandruvadaSome parts of the technology is implemented in the firmware and uses 2316c02447SSrinivas PandruvadaACPI and PCI devices to expose various features for monitoring and 2416c02447SSrinivas Pandruvadacontrol. Linux has a set of kernel drivers exposing hardware interface 2516c02447SSrinivas Pandruvadato user space. This allows user space thermal solutions like 2616c02447SSrinivas Pandruvada"Linux Thermal Daemon" to read platform specific thermal and power 2716c02447SSrinivas Pandruvadatables to deliver adequate performance while keeping the system under 2816c02447SSrinivas Pandruvadathermal limits. 2916c02447SSrinivas Pandruvada 3016c02447SSrinivas PandruvadaDPTF ACPI Drivers interface 3116c02447SSrinivas Pandruvada---------------------------- 3216c02447SSrinivas Pandruvada 3316c02447SSrinivas Pandruvada:file:`/sys/bus/platform/devices/<N>/uuids`, where <N> 3416c02447SSrinivas Pandruvada=INT3400|INTC1040|INTC1041|INTC10A0 3516c02447SSrinivas Pandruvada 3616c02447SSrinivas Pandruvada``available_uuids`` (RO) 3716c02447SSrinivas Pandruvada A set of UUIDs strings presenting available policies 3816c02447SSrinivas Pandruvada which should be notified to the firmware when the 3916c02447SSrinivas Pandruvada user space can support those policies. 4016c02447SSrinivas Pandruvada 4116c02447SSrinivas Pandruvada UUID strings: 4216c02447SSrinivas Pandruvada 4316c02447SSrinivas Pandruvada "42A441D6-AE6A-462b-A84B-4A8CE79027D3" : Passive 1 4416c02447SSrinivas Pandruvada 4516c02447SSrinivas Pandruvada "3A95C389-E4B8-4629-A526-C52C88626BAE" : Active 4616c02447SSrinivas Pandruvada 4716c02447SSrinivas Pandruvada "97C68AE7-15FA-499c-B8C9-5DA81D606E0A" : Critical 4816c02447SSrinivas Pandruvada 4916c02447SSrinivas Pandruvada "63BE270F-1C11-48FD-A6F7-3AF253FF3E2D" : Adaptive performance 5016c02447SSrinivas Pandruvada 5116c02447SSrinivas Pandruvada "5349962F-71E6-431D-9AE8-0A635B710AEE" : Emergency call 5216c02447SSrinivas Pandruvada 5316c02447SSrinivas Pandruvada "9E04115A-AE87-4D1C-9500-0F3E340BFE75" : Passive 2 5416c02447SSrinivas Pandruvada 5516c02447SSrinivas Pandruvada "F5A35014-C209-46A4-993A-EB56DE7530A1" : Power Boss 5616c02447SSrinivas Pandruvada 5716c02447SSrinivas Pandruvada "6ED722A7-9240-48A5-B479-31EEF723D7CF" : Virtual Sensor 5816c02447SSrinivas Pandruvada 5916c02447SSrinivas Pandruvada "16CAF1B7-DD38-40ED-B1C1-1B8A1913D531" : Cooling mode 6016c02447SSrinivas Pandruvada 6116c02447SSrinivas Pandruvada "BE84BABF-C4D4-403D-B495-3128FD44dAC1" : HDC 6216c02447SSrinivas Pandruvada 6316c02447SSrinivas Pandruvada``current_uuid`` (RW) 6416c02447SSrinivas Pandruvada User space can write strings from available UUIDs, one at a 6516c02447SSrinivas Pandruvada time. 6616c02447SSrinivas Pandruvada 6716c02447SSrinivas Pandruvada:file:`/sys/bus/platform/devices/<N>/`, where <N> 6816c02447SSrinivas Pandruvada=INT3400|INTC1040|INTC1041|INTC10A0 6916c02447SSrinivas Pandruvada 7016c02447SSrinivas Pandruvada``imok`` (WO) 7116c02447SSrinivas Pandruvada User space daemon write 1 to respond to firmware event 7216c02447SSrinivas Pandruvada for sending keep alive notification. User space receives 7316c02447SSrinivas Pandruvada THERMAL_EVENT_KEEP_ALIVE kobject uevent notification when 7416c02447SSrinivas Pandruvada firmware calls for user space to respond with imok ACPI 7516c02447SSrinivas Pandruvada method. 7616c02447SSrinivas Pandruvada 7716c02447SSrinivas Pandruvada``odvp*`` (RO) 7816c02447SSrinivas Pandruvada Firmware thermal status variable values. Thermal tables 7916c02447SSrinivas Pandruvada calls for different processing based on these variable 8016c02447SSrinivas Pandruvada values. 8116c02447SSrinivas Pandruvada 8216c02447SSrinivas Pandruvada``data_vault`` (RO) 8316c02447SSrinivas Pandruvada Binary thermal table. Refer to 8416c02447SSrinivas Pandruvada https:/github.com/intel/thermal_daemon for decoding 8516c02447SSrinivas Pandruvada thermal table. 8616c02447SSrinivas Pandruvada 875c36cf27SSrinivas Pandruvada``production_mode`` (RO) 885c36cf27SSrinivas Pandruvada When different from zero, manufacturer locked thermal configuration 895c36cf27SSrinivas Pandruvada from further changes. 9016c02447SSrinivas Pandruvada 9116c02447SSrinivas PandruvadaACPI Thermal Relationship table interface 9216c02447SSrinivas Pandruvada------------------------------------------ 9316c02447SSrinivas Pandruvada 9416c02447SSrinivas Pandruvada:file:`/dev/acpi_thermal_rel` 9516c02447SSrinivas Pandruvada 9616c02447SSrinivas Pandruvada This device provides IOCTL interface to read standard ACPI 9716c02447SSrinivas Pandruvada thermal relationship tables via ACPI methods _TRT and _ART. 9816c02447SSrinivas Pandruvada These IOCTLs are defined in 9916c02447SSrinivas Pandruvada drivers/thermal/intel/int340x_thermal/acpi_thermal_rel.h 10016c02447SSrinivas Pandruvada 10116c02447SSrinivas Pandruvada IOCTLs: 10216c02447SSrinivas Pandruvada 10316c02447SSrinivas Pandruvada ACPI_THERMAL_GET_TRT_LEN: Get length of TRT table 10416c02447SSrinivas Pandruvada 10516c02447SSrinivas Pandruvada ACPI_THERMAL_GET_ART_LEN: Get length of ART table 10616c02447SSrinivas Pandruvada 10716c02447SSrinivas Pandruvada ACPI_THERMAL_GET_TRT_COUNT: Number of records in TRT table 10816c02447SSrinivas Pandruvada 10916c02447SSrinivas Pandruvada ACPI_THERMAL_GET_ART_COUNT: Number of records in ART table 11016c02447SSrinivas Pandruvada 11116c02447SSrinivas Pandruvada ACPI_THERMAL_GET_TRT: Read binary TRT table, length to read is 11216c02447SSrinivas Pandruvada provided via argument to ioctl(). 11316c02447SSrinivas Pandruvada 11416c02447SSrinivas Pandruvada ACPI_THERMAL_GET_ART: Read binary ART table, length to read is 11516c02447SSrinivas Pandruvada provided via argument to ioctl(). 11616c02447SSrinivas Pandruvada 11716c02447SSrinivas PandruvadaDPTF ACPI Sensor drivers 11816c02447SSrinivas Pandruvada------------------------- 11916c02447SSrinivas Pandruvada 12016c02447SSrinivas PandruvadaDPTF Sensor drivers are presented as standard thermal sysfs thermal_zone. 12116c02447SSrinivas Pandruvada 12216c02447SSrinivas Pandruvada 12316c02447SSrinivas PandruvadaDPTF ACPI Cooling drivers 12416c02447SSrinivas Pandruvada-------------------------- 12516c02447SSrinivas Pandruvada 12616c02447SSrinivas PandruvadaDPTF cooling drivers are presented as standard thermal sysfs cooling_device. 12716c02447SSrinivas Pandruvada 12816c02447SSrinivas Pandruvada 12916c02447SSrinivas PandruvadaDPTF Processor thermal PCI Driver interface 13016c02447SSrinivas Pandruvada-------------------------------------------- 13116c02447SSrinivas Pandruvada 13216c02447SSrinivas Pandruvada:file:`/sys/bus/pci/devices/0000\:00\:04.0/power_limits/` 13316c02447SSrinivas Pandruvada 13416c02447SSrinivas PandruvadaRefer to Documentation/power/powercap/powercap.rst for powercap 13516c02447SSrinivas PandruvadaABI. 13616c02447SSrinivas Pandruvada 13716c02447SSrinivas Pandruvada``power_limit_0_max_uw`` (RO) 13816c02447SSrinivas Pandruvada Maximum powercap sysfs constraint_0_power_limit_uw for Intel RAPL 13916c02447SSrinivas Pandruvada 14016c02447SSrinivas Pandruvada``power_limit_0_step_uw`` (RO) 14116c02447SSrinivas Pandruvada Power limit increment/decrements for Intel RAPL constraint 0 power limit 14216c02447SSrinivas Pandruvada 14316c02447SSrinivas Pandruvada``power_limit_0_min_uw`` (RO) 14416c02447SSrinivas Pandruvada Minimum powercap sysfs constraint_0_power_limit_uw for Intel RAPL 14516c02447SSrinivas Pandruvada 14616c02447SSrinivas Pandruvada``power_limit_0_tmin_us`` (RO) 14716c02447SSrinivas Pandruvada Minimum powercap sysfs constraint_0_time_window_us for Intel RAPL 14816c02447SSrinivas Pandruvada 14916c02447SSrinivas Pandruvada``power_limit_0_tmax_us`` (RO) 15016c02447SSrinivas Pandruvada Maximum powercap sysfs constraint_0_time_window_us for Intel RAPL 15116c02447SSrinivas Pandruvada 15216c02447SSrinivas Pandruvada``power_limit_1_max_uw`` (RO) 15316c02447SSrinivas Pandruvada Maximum powercap sysfs constraint_1_power_limit_uw for Intel RAPL 15416c02447SSrinivas Pandruvada 15516c02447SSrinivas Pandruvada``power_limit_1_step_uw`` (RO) 15616c02447SSrinivas Pandruvada Power limit increment/decrements for Intel RAPL constraint 1 power limit 15716c02447SSrinivas Pandruvada 15816c02447SSrinivas Pandruvada``power_limit_1_min_uw`` (RO) 15916c02447SSrinivas Pandruvada Minimum powercap sysfs constraint_1_power_limit_uw for Intel RAPL 16016c02447SSrinivas Pandruvada 16116c02447SSrinivas Pandruvada``power_limit_1_tmin_us`` (RO) 16216c02447SSrinivas Pandruvada Minimum powercap sysfs constraint_1_time_window_us for Intel RAPL 16316c02447SSrinivas Pandruvada 16416c02447SSrinivas Pandruvada``power_limit_1_tmax_us`` (RO) 16516c02447SSrinivas Pandruvada Maximum powercap sysfs constraint_1_time_window_us for Intel RAPL 16616c02447SSrinivas Pandruvada 16716c02447SSrinivas Pandruvada:file:`/sys/bus/pci/devices/0000\:00\:04.0/` 16816c02447SSrinivas Pandruvada 16916c02447SSrinivas Pandruvada``tcc_offset_degree_celsius`` (RW) 17016c02447SSrinivas Pandruvada TCC offset from the critical temperature where hardware will throttle 17116c02447SSrinivas Pandruvada CPU. 17216c02447SSrinivas Pandruvada 17316c02447SSrinivas Pandruvada:file:`/sys/bus/pci/devices/0000\:00\:04.0/workload_request` 17416c02447SSrinivas Pandruvada 17516c02447SSrinivas Pandruvada``workload_available_types`` (RO) 17616c02447SSrinivas Pandruvada Available workload types. User space can specify one of the workload type 17716c02447SSrinivas Pandruvada it is currently executing via workload_type. For example: idle, bursty, 17816c02447SSrinivas Pandruvada sustained etc. 17916c02447SSrinivas Pandruvada 18016c02447SSrinivas Pandruvada``workload_type`` (RW) 18116c02447SSrinivas Pandruvada User space can specify any one of the available workload type using 18216c02447SSrinivas Pandruvada this interface. 18316c02447SSrinivas Pandruvada 18416c02447SSrinivas PandruvadaDPTF Processor thermal RFIM interface 18516c02447SSrinivas Pandruvada-------------------------------------------- 18616c02447SSrinivas Pandruvada 187*5bc6b1dfSSrinivas PandruvadaRFIM interface allows adjustment of FIVR (Fully Integrated Voltage Regulator), 188*5bc6b1dfSSrinivas PandruvadaDDR (Double Data Rate) and DLVR (Digital Linear Voltage Regulator) 189*5bc6b1dfSSrinivas Pandruvadafrequencies to avoid RF interference with WiFi and 5G. 19016c02447SSrinivas Pandruvada 19116c02447SSrinivas PandruvadaSwitching voltage regulators (VR) generate radiated EMI or RFI at the 19216c02447SSrinivas Pandruvadafundamental frequency and its harmonics. Some harmonics may interfere 19316c02447SSrinivas Pandruvadawith very sensitive wireless receivers such as Wi-Fi and cellular that 19416c02447SSrinivas Pandruvadaare integrated into host systems like notebook PCs. One of mitigation 19516c02447SSrinivas Pandruvadamethods is requesting SOC integrated VR (IVR) switching frequency to a 19616c02447SSrinivas Pandruvadasmall % and shift away the switching noise harmonic interference from 19716c02447SSrinivas Pandruvadaradio channels. OEM or ODMs can use the driver to control SOC IVR 19816c02447SSrinivas Pandruvadaoperation within the range where it does not impact IVR performance. 19916c02447SSrinivas Pandruvada 200*5bc6b1dfSSrinivas PandruvadaSome products use DLVR instead of FIVR as switching voltage regulator. 201*5bc6b1dfSSrinivas PandruvadaIn this case attributes of DLVR must be adjusted instead of FIVR. 202*5bc6b1dfSSrinivas Pandruvada 203*5bc6b1dfSSrinivas PandruvadaWhile shifting the frequencies additional clock noise can be introduced, 204*5bc6b1dfSSrinivas Pandruvadawhich is compensated by adjusting Spread spectrum percent. This helps 205*5bc6b1dfSSrinivas Pandruvadato reduce the clock noise to meet regulatory compliance. This spreading 206*5bc6b1dfSSrinivas Pandruvada% increases bandwidth of signal transmission and hence reduces the 207*5bc6b1dfSSrinivas Pandruvadaeffects of interference, noise and signal fading. 208*5bc6b1dfSSrinivas Pandruvada 20916c02447SSrinivas PandruvadaDRAM devices of DDR IO interface and their power plane can generate EMI 21016c02447SSrinivas Pandruvadaat the data rates. Similar to IVR control mechanism, Intel offers a 21116c02447SSrinivas Pandruvadamechanism by which DDR data rates can be changed if several conditions 21216c02447SSrinivas Pandruvadaare met: there is strong RFI interference because of DDR; CPU power 21316c02447SSrinivas Pandruvadamanagement has no other restriction in changing DDR data rates; 21416c02447SSrinivas PandruvadaPC ODMs enable this feature (real time DDR RFI Mitigation referred to as 21516c02447SSrinivas PandruvadaDDR-RFIM) for Wi-Fi from BIOS. 21616c02447SSrinivas Pandruvada 21716c02447SSrinivas Pandruvada 21816c02447SSrinivas PandruvadaFIVR attributes 21916c02447SSrinivas Pandruvada 22016c02447SSrinivas Pandruvada:file:`/sys/bus/pci/devices/0000\:00\:04.0/fivr/` 22116c02447SSrinivas Pandruvada 22216c02447SSrinivas Pandruvada``vco_ref_code_lo`` (RW) 22316c02447SSrinivas Pandruvada The VCO reference code is an 11-bit field and controls the FIVR 22416c02447SSrinivas Pandruvada switching frequency. This is the 3-bit LSB field. 22516c02447SSrinivas Pandruvada 22616c02447SSrinivas Pandruvada``vco_ref_code_hi`` (RW) 22716c02447SSrinivas Pandruvada The VCO reference code is an 11-bit field and controls the FIVR 22816c02447SSrinivas Pandruvada switching frequency. This is the 8-bit MSB field. 22916c02447SSrinivas Pandruvada 23016c02447SSrinivas Pandruvada``spread_spectrum_pct`` (RW) 23116c02447SSrinivas Pandruvada Set the FIVR spread spectrum clocking percentage 23216c02447SSrinivas Pandruvada 23316c02447SSrinivas Pandruvada``spread_spectrum_clk_enable`` (RW) 23416c02447SSrinivas Pandruvada Enable/disable of the FIVR spread spectrum clocking feature 23516c02447SSrinivas Pandruvada 23616c02447SSrinivas Pandruvada``rfi_vco_ref_code`` (RW) 23716c02447SSrinivas Pandruvada This field is a read only status register which reflects the 23816c02447SSrinivas Pandruvada current FIVR switching frequency 23916c02447SSrinivas Pandruvada 24016c02447SSrinivas Pandruvada``fivr_fffc_rev`` (RW) 24116c02447SSrinivas Pandruvada This field indicated the revision of the FIVR HW. 24216c02447SSrinivas Pandruvada 24316c02447SSrinivas Pandruvada 24416c02447SSrinivas PandruvadaDVFS attributes 24516c02447SSrinivas Pandruvada 24616c02447SSrinivas Pandruvada:file:`/sys/bus/pci/devices/0000\:00\:04.0/dvfs/` 24716c02447SSrinivas Pandruvada 24816c02447SSrinivas Pandruvada``rfi_restriction_run_busy`` (RW) 24916c02447SSrinivas Pandruvada Request the restriction of specific DDR data rate and set this 25016c02447SSrinivas Pandruvada value 1. Self reset to 0 after operation. 25116c02447SSrinivas Pandruvada 25216c02447SSrinivas Pandruvada``rfi_restriction_err_code`` (RW) 25316c02447SSrinivas Pandruvada 0 :Request is accepted, 1:Feature disabled, 25416c02447SSrinivas Pandruvada 2: the request restricts more points than it is allowed 25516c02447SSrinivas Pandruvada 25616c02447SSrinivas Pandruvada``rfi_restriction_data_rate_Delta`` (RW) 25716c02447SSrinivas Pandruvada Restricted DDR data rate for RFI protection: Lower Limit 25816c02447SSrinivas Pandruvada 25916c02447SSrinivas Pandruvada``rfi_restriction_data_rate_Base`` (RW) 26016c02447SSrinivas Pandruvada Restricted DDR data rate for RFI protection: Upper Limit 26116c02447SSrinivas Pandruvada 26216c02447SSrinivas Pandruvada``ddr_data_rate_point_0`` (RO) 26316c02447SSrinivas Pandruvada DDR data rate selection 1st point 26416c02447SSrinivas Pandruvada 26516c02447SSrinivas Pandruvada``ddr_data_rate_point_1`` (RO) 26616c02447SSrinivas Pandruvada DDR data rate selection 2nd point 26716c02447SSrinivas Pandruvada 26816c02447SSrinivas Pandruvada``ddr_data_rate_point_2`` (RO) 26916c02447SSrinivas Pandruvada DDR data rate selection 3rd point 27016c02447SSrinivas Pandruvada 27116c02447SSrinivas Pandruvada``ddr_data_rate_point_3`` (RO) 27216c02447SSrinivas Pandruvada DDR data rate selection 4th point 27316c02447SSrinivas Pandruvada 27416c02447SSrinivas Pandruvada``rfi_disable (RW)`` 27516c02447SSrinivas Pandruvada Disable DDR rate change feature 27616c02447SSrinivas Pandruvada 277*5bc6b1dfSSrinivas PandruvadaDLVR attributes 278*5bc6b1dfSSrinivas Pandruvada 279*5bc6b1dfSSrinivas Pandruvada:file:`/sys/bus/pci/devices/0000\:00\:04.0/dlvr/` 280*5bc6b1dfSSrinivas Pandruvada 281*5bc6b1dfSSrinivas Pandruvada``dlvr_hardware_rev`` (RO) 282*5bc6b1dfSSrinivas Pandruvada DLVR hardware revision. 283*5bc6b1dfSSrinivas Pandruvada 284*5bc6b1dfSSrinivas Pandruvada``dlvr_freq_mhz`` (RO) 285*5bc6b1dfSSrinivas Pandruvada Current DLVR PLL frequency in MHz. 286*5bc6b1dfSSrinivas Pandruvada 287*5bc6b1dfSSrinivas Pandruvada``dlvr_freq_select`` (RW) 288*5bc6b1dfSSrinivas Pandruvada Sets DLVR PLL clock frequency. Once set, and enabled via 289*5bc6b1dfSSrinivas Pandruvada dlvr_rfim_enable, the dlvr_freq_mhz will show the current 290*5bc6b1dfSSrinivas Pandruvada DLVR PLL frequency. 291*5bc6b1dfSSrinivas Pandruvada 292*5bc6b1dfSSrinivas Pandruvada``dlvr_pll_busy`` (RO) 293*5bc6b1dfSSrinivas Pandruvada PLL can't accept frequency change when set. 294*5bc6b1dfSSrinivas Pandruvada 295*5bc6b1dfSSrinivas Pandruvada``dlvr_rfim_enable`` (RW) 296*5bc6b1dfSSrinivas Pandruvada 0: Disable RF frequency hopping, 1: Enable RF frequency hopping. 297*5bc6b1dfSSrinivas Pandruvada 298*5bc6b1dfSSrinivas Pandruvada``dlvr_spread_spectrum_pct`` (RW) 299*5bc6b1dfSSrinivas Pandruvada Sets DLVR spread spectrum percent value. 300*5bc6b1dfSSrinivas Pandruvada 301*5bc6b1dfSSrinivas Pandruvada``dlvr_control_mode`` (RW) 302*5bc6b1dfSSrinivas Pandruvada Specifies how frequencies are spread using spread spectrum. 303*5bc6b1dfSSrinivas Pandruvada 0: Down spread, 304*5bc6b1dfSSrinivas Pandruvada 1: Spread in the Center. 305*5bc6b1dfSSrinivas Pandruvada 306*5bc6b1dfSSrinivas Pandruvada``dlvr_control_lock`` (RW) 307*5bc6b1dfSSrinivas Pandruvada 1: future writes are ignored. 308*5bc6b1dfSSrinivas Pandruvada 30916c02447SSrinivas PandruvadaDPTF Power supply and Battery Interface 31016c02447SSrinivas Pandruvada---------------------------------------- 31116c02447SSrinivas Pandruvada 31216c02447SSrinivas PandruvadaRefer to Documentation/ABI/testing/sysfs-platform-dptf 31316c02447SSrinivas Pandruvada 31416c02447SSrinivas PandruvadaDPTF Fan Control 31516c02447SSrinivas Pandruvada---------------------------------------- 31616c02447SSrinivas Pandruvada 31716c02447SSrinivas PandruvadaRefer to Documentation/admin-guide/acpi/fan_performance_states.rst 318