内核驱动 exynos_tmu

支持的芯片

  • ARM Samsung Exynos4、Exynos5 系列 SoC

    数据手册:不公开

作者:Donggeun Kim <dg77.kim@samsung.com> 作者:Amit Daniel <amit.daniel@samsung.com>

TMU 控制器描述:

此驱动允许读取 Samsung Exynos4/5 系列 SoC 内部的温度。

该芯片仅通过寄存器公开测量的 8 位温度代码值。可以从温度代码中获取温度。有三个方程可以将温度转换为温度代码。

这三个方程是
  1. 两点微调

    Tc = (T - 25) * (TI2 - TI1) / (85 - 25) + TI1
    
  2. 单点微调

    Tc = T + TI1 - 25
    
  3. 无微调

    Tc = T + 50
    
Tc

温度代码,T:温度,

TI1

25 摄氏度的微调信息(存储在 TRIMINFO 寄存器中)在 25 摄氏度下测量的温度代码,该代码未更改

TI2

85 摄氏度的微调信息(存储在 TRIMINFO 寄存器中)在 85 摄氏度下测量的温度代码,该代码未更改

Exynos4/5 中的 TMU(热管理单元)在温度超过预定义水平时会生成中断。可配置的最大阈值数量为五个。阈值级别定义如下

Level_0: current temperature > trigger_level_0 + threshold
Level_1: current temperature > trigger_level_1 + threshold
Level_2: current temperature > trigger_level_2 + threshold
Level_3: current temperature > trigger_level_3 + threshold

阈值和每个 trigger_level 通过相应的寄存器设置。

当发生中断时,此驱动程序使用函数 exynos_report_trigger 通知内核热框架。尽管可以设置 level_0 的中断条件,但它可用于同步冷却操作。

TMU 驱动程序描述:

exynos 热驱动程序的结构如下

                                      Kernel Core thermal framework
                              (thermal_core.c, step_wise.c, cpufreq_cooling.c)
                                                              ^
                                                              |
                                                              |
TMU configuration data -----> TMU Driver  <----> Exynos Core thermal wrapper
(exynos_tmu_data.c)         (exynos_tmu.c)       (exynos_thermal_common.c)
(exynos_tmu_data.h)         (exynos_tmu.h)       (exynos_thermal_common.h)
  1. TMU 配置数据

    这包括通过结构 exynos_tmu_registers 描述的 TMU 寄存器偏移/位域。此外,还使用其他几个平台数据(struct exynos_tmu_platform_data)成员来配置 TMU。

  2. TMU 驱动程序

    此组件初始化 TMU 控制器并设置不同的阈值。它通过调用 exynos_report_trigger 来调用核心热实现。

  3. Exynos 核心热封装

    这提供了 3 个封装函数来使用内核核心热框架。它们是 exynos_unregister_thermal、exynos_register_thermal 和 exynos_report_trigger。