AM5708 thermal探究

AM5708 thermal探究

 

第一部分:看一个SOC模块的基本套路

1、在网上查资料,看模块工作原理,以及现有的别人整理的一些文档

2、查看芯片手册、硬件原理图,了解特定SOC(am5708)此模块的特性:模块的基本架构、供电、时钟、复位、信号、管脚、中断、寄存器等信息

3、结合u-boot/kernel具体代码查看/配置/编写调试相应驱动

4、与硬件工程师一起调试驱动

第二部分:以am5708 thermal为例说明

一、网上搜索

找到高通、瑞芯微平台相关的资料;与TI am5708差异较大,没有参考价值

二、查看TI am5708芯片手册

       芯片手册18.4.6.2Thermal Management Related Registers(P4140)

1、综述

片内有五个温度传感器,每个温度传感器与一个电源域关联,并且是VBGAPTS的一部分。VBGAPTS有一个10为的ADC,ADC将温度值成比例的转换为数字输出值。每个VBGAPTS由专用的Thermal FSM控制。FSM是CTRL_MODULE_CORE的子模块。所有的FSM的时钟来源于L3INSTR_TS_GCLK。电源、复位、时钟由PRCM管理。

Thermal相关的寄存器可以分为以下几个部分:

-控制寄存器

-thermal alert comparatorsthermal警告比较器)寄存器

-温度时间戳寄存器

-其他寄存器

              -控制FIFOs

              -控制提供给FSMs的时钟

手册中对以上提到的寄存器及shutdown机制作了说明,可详看手册。

AM5708 thermal探究_第1张图片

 

2、关键点

(1)Alert有高阈值、低阈值设置,可屏蔽高低Alert输出;用一条中断线提示高低警告的发生,机制详见下图

AM5708 thermal探究_第2张图片

(2)Shutdown机制为芯片内部机制,不向用户提供接口。高TSHUT阈值为123摄氏度,低TSHUT阈值为105摄氏度。高于123摄氏度芯片会shutdown,温度低于105摄氏度时才会启动。

AM5708 thermal探究_第3张图片

(3)Timestamp寄存器中可以记录前五次的温度值及相应的测量次数。

(4)Table 18-13为寄存器值与温度值的对应表。

三:代码追踪

1、查看设备树

我们板卡的设备树文件为arch/arm/boot/dts/am570x-mid.dts

arch/arm/boot/dts/am570x-mid.dts中

#include "dra72x.dtsi"

#include "am57xx-idk-common.dtsi"

       arch/arm/boot/dts/dra72x.dtsi中

              #include "dra7.dtsi"

       arch/arm/boot/dts/dra7.dtsi中

              bandgap: bandgap@4a0021e0 {

                        reg = <0x4a0021e0 0xc

                                0x4a00232c 0xc

                                0x4a002380 0x2c

                                0x4a0023C0 0x3c

                                0x4a002564 0x8

                                0x4a002574 0x50>;

                                compatible = "ti,dra752-bandgap";

                                interrupts = ;

                                #thermal-sensor-cells = <1>;

                };

              thermal_zones: thermal-zones {

                #include "omap4-cpu-thermal.dtsi"

                #include "omap5-gpu-thermal.dtsi"

                #include "omap5-core-thermal.dtsi"

                #include "dra7-dspeve-thermal.dtsi"

                #include "dra7-iva-thermal.dtsi"

        };

 

&cpu_thermal {

        polling-delay = <500>; /* milliseconds */

};

"omap4-cpu-thermal.dtsi"、"omap5-gpu-thermal.dtsi"、"omap5-core-thermal.dtsi"、"dra7-dspeve-thermal.dtsi"、"dra7-iva-thermal.dtsi"分别对应CPU、GPU、CORE、DSP、IVA的温度配置。

2、驱动代码

(1)主要的驱动代码在

    1. Drivers/thermal/thermal_core.c
    2. Drivers/thermal/ti-soc-thermal/dra752-thermal-data.c
    3. Drivers/thermal/ti-soc-thermal/ti-thermal-common.c
    4. Drivers/thermal/ti-soc-thermal/ti-bandgap.c

(2)从Drivers/thermal/ti-soc-thermal/ti-bandgap.c的

module_platform_driver(ti_bandgap_sensor_driver);开始看起。

A)驱动注册时根据设备树中获得的"ti,dra752-bandgap",会匹配到

static const struct of_device_id of_ti_bandgap_match[]

{

              ……

              {

              .compatible = "ti,dra752-bandgap",

              .data = (void *)&dra752_data,

              },

              ……

}

B)Drivers/thermal/ti-soc-thermal/dra752-thermal-data.c中的dra752_data根据芯片手册,定义了此thermal支持的特性、时钟源、ADC值到温度值的转换数组、ti_thermal_expose_sensor、ti_thermal_remove_sensor、五个温度传感器(相应的寄存器及其内部偏移、Alert、shutdown阈值配置等)等信息。

C)匹配成功后会调用ti_bandgap_probe函数

int ti_bandgap_probe(struct platform_device *pdev)

{

  1. ti_bandgap_build中创建设备、获得资源;若支持软件TSHUT,获得中断相应管脚
  2. 若支持TSHUT

ti_bandgap_tshut_init(申请中断,注册中断处理函数)

  1.   时钟获取、时钟设置
  2. 设置alert和shutdown的阈值
  3. 对于每个sensor,若有register_cooling,注册cooling;调用expose_sensor
  4. 若支持TALERT,初始化talert(ti_bandgap_talert_init)//申请中断,注册中断处理函数

}

D)int ti_thermal_expose_sensor(struct ti_bandgap *bgp, int id, char *domain)

                     {

                            ->ti_bandgap_get_sensor_data(bgp, id);//获得私有数据

                            ->   data->ti_thermal= devm_thermal_zone_of_sensor_register(bgp->dev,id,data, ti_of_thermal_ops);

                                   //解析设备树中thermal,注册、设置各温度传感器的设备信息和ops

                            ->   ti_bandgap_set_sensor_data(bgp, id, data);//设置私有数据

                            ->ti_bandgap_write_update_interval(bgp, data->sensor_id,

                                   data->ti_thermal->polling_delay);//设置采样时间间隔

}

(3)特别说明

文档中加粗的为比较重要的函数;若需要更改默认的Alert阈值,在dra752_data.sensors.ts_data中;若需要在发生Alert、shutdown时添加相应操作,在各自相应的中断处理函数中添加(注意中断内部添加代码的注意事项)

四、文件系统中

和thermal相关的设备文件如下图

由代码可知,cooling_device0是属于MPU的,但内核代码只是注册了这个设备,没有相应的冷却机制

thermal_zone0对应MPU的温度

thermal_zone1对应GPU的温度

thermal_zone2对应CORE的温度

thermal_zone3对应DSP的温度

thermal_zone4对应IVA的温度

通过thermal_zone*/temp可以查看当前温度

通过thermal_zone*/type可以查看此zone对应的设备

你可能感兴趣的:(AM5708 thermal探究)