xref: /openbmc/linux/Documentation/driver-api/thermal/intel_dptf.rst (revision 1ac731c529cd4d6adbce134754b51ff7d822b145)
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