1. 程式人生 > >[RK3288][Android6.0] 除錯筆記 --- CPU溫度降頻控制

[RK3288][Android6.0] 除錯筆記 --- CPU溫度降頻控制

rk3288平臺關於溫度調節cpu頻率有個bug.
在rk3288.dtsi中,有:

temp-limit-enable = <1>;
target-temp = <80>;
min_temp_limit = <48>;

當溫度升到超過80°時,隨著溫度升高,cpu頻率最終會降到min_temp_limit的值,每次降的level按照下表執行

    target-temp = <80>;
    normal-temp-limit = <
    /* delta-temp delta-freq */
        3   96000
        6
144000 9 192000 15 384000 >;

第一列為降低每一級閥值,第二列為降低頻率,預設溫控開始溫度是80°.
例如當前溫度是82°,那麼不作用,當達到83°時, 溫控降頻開始有效,假設系統當前要設定1008000KHz,那麼經過溫控系統之後會減去96000KHz. 如果溫度很高,就會一直這樣減下去,減到不能低於min_temp_limit為止.

最終影響系統頻率的地方是在dvfs_get_limit_rate().

不過原始code中min_temp_limit的單位有問題,應該是KHz.

改動:

[email protected]
:~/rk3288/kernel$ g df 15b426e089c6f5091168ab3a0552ac96faa290c1 b3e70eaeda236c57e239ea2c3c24da49304b240f diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi index e8dd31f..7d8804f 100644 --- a/arch/arm/boot/dts/rk3288.dtsi +++ b/arch/arm/boot/dts/rk3288.dtsi @@ -997,7 +997,9 @@ tsadc-ch = <1>; temp-limit-enable = <1>; target-temp = <80>; - min_temp_limit = <48>;
+ min_temp_limit = <312000>;

312MHz是rk給的建議頻率.

程式碼使用:
dvfs.c:
讀取:

static int dvfs_node_parse_dt(struct device_node *np,
                  struct dvfs_node *dvfs_node)
{
        of_property_read_u32_index(np, "min_temp_limit",
                       0, &dvfs_node->min_temp_limit);
        dvfs_node->min_temp_limit *= 1000;
}

比較:

static void dvfs_temp_limit_normal(struct dvfs_node *dvfs_node, int temp)
{
            if (arm_rate_step &&
                (dvfs_node->temp_limit_rate > arm_rate_step)) {
                dvfs_node->temp_limit_rate -= arm_rate_step;
                printk("temp_limit_rate:%ld\n", dvfs_node->temp_limit_rate);
                if (dvfs_node->temp_limit_rate <
                    dvfs_node->min_temp_limit)
                    dvfs_node->temp_limit_rate =
                    dvfs_node->min_temp_limit;
                dvfs_clk_set_rate(dvfs_node,
                          dvfs_node->last_set_rate);
                dvfs_temp_limit_4k();
            }
}

相關推薦

[RK3288][Android6.0] 除錯筆記 --- CPU溫度控制

rk3288平臺關於溫度調節cpu頻率有個bug. 在rk3288.dtsi中,有: temp-limit-enable = <1>; target-temp = <80>; min_temp_limit = <48>

[RK3288][Android6.0] 除錯筆記 --- CPU使用的頻率表

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 系統中有三張CPU相關的頻率表: 1. rockchip-cpufreq.c: /* Fr

[RK3288][Android6.0] 除錯筆記 --- CPU預設排程策略

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 CPU的頻率調節策略: 1. Performance. 不考慮耗電,只用最高頻率。 2. Interactive. 直接上最高頻率,然後看CPU負

[RK3288][Android6.0] 除錯筆記 --- 溫度檢測中斷不會觸發

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 發現有件比較坑的事情: #define TSADC_TEMP_INT_EN 0

[RK3288][Android6.0] 除錯筆記 --- 普通串列埠的新增

Platform: ROCKCHIP OS: Android 6.0 Kernel: 3.10.92 uart0,1,3,4 (普通串列埠) 用的是同一個串列埠驅動. uart2(除錯串列埠)的驅動程式碼嵌在fiq debugger的code中. 相關的配置在rk3288.dtsi中:

[RK3288][Android6.0] 除錯筆記 --- hwclock命令無法使用

Platform: Rockchip  OS: Android 6.0  Kernel: 3.10.92 現象:  使用hwclock,提示找不到檔案 [email protected]:/ # hwclock                          

[RK3288][Android6.0] 除錯筆記 --- I2C通訊失敗問題

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 使用rk3288的i2c5讀寫時,會出現以下error log: [email prot

[RK3288][Android6.0] 除錯筆記 --- 測試I2C裝置正常傳輸方法

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 rk在驅動層做了一個通用i2c測試程式碼提供給上層快速測試i2c外設是否傳輸正常. 測試使用方法

[RK3288][Android6.0] 除錯筆記 --- eMMC分割槽號和名字的對應

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 有時候需要知道mmcblk對應的分割槽是哪一個,其實驅動已經完成這個功能了,如下: [email protected]:/dev/blo

[RK3288][Android6.0] 除錯筆記 --- user版本串列埠只有輸出不能輸入

Platform: ROCKCHIP OS: Android 6.0 Kernel: 3.10.92現象: 編譯成user版本之後串列埠只有輸出沒有輸入.原因: 編譯user版本之後 ro.debug

[RK3288][Android6.0] 除錯筆記 --- 系統自帶預置第三方APK方法

Platform: RK3288 OS: Android 6.0 Kernel: 3.10.92 Rockchip預設提供了機制來預置第三方APK, 方法很簡單: 1. 在device/rockchip/rk3288建立preinstall目錄(如果

[RK3288][Android6.0] 除錯筆記 --- Audio驅動層判斷錄音資料是否異常

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 之前有提到上層可以通過dump pcm資料檢視波形來確定錄音取樣的資料是否正常,這裡給出驅動層檢視

[RK3288][Android6.0] 除錯筆記 --- 除錯串列埠的更換

Platform: ROCKCHIP OS: Android 6.0 Kernel: 3.10.92 假設專案有需求要將除錯串列埠uart2 改成 uart1, 改動如下 (還未驗證,先分享給大家,

[RK3288][Android6.0] 除錯筆記 --- pmu(rk818)暫存器讀寫

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 rk的pmu模組只提供了每次單個暫存器的讀寫,驅動提供了這個節點供使用:/sys/rk818/rk818_test 舉例: 讀取: echo r

[RK3288][Android6.0] 除錯筆記 --- 遮蔽系統下拉選單顯示

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 [email protected]:~/rk3288/frameworks/base/

[RK3288][Android6.0] 除錯筆記 --- ro.serialno的獲取

Platform: RK3288 OS: Android 6.0 Kernel: 3.10.92 rk3288平臺的serial number是由drmservice寫進去的,drmservice在rc檔案中定義啟動: init.rk30board.

[RK3288][Android6.0] 除錯筆記 --- 螢幕顯示旋轉方法

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 顯示模組提供了一個property供修改旋轉方向,名為”ro.sf.hwrotation”,有四個值可選 Surface.java /** *

[RK3288][Android6.0] 除錯筆記 --- eMMC壞塊測試

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 網上搜到一個叫eMMC Brickbug Check的apk 啟動后里面的Check Memory一項提示要root,但是系統已經是root過的了,

[RK3288][Android6.0] 除錯筆記 --- 移除uboot和kernel開機logo

Platform: RockchipOS: Android 6.0Kernel: 3.10.92diff --git a/arch/arm/boot/dts/rk3288-b.dts b/arch/arm/boot/dts/rk3288-b.dtsindex ad3bc1a.

[RK3288][Android6.0] 除錯筆記 --- 電池電量一直顯示100%

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 跟蹤發現Android6.0相比之前的Android4.4會判斷Charger是否存在,不