1. 背景介紹:
在TI上一代Jacinto 6汽車處理器中,例如DRA7x/TDA2x,為了實現性能與功能安全的綜合考慮,提供了名為DVFS(Dynamic Voltage Frequency Scaling)的機制,使能系統能夠實時獲取芯片thermal狀態,并動態反饋調節系統電壓與運行頻率,使得系統運行在安全溫度范圍內,實現性能最大化。
在TI最新一代Jacinto? 7 處理器中,例如DRA8x/TDA4x,目前外部PMIC輸出電壓NVM固定,故推薦使用DFS來實現在固定電壓下的頻率調節,從而實現對整芯片熱狀態的檢測以及控制。
2. 測試條件:
TDA4VM EVM開發板:https://www.ti.com/tool/J721EXSOMXEVM
TDA4VM Linux SDK:https://www.ti.com/tool/download/PROCESSOR-SDK-LINUX-J721E/08.00.00.08
TDA4VM RTOS SDK:https://www.ti.com/tool/download/PROCESSOR-SDK-RTOS-J721E/08.00.00.12
3. TDA4動態熱檢測與控制流程:
在TDA4 SOC系統中,可參照圖1所示流程進行SOC熱狀態檢測以及控制,用戶可在應用層對VTM(Voltage and Thermal Manager)的thermal值進行實時讀取,并設置高溫超出閾值/常溫回落閾值,通過VTM的實時檢測以及對比,在超出閾值時產生溫度事件。或者在內核中通過增加VTM驅動,并直接在上層應用中讀取thermal溫度值并設置閾值,然后通過上層應用邏輯來實現對thermal的監控,在超出閾值時產生溫度報警事件。
圖 1 TDA4動態熱檢測與控制流程圖
在得到溫度報警事件后,通過對TDA4內部各核心運行狀態以及運行頻率的讀取,能夠在系統正常運行范圍內,動態調整各核心的運行頻率,從而降低系統功耗,實現對系統熱狀態的控制。
4. VTM動態熱檢測
首先需要動態讀取SOC thermal溫度值,VTM可以用來讀取溫度值以及設置溫度報警閾值等,其詳細介紹參照TDA4 TRM手冊。其核心寄存器配置如表1所示:
表 1 VTM寄存器設置
Register in VTM module | Offset | Comments |
WKUP_VTM_TMPSENS_STAT_j | [9-0] DATA_OUT | 實時溫度值(ADC code數值) |
WKUP_VTM_MISC_CTRL2 | [9-0] MAXT_OUTRG_ALERT_THR | 高溫報警閾值,超出產生thermal alert |
WKUP_VTM_MISC_CTRL2 | [25-16] MAXT_OUTRG_ALERT_THR | 常溫回落閾值,產生alert clean |
WKUP_VTM_TMPSENS_CTRL_j | [11] MAXT_OUTRG_EN | Enable/Disable alert 事件 |
CTRLMMR_WKUP_RESET_SRC_STAT | [24] THERMAL_RST | 產生/清除 alert事件的標志位 |
讀出來的DATA_OUT值為內部ADC數值,需要進行轉換才能成為攝制溫度值,其轉換方式如圖2所示:
圖 2 VTM ADC code與溫度值計算關系表
此處提供patch,能夠實現在Linux端對內部核心的thermal溫度值讀取。步驟如下:
a. 下載Linux SDK8.0并參照guide制作SD啟動卡,并下載對應thermal patch。
b. 參照下述流程安裝到原生SDK中。
cd $PSDK_PATH/board-support/linux-*
git am 0001-display-temperature-as-mili-celsius.patch
cd ../..
make linux
c. 參照下述流程將編譯后的文件更新至SD卡系統中。
Edit the file $PSDK_PATH/Rules.make
Set DESTDIR=/media/$USER/rootfs
cd $PSDK_PATH
sudo make linux_install
d. 參照下述流程進行驗證
cat /sys/class/thermal/thermal_zone*/temp
其中patch一共添加了五個域中kernel的溫度值,其打印如圖3所示:
圖 3 thermal溫度值讀取
其中對應了五個Linux中的設備節點,所輸出的值單位為毫攝氏度,例如圖3中所示結果以及硬件對應關系為:
thermal_zone0 -> WKUP domain DMSC core -> 67.640℃
thermal_zone1 -> MAIN domain MPU A72 core -> 68.074℃
thermal_zone2 -> MAIN domain C7x core -> 68.507℃
thermal_zone3 -> MAIN domain GPU core -> 69.371℃
thermal_zone4 -> MAIN domain R5F core -> 68.074℃
5. TDA4核心動態調頻控制
獲取到TDA4內部各個核心實時的thermal值后,可以通過上層邏輯對讀取到的溫度值與預設的報警閾值進行邏輯比較,然后采取對應的措施進行核心頻率調整。
在TDA4默認文件系統中,提供k3conf通過指定的device ID以及clock ID來實現對各個核心頻率的讀取以及控制。
5.1 Device ID的獲取:
可通過TISCI手冊J721E部分對各個模塊的device ID進行查詢:
https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/08_00_00_12/exports/docs/pdk_jacinto_08_00_00_37/packages/ti/drv/sciclient/soc/sysfw/binaries/system-firmware-public-documentation/5_soc_doc/j721e/devices.html#soc-doc-j721e-public-devices-desc-device-list
圖4中列出了常用幾個核心的device ID。
圖 4 processor device ID
5.2 Clock ID的獲取:
為了標識在一個核心中多個不同模塊的頻率設置,引入了clock ID對其進行區分,可在TISCI J721E部分對clock ID進行查詢。
https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/08_00_00_12/exports/docs/pdk_jacinto_08_00_00_37/packages/ti/drv/sciclient/soc/sysfw/binaries/system-firmware-public-documentation/5_soc_doc/j721e/clocks.html?highlight=a72ss0_core0
5.3對應核心運行頻率檢測:
獲取到對應核心device ID后,可通過下述指令打印出當前對應核心的運行頻率。
k3conf dump clock DEVICE_ID
以A72_CORE0為例,可以得到其當前運行頻率為2GHz如圖5所示。
圖 5 A72 CORE0 運行頻率
5.4設置對應核心運行頻率:
若按照第三章中的流程計算,當前運行頻率需要進行調整,可使用下述指令對當前指定device ID以及clock ID 的模塊進行頻率控制。在對其核心頻率進行修改之前,需要首先對其對應的鎖相環進行修改,以A72_CORE0核心為例:
devmem2 0x00688040 w 0x80000001
k3conf set clock 202 2 1000000000
其修改過程如圖6所示:
圖 6 A72 CORE0頻率修改流程
其中每個TDA4內部核心所支持的最大頻率受硬件限制,以TDA4VM為例,如圖7所示為不同PN中各核心所支持的最大頻率,詳情參照TDA4VM Datasheet。
圖 7 TDA4VM中各核心所支持最大頻率
同樣的,在最大頻率之下,各核心的頻率設置并非隨機設置,其必須滿足內部分頻器等硬件時鐘要求,此相關設置參照TI Clock Tree Tools。
審核編輯:湯梓紅
-
處理器
+關注
關注
68文章
19317瀏覽量
230097 -
控制
+關注
關注
4文章
1011瀏覽量
122680 -
檢測
+關注
關注
5文章
4493瀏覽量
91526
發布評論請先 登錄
相關推薦
評論