高通thermal-engine配置文件格式

来源:互联网 发布:吴亦凡rap实力知乎 编辑:程序博客网 时间:2024/05/09 18:56

         本文基于高通msm8939/8994平台文档及源码。

 说明文档:                vendor/qcom/proprietary/thermal-engine/readme.txt;

         源码文件:               venror/qcom/proprietary/thermal-engine/thermal_config_v2.c;

         实际配置文件:      vendor/qcom/proprietary/thermal-engine/thermal-engine.conf。

         关注源码文件的global_table,pid_table, tm_table, ss_table, v_table, eq_table声明。其中global_table为全局配置选项,对应2.1中的算法实例标签之前的部分;pid_table对应pid算法配置格式;tm_table对应monitor算法配置格式;ss_table对应ss算法配置格式;v_table对应virtual算法配置格式;eq_table对应equilibrium配置格式(此格式暂时未见使用)。

 

配置文件基本格式

         {debug}             //可选,若有此选项表示使能调试信息

         sampling            // 默认采样率,以ms为单位

         [<算法实例标签>]             // 算法实例标签

         algo_type          // 算法类型,必须是算法实例的第一个字段

         disable               //可选, 用于默认情况下禁止该算法实例起作用

         ...

算法类型

         算法类型共有4种: monitor, pid, ss, virtual。每种的格式各不一样。

         算法类型对应thermal_config.h(vendor/qcom/proprietary/thermal-engine/inc)中的algo_type枚举类型,实际上有5种,除以上4种外,还有一个equilibrium类型。但从algos数组声明(thermal_configi_v2.c)可以看出,equilibrium还未被使用。

monitor算法配置格式

         [<算法实例标签>]   

         algo_type          monitor                               

         sensor                 <传感器名称>          

         sampling            <采样率(ms)>

         descending                 //       可选,默认门限是升序,有此字段后门限顺序为降序

         thresholds     <门限值(mC/mA)>

         thresholds_clr  <清除门限值>

        actions        <达到门限时的动作,多个动作时用'+'连接>

         action_info    <动作额外信息,多个额外信息间用'+'连接>

 

pid算法配置格式

         [<算法实例标签>]   

         algo_type          pid                               

         sampling            <采样率(ms)>

         sensor                 <传感器名称>

         device                <被PID算法调制的设备>

         set_point           <PID算法调整的目标值(mC/mA)>

         set_point_clr     <PID算法停止调整的值>

         p_const              <PID算法中的P常量>

         i_const               <PID算法中的I常量>

         d_const              <PID算法中的D常量>

         i_samples          <积分组件报错时的积分样本数>

         dev_units_per_calc  <积分算法输出调整单元值(每次调整的值)>

 

ss算法配置格式

         [<算法实例标签>]   

         algo_type          ss                                 

         sampling            <采样率(ms)>

         sensor                 <传感器名称>

         device                <被PID算法调整的设备>

         set_point           <PID算法调整的目标值(mC/mA)>

         set_point_clr     <PID算法停止调整的值>

         time_constant  <当当前和上一个错误采样值相等时的延迟调整系数>

         device_max_limit     <设备最大值(mC/mA)>            // 可选

virtual算法配置格式

         该算法实际作用是用已存在的传感器模拟出一个新的传感器。

         [<虚拟传感器名字>]        

         algo_type          virtual                                  

         trip_sensor        <传感器名称>

         set_point           <当高于此温度时,虚拟传感器开始polling模式>

         set_point_clr     <当高于此温度时,虚拟传感器停止polling模式>

         sensors               <用于计算温度总和的传感器数组>

         weights               <权重值数组>

         sampling            <默认采样率>

配置文件字段解释

thresholds取值

         'thresholds'/'thresholds_clr'/'actions'/'action_info'接受最多8级以空格分开的门限。

action取值

         'none':

                   actions:           无动作

                   action_info:      忽略

         'report':

                   actions:              报告"穿过门限消息"给UI

                   action_info:      忽略

                   备注:

                   "穿过门限消息"以每行独立的格式报告给THERMALD_UI(一个抽象的本地socket);

                   清除或触发门限会导致消息上报,比如n+1级门限被清除或者触发了n级门限;其它

                   动作是达到门限时才触发;

                   参数按以下顺序发送:sensorname, temperature, current_threshold_level, is_trigger。其中:

                   current_threshold_level为当前被触发/清除的门限;is_trigger为true时表示触发,为false

                   时表示清除。

        'cpu':

                   actions:              调整cpu频率

                   action_info:      cpu最大允许频率,单位:KHz

         'cpuN':

                   actions:              调整第N个cpu频率

                   action_info:      cpuN最大允许频率,单位:KHz

         'hotplug_N':

                   actions:              拔掉第N个cpu(cpu_down)

                   action_info:      0: 插上cpu(cpu_up),  1:拔掉cpu(cpu_down)

         'lcd':

                   actions:              限制lcd亮度

                   action_info:      lcd最大亮度,取值范围:0-255

         'modem':

                   actions:              请求限制modem功能

                   action_info:      modem的限制级别,取值范围:0-3

         'fusion':(???)

                   actions:              请求限制 fusion modem功能

                   action_info:      fusion modem的限制级别,取值范围:0-3

         'battery':

                   actions:              限制电池充电电流

                   action_info:      电池充电电流限制级别,取值范围:0-3

         'gpu':

                   actions:              调整gpu频率

                   action_info:      gpu最大允许频率,单位:KHz

         'wlan':

                   actions:              wlan(无线局域网)限制

                   action_info:      WLAN限制级别,取值范围0-4

         'shutdown':

                   actions:              关机

                   action_info:      关机延迟时间,单位:ms

         备注:

         从gen_dev_list变量声明(vendor/qcom/proprietary/thermal-engine/devices/devices.c)可以看出,还有如下取值:'vdd_restriction', 'kernel', 'camera','camcorder', 'vdd_dig_swmode','opt_curr_req',

'venus','modem_cx'。从gen_dev_list及hotplug_dev_list可以总结出各action字段及动作函数的对应关系:

动作名称

执行动作函数

动作信息

'cpu'

cpu_all_action()

最大频率

'cpuN'

cpu_action()

最大频率

'hotplug_N'

hotplug_action()

1级

'wlan'

wlan_action()

MAX_WLAN_MITIGATION_LEVEL(4)

'battery'

battery_action()

MAX_BATTERY_MITIGATION_LEVEL(3)

'lcd'

lcd_action()

255级亮度

'shutdown'

ts_shutdown_action()

UINT32_MAX

'none'

 

 

'report'

ts_report_action()

 

'modem'

modem_action()

3

'fusion'

fusion_modem_action()

3

'vdd_restriction'

vdd_restriction_action()

1

'kernel'

kernel_mitigation_action()

1

'camera'

camera_action()

MAX_CAMERA_MITIGATION_LEVEL(10)

'camcorder'

camcorder_action()

MAX_CAMCORDER_MITIGATION_LEVEL(10)

'vdd_dig_swmode'

vdd_dig_automode_diable_action()

1

'opt_curr_req'

optimum_current_request_action

1

'mdp'

mdp_action()

MAX_MDP_MITIGATION_LEVEL(3)

'venus'

venus_action()

MAX_VENUS_MITIGATION_LEVEL(3)

'modem_cx'

modem_cx_limit_action()

3

'gpu'

gpu_action()

最大频率

表 1 action属性

device取值

         'cpu':

                   actions:              调整cpu频率

                   action_info:      cpu最大允许频率,单位:KHz

         'cpuN':

                   actions:              调整第N个cpu频率

                   action_info:      cpuN最大允许频率,单位:KHz

备注:

         device还可取以下值: 'gpu', 'clusterN'    

 

配置文件示例

示例1

         配置文件:

 

         sampling          1000

 

         [PMIC_THERM_MON]

         algo_type        monitor

         sensor           PMIC_THERM

         sampling        5000

         thresholds       40200          45000      50000

         thresholds_clr   38000          43000      48000

         actions           cpu+report       cpu       cpu

         action_info       1188000+0      368640     245760

 

         描述:

1.        默认采样率为1s;

2.        PMIC_THERM传感器采样率为5s;

3.        当温度升到到40.2度以上时,触发门限1,调节cpu最大允许频率为1188000KHz,在本例中,由于此频率是最大值,因此实际无动作;同时上报此消息,action_info值0被忽略;

4.        当温度降低到38度以下时,清除门限1,并上报此消息;

5.        当温度升高到45度以上时,触发门限2,调节cpu最大允许频率为368640KHz;

6.        当温度降低到43度以下时,清除门限2,调节cpu最大允许频率为1188000KHz。

示例2

         配置文件:

 

         sampling          2000

 

         [bcl_monitor]

         algo_type        monitor

         descending

         sensor           bcl

         sampling        1000

         thresholds       100         0

         thresholds_clr   500        100

         actions           report         report        

         action_info       0            0

 

         描述:

1.        使能调试信息输出;

2.        默认采样率为2s;

3.        对于电池电流限制(battery current limit)传感器,采样率为1s;

4.        当电池电流升到imax - 100mA时,触发门限1,并上报此消息;

5.        当电池电流降到imax - 500mA时,清除门限1,并上报此消息;

6.        当电池电流升到imax时,触发门限2,并上报此消息;

7.        当电池电流降到imax -100mA时,清除门限2,并上报此消息。

示例3

         配置文件:

 

         debug

 

         [TEST_PID]

         algo_type                  pid

         sensor                tsens_tz_sensor0

         device             cpu

         sampling           1000

         set_point            85000

         set_point_clr          65000

         p_const            1.0

         i_const             1.0

         d_const            1.0

         i_samples           10

         dev_units_per_calc      10000

 

         描述:

1.        使能调试信息输出;

2.        本PID算法实例标签为TEST_PID;

3.        使用tsens_tz_sensor0传感器;

4.        被调节设备是CPU;

5.        采样率为1s;

6.        set_point值是PID调节算法的门限值和PID算法的设定值;

7.        set_point_clr是停止PID调节算法的门限值;

8.        p_const, i_const, d_const是PID等式中的p,i,d常量;

9.        i_samples是PID等式中的积分错误采样次数;

10.     dev_units_per_calc 10000 kHz(设备是CPU,因此单位是kHz)是PID输出增加的步进值(即按10000KHz为步长调整??);

 

示例4

         配置文件:

 

         debug

 

         [virtual_sensor-0]

         algo_type                  virtual

         sensor                tsens_tz_sensor8

         set_point            35000

         set_point_clr          30000

         sensors              tsens_tz_sensor1  tsens_tz_sensor5

         weights                         40  60

         sampling                       250

 

         [Test-PID]

         algo_type                      pid

         sensor                           virtual-sensor-0

         device             cpu1

         sampling           250

         set_point            55000

         set_point_clr          50000

         p_const            1.25

         i_const             0.8

         d_const            0.5

         i_samples           10

         dev_units_per_calc      5000

 

         描述:

1.        PID实例Test-PID基于virtual-sensor-0的结果;

2.        virtual-sensor-0需要用户手动定义;

3.        trip_sensor 用来指示虚拟传感器何时开始进入polling模式(轮询),trip_sensor必须为常规传感器,不能为另外一个虚拟传感器;

4.        set_point是trip sensor的门限值,当高于此门限值时,trip sensor将从中断模式进入轮询模式,轮询频率由虚拟传感器的sampling字段设置;

5.        set_point_clr是trip sensor的门限值,当低于此门限值时,trip sensor将停止轮询模式然后等待下一个门限事件;

6.        weights给定了传感器数组的权重值;

7.        虚拟传感器的set_point必须小于pid算法的set_point,以便当达到set_point时pid能收到通知,另外,如果虚拟传感器未进入轮询模式,pid将不能获取到它的温度;

8.        如果tirp sensor不支持从中断模式到查询模式的改变,第8条可以被忽略。此时虚拟传感器的采样率将应该和pid的采样率一致。

示例5

         配置文件:

 

         debug

 

         [bcm_monitor]

         algo_type                  monitor

         sensor                bcm

         sampling           1000

         thresholds          70000         90000                 // 注意,单位为m%

         thresholds_clr        69000         89000

         actions             cpu             cpu

         action_info          768000       384000

 

         描述:

1.        使能调试信息输出;

2.        当采样电流达到imax的70%时,门限1触发,调整cpu最大允许频率为768000KHz;

3.        当采样电流达到imax的90%时,门限2触发,调整cpu最大允许频率为384000KHz;

4.        bcm仅支持2级门限调节;

5.        有效的门限值取值为:40000,50000,60000,70000,80000,90000。

 

0 0