MSM8994 thermal管理
點擊打開鏈接
1、MSM8994?Power?Thermal?Management?Overview文檔摘要
本文檔為80-NM328-12_A_MSM8994_LA_Power_Thermal_Mgmt_Overview.pdf的學習筆記。
Thermal?Mitigation?Software?Concept?Architecture
Thermal?Mitigation軟件架構:
?
Graphic?core?temp:GPU溫度
physical?layout:物理布局
throttle:調節
Temperature?Sensors?–?Placement?and?Increased?Coverage
溫度傳感器的位置和增加的覆蓋
1、溫度傳感器被放置在硅芯片的熱點附近。
MSM8660上首次使用片上溫度傳感器(On-die?sensors),有1個On-die?sensors;
MSM8960有5個on-die?sensors;
MSM8930?有10個on-die?sensors;
APQ8084,?MSM8974,?and?APQ8064有11個on-die?sensors;
MSM8994有16個on-die?sensors。大大提高了識別和定位熱問題的能力。
2、增加溫度傳感器(thermistors)?是PWB需要,放在功率放大器附近。
3、由于采用新的硬件架構,片上溫度傳感器(On-die?sensor)的精度和采樣率大大提高。
MSM8994的精度:<1.5℃
采用率達到3.5ms,thermal?actions響應更靈敏
在SBL1階段,如果溫度超過high/low閾值,基于硬件設計的tsens_reset將觸發溫度保護以保護設備。
Placement?of?MSM8994?On-Die?Temperature?Sensors
MSM8994片上溫度傳感器的位置。
MSM8994上一共有16個片上溫度傳感器。
如下圖所示,片上溫度傳感器的位置及sensor?ID由綠點表示。
?
Thermal?Management?Software?Overview
Thermal管理軟件概述。
1、thermal管理軟件
§?管理內存情形下的溫度,上限為85℃。
???管理外設表面溫度,金屬上限為55℃,OEM?/載體通常為45°C
2、Sensors
§?MSM芯片上的傳感器
§?板上熱敏電阻?–?PMIC,?PA,?XO,?etc.
3、設備管理
§?通過降低性能實現被動式散熱
§?OEM可以通過設置配置文件來設置閾值。
?
?
Boot?Thermal?Management?(BTM)?Algorithms
開機熱管理(BTM)算法。
限制啟動電壓
§?在設備啟動之前確保溫度是在有效工作范圍。
§?溫度閾值、延時時間、最大嘗試次數,這些值在boot?loader?build中設置
?
BTM?Configuration?Hardcoded
BTM配置硬編碼。
§?.nLowerThresholdDegC默認設置為150℃,BTM幾乎是禁用的。?is?set?to?150蚓?by?default?and?BTM?is?virtually?disabled.
§?如果OEM為.nLowerThresholdDegC定義了適當的溫度閾值,當前溫度高于閾值時候,開機可以延期并多次嘗試。但嘗試次多超過規定值時候,開機將失敗。
boot_images/core/hwengines/tsens/config/8994/BootTempCheckBsp.c
?
?
Kernel?Thermal?Monitor?(KTM)
1、Bootup降溫
KTM是一個kernel?driver,該驅動在開機時候很早就被初始化,這樣可以保證該驅動正確運行并保護設備不會因為過熱損壞。
一旦該驅動初始化完畢,它將開始輪詢溫度,并當溫度超過閾值時候采取降溫措施。
在Bootup時候,KTM可以做的溫度mitigations/monitoring包括:
§?CPU?frequency?mitigation,CPU頻率減緩
§?CPU?core?control,CPU核心控制
§?Thermal?reset,熱復位
§?Vdd?restriction,Vdd限制
§?CX?phase?selection?voting,
§?GFX?phase?selection?voting,
§?PMIC?Auto/PWM?mode?switch,PMIC?Auto/PWM模式切換
§?VDD?MX?voting,
§?Optimum?current?request,
§?在開機階段的后期,KTM切換到中斷模式。在轉換到中斷模式之前,bootup階段所有的降溫措施將不再起作用。
2、Post-bootup降溫
在系統進入初始化后期階段之后,KTM將清除掉當前所有的mitigation/monitoring并轉換到中斷模式。在該階段,thermal-sys?framework被初始化,thermal使用framework設置閾值及接收通知。轉換到中斷模式不需要依賴thermal?engine。
在post-bootup時候,KTM可以做的溫度mitigations/monitoring包括:
§?Emergency?frequency?mitigation,緊急頻率減緩
§?Emergency?hotplug,緊急熱插拔
§?Thermal?reset,熱復位
§?Vdd?restriction,Vdd限制
§?CX?phase?selection?voting
§?GFX?phase?selection?voting
§?VDD?MX?voting
§?Optimum?current?request
§?以上KTM特性與thermal?engine一起更好的保護設備。
KTM?Configuration?Kernel?Device?Tree
KTM內核設備樹配置。
qcom,msm-thermal?{
??????????????compatible?=?"qcom,msm-thermal";
??????????????qcom,sensor-id?=?<5>;
??????????????qcom,poll-ms?=?<250>;
??????????????qcom,limit-temp?=?<60>;
??????????????qcom,temp-hysteresis?=?<10>;
??????????????qcom,freq-step?=?<2>;
??????????????qcom,freq-control-mask?=?<0xf>;
??????????????qcom,core-limit-temp?=?<80>;
??????????????qcom,core-temp-hysteresis?=?<10>;
??????????????qcom,core-control-mask?=?<0xe>;
??????????????qcom,hotplug-temp?=?<110>;
??????????????qcom,hotplug-temp-hysteresis?=?<20>;
??????????????qcom,cpu-sensors?=?"tsens_tz_sensor6",?"tsens_tz_sensor13",
???????????????????????????????????"tsens_tz_sensor14",?"tsens_tz_sensor15";
??????????????qcom,vdd-restriction-temp?=?<5>;
??????????????qcom,vdd-restriction-temp-hysteresis?=?<10>;
??????????????qcom,pmic-sw-mode-temp?=?<85>;
??????????????qcom,pmic-sw-mode-temp-hysteresis?=?<75>;
??????????????qcom,pmic-sw-mode-regs?=?"vdd-dig";
??????????????qcom,vdd-dig-rstr{
??????????????????????????????qcom,vdd-rstr-reg?=?"vdd-dig";
??????????????????????????????qcom,levels?=?<5?7?7>;?/*?Nominal,?Super?Turbo,?Super?Turbo?*/
??????????????????????????????qcom,min-level?=?<1>;?/*?No?Request?*/
??????????????};
??????????????qcom,vdd-gfx-rstr{
??????????????????????????????qcom,vdd-rstr-reg?=?"vdd-gfx";
??????????????????????????????qcom,levels?=?<5?7?7>;?/*?Nominal,?Super?Turbo,?Super?Turbo?*/
??????????????????????????????qcom,min-level?=?<1>;?/*?No?Request?*/
??????????????};
??????????????qcom,vdd-apps-rstr{
??????????????????????????????qcom,vdd-rstr-reg?=?"vdd-apps";
??????????????????????????????qcom,levels?=?<1881600?1958400?2265600>;
??????????????????????????????qcom,freq-req;
??????????????};
}
KTM?Mitigation?Thresholds?Examples
?
?
User?Space?Thermal?Engine
1、Thermal?daemon從MSM8660平臺開始使用。
2、Thermal?engine在thermal?daemon基礎上實現了多個溫度傳感器的集中管理并支持多個算法
Thermal?engine支持thermal?daemon和高級動態算法并聯運行。OEM可以通過修改thermal?engine配置文件來選擇算法。
虛擬傳感器(Virtual?sensor):使用2個以上傳感器,按權重計算溫度,使得得到的溫度值更精準。
Override?mode:修改setpoint,以提高性能。
Thermal?engine參數舉例:
?
Thermal?Mitigation?Algorithms
熱緩解算法。
1、在thermal配置文件中可以使用兩種算法。
§?Dynamic?Thermal?Management?(DTM)?–?algo_type_ss,動態熱管理
§?Monitor?–?algo_type?monitor
2、DTM
§?Configuration?–?algo_type?ss
§?OEM決定維持的溫度,算法動態執行OEM制定的措施,比如調節CPU頻率。
???用來控制表面溫度和片上溫度。要求調整的措施比monitor少,溫度限制執行更嚴格。
§?僅對CPU和CPU進行操作,比如降低最大頻率。
§?通過修改thermal-engine.conf文件中的set_point和set_point_clr來修改閾值。
3、Monitor?algorithm?for?LCD,?modem,?camcorder,?battery
§?Configuration?–?algo_type?monitor
§?OEM定制一組溫度閾值以及與各溫度對應的溫度措施。
§?Monitor算法用于LCD,?modem,?camcorder,?and?battery?mitigation。不推薦CPU?and?GPU?mitigation,因為CPU?and?GPU?mitigation要求廣泛的調整以維持setpoint。
§?通過修改thermal-engine.conf文件中的set_point和set_point_clr來修改閾值。
對于CPU?and?GPU?mitigation,強烈推薦使用DTM,而不是monitor,因為DTM可以大大減輕調整的工作,提高性能,更能嚴格保持在OEM設定的溫度點setpoint。
??
?
Threshold?Algorithm
閾值算法。
檢測溫度超過閾值,相應的降溫措施將啟動。比如當傳感器溫度達到70℃,GPU頻率將從500降到333MHz。
最終傳感器溫度保持的溫度點是85℃。
?
?
Dynamic?Algorithm?Example?(Estimated?Response)
動態算法的例子(估計響應)。
當溫度超過setpoint(75℃),降低設備性能直到溫度穩定。輪詢模式啟用,采樣率為定義的數值。?
當溫度溫度超過setpoint以及溫度降到setpoint(75℃)以下,設備性能均會降低。
最大允許頻率可以呈遞增、遞減變化。
如果溫度50℃以下,中斷模式將再次啟用。
僅用來控制CPU/GPU。
?
?
Default?Thermal?Configuration
Thermal默認配置。
1、QTI在代碼中提供了一套默認的thermal配置。該套配置參數需要根據OEM的需要進行調整。調整方法可以參考文檔:Thermal?Tuning?Procedure?(80-N9649-1)。
2、使用adb命令可以查看當前的thermal配置:thermal-engine?-o
§?該命令將打印出當前的thermal規則,包括QTI和OEM設置的。
3、默認的配置參數
(1)關鍵溫度結點的管理規則?(默認85℃)
§?Label?examples?–?[SS-CPU0],?[SS-CPU1],?[SS-CPU2],?[SS-CPU3],?[SS-CPU4-5-6-7]
§?這些規則不應該增加它們的默認值。
§?源程序:
§?/vendor/qcom/proprietary/thermal-engine/ss-data.c
§?/vendor/qcom/proprietary/thermal-engine/thermal_monitor-data.c
(2)表面溫度管理規則
§?OEM在thermal-engine.conf中添加,然后放到手機路徑/system/etc/thermal-engine.conf
(3)其他默認規則不要修改?e.g.,?VDD_RSTR_MONITORTSENSX
Adding?Custom?Thermal?Configuration?to?Device
添加自定義熱配置到設備。
1、不需重新編譯代碼,自定義的thermal配置可以添加到設備里面。
2、先基于老的thermal-engine.conf修改,然后使用adb命令推送到手機里面。
§?adb?push?<location_of_thermal-engine.conf>?/system/etc/thermal-engine.conf
3、比如,為GPU添加一條規則。在thermal-engine.conf中添加:
[SS-GPU]
algo_type?ss
sampling?65
sensor?tsens_tz_sensor12
device?gpu
set_point?60000
set_point_clr?57000
time_constant?0
上面例子為thermal配置添加了一個名叫[SS-GPU]的規則,將修改后的thermal-engine.conf推送到手機,然后重啟手機,新thermal配置將生效。
4、同樣,不添加新規則,修改原來的規則也可以按照上面方法來操作。
5、禁用一個規則
例如禁用規則[SS-POPMEM]:
[SS-POPMEM]
disable?1
??
?
Overall?AP?Thermal?Management?Mechanism
整體AP熱管理機制。
有三種不同的TMS:
§?SBL?temperature?check
§?Kernel?thermal?monitor
§?Full?thermal?engine?with?KTM?post-boot?feature?enabled
?
Thermal?Software?Features/Management?Devices
Feature? | Description |
CPU?TM | 調整最大允許操作頻率。 |
GPU?TM | 調整最大允許操作頻率。 |
CPU?Core | 關閉安全機制以確保在關鍵溫度點之前CPU核心關閉。 |
Modem?TM | 調整峰值數據速率、最大發射功率、數據呼叫終止。 |
Camcorder?TM | 調整編碼幀率、關閉解碼功能 |
WLAN?TM | 調整峰值數據速率 |
LCD?Backlight?TM | 調整最大背光亮度 |
Battery?Charging?TM | 調整最大允許充電率 |
Battery?Current?Limiting | 限制充電電流 |
Speaker?Coil?Calibration | 揚聲器線圈的校準。揚聲器線圈電阻與溫度的自動校準,防止溫度過高或者輸出功率過高損壞揚聲器線圈。 |
Voltage?Restriction | Voltage?restriction?enables?low?operating?voltage?above?0°C?by?adjusting?the?required?minimum?voltage?at?temperature?extremes |
Kernel?TM | Adjustment?of?maximum?allowed?operating?frequency?during?kernel?initialization?and?post-boot?device?protection |
Override?Mode | Overrides?thermal?setpoint?to?allow?higher?performance?for?benchmarks?or?thermally?aware?applications |
Dynamic?Parameter?Update | Important?parameter?sets?can?be?updated?at?runtime?for?better?OEM-specific?dynamic?thermal?management |
?
2、References
1、80-NM328-12_C_MSM8994_MSM8992_LA_Power_Thermal_Mgmt_Overview.pdf
2、80-NM328-12_A_MSM8994_LA_Power_Thermal_Mgmt_Overview.pdf
?
文中圖片和表格可以聯系本人。
總結
以上是生活随笔為你收集整理的MSM8994 thermal管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qualcomm thermal的介绍
- 下一篇: Android驱动开发之Hello实例(