linux/drivers/thermal
Srinivas Pandruvada 9befea3013 thermal: intel: int340x: Add platform temperature control interface
Platform Temperature Control is a dynamic control loop implemented in
hardware to manage the skin or any board temperature of a device. The
reported skin or board temperature is controlled by comparing to a
configured target temperature and adjusting the SoC (System on Chip)
performance accordingly. The feature supports up to three platform
sensors.

OEMs (Original Equipment Manufacturers) can configure this feature
through the BIOS and provide temperature input directly to the hardware
via the Platform Environment Control Interface (PECI). As a result,
this feature can operate independently of any OS-level control.

The OS interface can be used to further fine-tune the default OEM
configuration. Here are some scenarios where the OS interface is
beneficial:

 Verification of Firmware Control: Check if firmware-based control is
 enabled. If it is, thermal controls from the OS/user space can be
 backed out.

 Adjusting Target Limits: While OEMs can set an aggressive target limit,
 the OS can adjust this to a less aggressive limit based on operating
 modes or conditions.

Given that this is platform temperature control, it is expected that a
single user-level manager owns and manages the controls. If multiple
user-level software applications attempt to write different targets, it
can lead to unexpected behavior. For instance, on a Linux desktop, the
Linux thermal daemon can manage these temperature controls, as it has
access to all other temperature control settings.

The hardware control interface is via MMIO offsets in the processor
thermal device MMIO space. There are three instances of MMIO registers.
Refer to the platform_temperature_control.c for MMIO details.

Expose "enable" and "temperature_target" via sysfs.

There are three instances of this controls. So up to three different
sensors can be controlled independently.

Sysfs interface:

tree /sys/bus/pci/devices/0000\:00\:04.0/ptc_?_control/
/sys/bus/pci/devices/0000:00:04.0/ptc_0_control/
├── enable
└── temperature_target
/sys/bus/pci/devices/0000:00:04.0/ptc_1_control/
├── enable
└── temperature_target
/sys/bus/pci/devices/0000:00:04.0/ptc_2_control/
├── enable
└── temperature_target

Description of attributes:

Enable: 1 for enable, 0 for disable. This attribute can be used to
read the current status. User space can write 0 or 1 to disable or
enable this feature respectively.

temperature_target: Target temperature limit to which hardware
will try to limit in milli degree C.

Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Link: https://patch.msgid.link/20250429000110.236243-2-srinivas.pandruvada@linux.intel.com
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
2025-05-07 21:34:39 +02:00
..
broadcom thermal/drivers/brcmstb_thermal: Add support for BCM74110 2025-03-25 20:52:04 +01:00
intel thermal: intel: int340x: Add platform temperature control interface 2025-05-07 21:34:39 +02:00
mediatek thermal/drivers/mediatek/lvts: Only update IRQ enable for valid sensors 2025-03-25 20:52:04 +01:00
qcom thermal/drivers/qcom-spmi-temp-alarm: Drop unused driver data 2025-03-25 20:52:04 +01:00
renesas thermal: rcar_gen3: Reuse logic to read fuses on Gen3 and Gen4 2025-03-25 20:52:04 +01:00
samsung thermal: Switch back to struct platform_driver::remove() 2024-11-13 16:17:57 +01:00
st thermal: Switch back to struct platform_driver::remove() 2024-11-13 16:17:57 +01:00
tegra thermal: tegra: Simplify with scoped for each OF child loop 2024-11-26 13:28:43 +01:00
testing thermal: testing: Initialize some variables annoteded with _free() 2024-11-14 17:40:47 +01:00
ti-soc-thermal More thermal control updates for 6.13-rc1 2024-11-22 19:43:18 -08:00
amlogic_thermal.c thermal: Switch back to struct platform_driver::remove() 2024-11-13 16:17:57 +01:00
armada_thermal.c thermal: Switch back to struct platform_driver::remove() 2024-11-13 16:17:57 +01:00
cpufreq_cooling.c thermal/cpufreq_cooling: Remove structure member documentation 2025-02-11 21:02:13 +01:00
cpuidle_cooling.c thermal: cpuidle_cooling: fix kernel-doc warning and a spello 2023-12-21 12:05:48 +01:00
da9062-thermal.c thermal: Switch back to struct platform_driver::remove() 2024-11-13 16:17:57 +01:00
db8500_thermal.c thermal/drivers/db8500: Remove redundant of_match_ptr() 2023-08-16 12:09:19 +02:00
devfreq_cooling.c thermal: devfreq_cooling: Fix perf state when calculate dfc res_util 2024-03-27 16:27:39 +01:00
dove_thermal.c thermal: Switch back to struct platform_driver::remove() 2024-11-13 16:17:57 +01:00
gov_bang_bang.c thermal: core: Rename function argument related to trip crossing 2025-01-17 18:48:58 +01:00
gov_fair_share.c thermal: core: Introduce thermal_cdev_update_nocheck() 2024-10-23 11:57:11 +02:00
gov_power_allocator.c thermal: gov_power_allocator: Update total_weight on bind and cdev updates 2025-02-25 12:30:45 +01:00
gov_step_wise.c thermal: core: Add and use cooling device guard 2024-10-24 14:48:23 +02:00
gov_user_space.c thermal: core: Rename function argument related to trip crossing 2025-01-17 18:48:58 +01:00
hisi_thermal.c thermal: hisi: Use kcalloc() instead of kzalloc() with multiplication 2025-02-26 20:55:42 +01:00
imx_sc_thermal.c thermal/drivers/imx_sc_thermal: Use dev_err_probe 2024-09-04 15:31:29 +02:00
imx_thermal.c thermal: Switch back to struct platform_driver::remove() 2024-11-13 16:17:57 +01:00
imx8mm_thermal.c thermal: Switch back to struct platform_driver::remove() 2024-11-13 16:17:57 +01:00
k3_bandgap.c thermal: Switch back to struct platform_driver::remove() 2024-11-13 16:17:57 +01:00
k3_j72xx_bandgap.c thermal: k3_j72xx_bandgap: Use kcalloc() instead of kzalloc() 2025-02-26 20:55:42 +01:00
Kconfig thermal: Add PCIe cooling driver 2024-11-16 10:09:30 -06:00
khadas_mcu_fan.c
kirkwood_thermal.c thermal: Switch back to struct platform_driver::remove() 2024-11-13 16:17:57 +01:00
loongson2_thermal.c thermal/drivers/loongson2: Add Loongson-2K2000 support 2024-04-23 12:40:30 +02:00
Makefile pci-v6.13-changes 2024-11-26 18:05:44 -08:00
max77620_thermal.c thermal/drivers/max77620: Remove duplicate error message 2023-10-15 23:40:10 +02:00
pcie_cooling.c thermal: Add PCIe cooling driver 2024-11-16 10:09:30 -06:00
qoriq_thermal.c thermal/drivers/qoriq: Power down TMU on system suspend 2025-03-25 20:52:03 +01:00
rockchip_thermal.c thermal/drivers/rockchip: Add missing rk3328 mapping entry 2025-03-25 20:52:04 +01:00
spear_thermal.c thermal: Switch back to struct platform_driver::remove() 2024-11-13 16:17:57 +01:00
sprd_thermal.c thermal: Switch back to struct platform_driver::remove() 2024-11-13 16:17:57 +01:00
sun8i_thermal.c thermal: sun8i: Use scoped device node handling to simplify error paths 2024-11-26 13:28:43 +01:00
thermal_core.c - The 7 patch series "powerpc/crash: use generic crashkernel 2025-04-01 10:06:52 -07:00
thermal_core.h thermal: core: allow user configuration of hardware protection action 2025-03-16 23:24:14 -07:00
thermal_debugfs.c Merge branches 'thermal-core' and 'thermal-misc' 2025-03-24 14:09:38 +01:00
thermal_debugfs.h thermal/debugfs: Do not extend mitigation episodes beyond system resume 2024-06-11 21:04:00 +02:00
thermal_helpers.c thermal: core: Add and use cooling device guard 2024-10-24 14:48:23 +02:00
thermal_hwmon.c module: Convert symbol namespace to string literal 2024-12-02 11:34:44 -08:00
thermal_hwmon.h thermal/hwmon: Use the right device for devm_thermal_add_hwmon_sysfs() 2023-03-03 20:45:02 +01:00
thermal_mmio.c thermal/core: Use the thermal zone 'devdata' accessor in thermal located drivers 2023-03-03 20:45:02 +01:00
thermal_netlink.c thermal: netlink: Add the commands and the events for the thresholds 2024-10-24 14:54:01 +02:00
thermal_netlink.h thermal: netlink: Add the commands and the events for the thresholds 2024-10-24 14:54:01 +02:00
thermal_of.c - The 7 patch series "powerpc/crash: use generic crashkernel 2025-04-01 10:06:52 -07:00
thermal_sysfs.c thermal: core: Add and use cooling device guard 2024-10-24 14:48:23 +02:00
thermal_thresholds.c thermal/thresholds: Fix boundaries and detection routine 2024-12-18 14:51:31 +01:00
thermal_thresholds.h thermal: netlink: Add the commands and the events for the thresholds 2024-10-24 14:54:01 +02:00
thermal_trace_ipa.h thermal: core: Make struct thermal_zone_device definition internal 2024-04-08 16:01:20 +02:00
thermal_trace.h tracing/treewide: Remove second parameter of __assign_str() 2024-05-22 20:14:47 -04:00
thermal_trip.c thermal: core: Relocate functions that update trip points 2024-10-24 17:15:07 +02:00
thermal-generic-adc.c thermal/drivers/generic-adc: Simplify with dev_err_probe() 2024-07-15 13:31:41 +02:00
uniphier_thermal.c thermal: Switch back to struct platform_driver::remove() 2024-11-13 16:17:57 +01:00