rk3368 CPU动态调频与温度保护

该博客详细介绍了RK3368平台在Android 6.0和3.10.0内核上的CPU温度管理,包括过温保护机制,当温度超过120度时会触发关机;以及CPU动态调频(DVFS)策略,使用了userspace、conservative等五种模式,并通过dts配置了不同温度下的频率限制。驱动代码主要位于rockchip_thermal.c和dvfs.c,通过工作队列实现温度监测和频率调整。
部署运行你感兴趣的模型镜像

Platform: RK3368

OS: Android 6.0

Kernel: 3.10.0


rk3368采用cpufreq进行CPU频率调节,但同时又做了过温保护和温度限制频率。

1. 过温保护

驱动位于kernel/drivers/thermal/rockchip_thermal.c
dts定义:

tsadc: tsadc@ff280000 {
                compatible = "rockchip,rk3368-tsadc";
                reg = <0x0 0xff280000 0x0 0x100>;
                interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&clk_tsadc>, <&clk_gates20 0>;
                rockchip,grf = <&grf>;
                rockchip,cru = <&cru>;
                rockchip,pmu = <&pmu>;
                clock-names = "tsadc", "apb_pclk";
                clock-frequency = <32000>;
                resets = <&reset RK3368_SRST_TSADC_P>;
                reset-names = "tsadc-apb";
                //pinctrl-names = "default";
                //pinctrl-0 = <&tsadc_int>;
                #thermal-sensor-cells = <1>;
                hw-shut-temp = <120000>;
                status = "disabled";
        };

可以看到当前hw-shut-temp = <120000>;也就是温度大于120度就会触发过温保护,强制关机。
查看当前CPU温度:

#cat /sys/rockchip_thermal/temp
2. CPU动态调频(DVFS)

Linux内部共有五种对频率的管理策略userspace,conservative,ondemand,powersave 和 performance.可以根据负载进行频率提升和降低。

查看支持的governors
# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
conservative ondemand userspace powersave interactive performance

DVFS的dts定义:

dvfs {
		vd_arm: vd_arm {
			regulator_name = "vdd_arm";
			suspend_volt = <1000>; //mV
			pd_core {
				clk_core_b_dvfs_table: clk_core_b {
					operating-points = <
						/* KHz    uV */
						312000 1200000
						504000 1200000
						816000 1200000
						1008000 1200000
						>;
					status = "okay";
					cluster = <0>;
					temp-limit-enable = <1>;
					target-temp = <80>;
					min_temp_limit = <216000>;
					normal-temp-limit = <
					/*delta-temp    delta-freq*/
						3	96000
						6	144000
						9	192000
						15	384000
						>;
					performance-temp-limit = <
						/*temp    freq*/
						100     816000
						>;
					lkg_adjust_volt_en = <1>;
					channel = <0>;
					tsadc-ch = <0>;
					def_table_lkg = <25>;
					min_adjust_freq = <216000>;
					lkg_adjust_volt_table = <
						/*lkg(mA)  volt(uV)*/
						0         25000
						>;
					pvtm_min_temp = <25>;
				};
				clk_core_l_dvfs_table: clk_core_l {
					operating-points = <
						/* KHz    uV */
						312000 1200000
						504000 1200000
						816000 1200000
						1008000 1200000
						>;
					status = "okay";
					cluster = <1>;
					temp-limit-enable = <1>;
					target-temp = <80>;
					min_temp_limit = <216000>;
					normal-temp-limit = <
					/*delta-temp    delta-freq*/
						3	96000
						6	144000
						9	192000
						15	384000
						>;
					performance-temp-limit = <
						/*temp    freq*/
						100     816000
						>;
					lkg_adjust_volt_en = <1>;
					channel = <0>;
					tsadc-ch = <0>;
					def_table_lkg = <25>;
					min_adjust_freq = <216000>;
					lkg_adjust_volt_table = <
						/*lkg(mA)  volt(uV)*/
						0         25000
						>;
					pvtm_min_temp = <25>;
				};
			};
		};

可以看到里面定义了大核和小核的两种限制模式,normal-temp-limit和performance-temp-limit。performance模式中,当温度高于80则频率限制在816000。而在normal模式中,则是每当温度上升delta-temp,则频率降低delta-freq,直到降到min_temp_limit为止。

实现代码位于:
arch/arm/mach-rockchip/dvfs.c
驱动初始化了一个工作队列dvfs_temp_limit_work_func,每隔HZ/10执行一次。主要任务是根据当前温度对temp_limit_rate进行修改。从而让dvfs_get_limit_rate返回的是限频的值。

系统默认为normal模式,在init.rc中写入的:

    # set temperature control policy as normal mode
    write /sys/module/rockchip_pm/parameters/policy 1

查看及修改当前电源策略:

# cat /sys/module/rockchip_pm/parameters/policy
# echo "1">/sys/module/rockchip_pm/parameters/policy

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值