Add support for the Thermal Management Unit (TMU) on the Google GS101 SoC. The GS101 TMU implementation utilizes a hybrid architecture where management is shared between the kernel and the Alive Clock and Power Manager (ACPM) firmware. This hybrid ACPM TMU architecture is also present on other Samsung Exynos SoCs (e.g., AutoV920, Exynos850).
Dependencies ============ The set depends on the ACPM TMU firmware helper driver that was queued via the Samsung SoC tree: git://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux.git, branch next/drivers. The bindings, driver and MAINTAINERS patches can go either via the thermal tree, and then we'll need an immutable tag from the Samsung SoC maintainer that will contain the firmware helper driver, or they can go directly via the Samsung SoC tree with ACKs from the thermal maintainers. The dts and defconfig patches are expected to go via the Samsung SoC tree, after the bindings and driver are queued. Architecture Overview ===================== The hardware supports two parallel control paths. For this implementation, responsibilities are split as follows: 1. Kernel Responsibility: - maintain direct memory-mapped access to the interrupt pending (INTPEND) registers to identify thermal events. - map physical hardware interrupts to logical thermal zones. - coordinate functional operations through the ACPM IPC protocol. 2. Firmware Responsibility (ACPM): - handle sensor initialization. - manage thermal thresholds configuration. - perform temperature acquisition and expose data via IPC. Sensor Mapping (One-to-Many) ============================ The SoC contains multiple physical temperature sensors, but the ACPM firmware abstracts these into logical groups (Clusters) for reporting: - ACPM Sensor 0 (Big Cluster): Aggregates physical sensors 0, 6, 7, 8, 9. - ACPM Sensor 1 (Mid Cluster): Aggregates physical sensors 4, 5. - ACPM Sensor 2 (Little Cluster): Aggregates physical sensors 1, 2. The driver maps physical interrupt bits back to these logical parents. When an interrupt fires, the driver checks the bitmask in the INTPEND registers and updates the corresponding logical thermal zone. Signed-off-by: Tudor Ambarus <[email protected]> --- Changes in v5: - no changes, rebase on top of krzk/for-next branch. - Link to v4: https://lore.kernel.org/r/[email protected] Changes in v4: address sashiko review: - thermal driver: avoid mixing mutex cleanup helpers with goto statements - firmware, tmu: - remove __packed from union acpm_tmu_msg. - return ERR_PTR(-ENODEV) for devm_acpm_get_by_phandle when CONFIG_EXYNOS_ACPM_PROTOCOL is disabled. - Link to v3: https://lore.kernel.org/r/[email protected] Changes in v3: - thermal driver: use .set_trips() instead of .set_trip_point() - new cleaning/prerequisite patches for firmware/acpm: - firmware: samsung: acpm: Make acpm_ops const and access via pointer - firmware: samsung: acpm: Drop redundant _ops suffix in acpm_ops members - firmware: samsung: acpm: Consolidate transfer initialization helper - firmware: acpm: TMU helpers - check return value from the firmware - overall change: emphasize that the ACPM TMU hibrid approach applies to other Samsung SoCs as well (Exynos850, AutoV920). - dts: drop active trip points, update trip point values - collect R-b tags - Link to v2: https://lore.kernel.org/r/[email protected] Changes in v2: - architecture: switch from a syscon/MFD approach to a thermal-sensor node with a phandle to the ACPM interface - bindings: address Krzysztof's feedback, drop redundencies, interrupts description. - firmware: introduce devm_acpm_get_by_phandle() to standardize IPC handle acquisition. - thermal driver: drop compatible's data and use the static data from the driver directly. - defconfig, make EXYNOS_ACPM_THERMAL a module - Link to v1: https://lore.kernel.org/r/[email protected] --- Tudor Ambarus (5): dt-bindings: thermal: Add Google GS101 TMU thermal: samsung: Add Exynos ACPM TMU driver GS101 MAINTAINERS: Add entry for Samsung Exynos ACPM thermal driver arm64: dts: exynos: gs101: Add thermal management unit arm64: defconfig: enable Exynos ACPM thermal support .../bindings/thermal/google,gs101-tmu-top.yaml | 68 +++ MAINTAINERS | 8 + arch/arm64/boot/dts/exynos/google/gs101-tmu.dtsi | 136 +++++ arch/arm64/boot/dts/exynos/google/gs101.dtsi | 18 + arch/arm64/configs/defconfig | 1 + drivers/thermal/samsung/Kconfig | 17 + drivers/thermal/samsung/Makefile | 2 + drivers/thermal/samsung/acpm-tmu.c | 547 +++++++++++++++++++++ 8 files changed, 797 insertions(+) --- base-commit: 0d177c93e6fda86a96642e51131e1db173277957 change-id: 20260113-acpm-tmu-27e21f0e2c3b Best regards, -- Tudor Ambarus <[email protected]>

