MTK Android 8.1 Thermal Management 温控策略实现mtktscpu依次使用cpu_adaptive_0和cpu_adaptive_1

MTK Android 8.1 Thermal Management 温控策略实现mtktscpu依次使用cpu_adaptive_0和cpu_adaptive_1

MTK 默认的温控策略,thermal zone “mtktscpu”如果设置两个如下thermal cooler “cpu_adaptive_0”和“cpu_adaptive_1”,则温度升高的时候,只会执行“cpu_adaptive_1”,不会执行“cpu_adaptive_0”,如图:

MTK Android 8.1 Thermal Management 温控策略实现mtktscpu依次使用cpu_adaptive_0和cpu_adaptive_1_第1张图片
当温度逐渐升高到100度的时候,开始执行cooler“cpu_adaptive_1”,但是当温度升高到120度的时候,并没有执行cooler“cpu_adaptive_0”,依然执行的“cpu_adaptive_1”!!

修改如下代码,实现温度升高到120度的时候,执行“cpu_adaptive_0”,温度降低到100~120度的时候,又执行“cpu_adaptive_1”:
kernel/drivers/misc/mediatek/thermal/common/coolers/mtk_cooler_atm.c


static unsigned int temp_cl_dev_adp_cpu_state = 0;	//add

static int adp_cpu_set_cur_state(struct thermal_cooling_device *cdev, unsigned long state)
{
	int ttj = 117000;

	cl_dev_adp_cpu_state[(cdev->type[13] - '0')] = state;

	//实际测试cpu_adaptive_0和cpu_adaptive_1同时执行的时候,只有cpu_adaptive_1的策略起作用
	//所以在这里强制,当cpu_adaptive_0和cpu_adaptive_1同时执行的时候,关闭cpu_adaptive_1,让cpu_adaptive_0起作用
	
	//如果cpu_adaptive_0 = 1,则表示温度已经升高到120度
	if(cl_dev_adp_cpu_state[0] == 1)
	{
		if(temp_cl_dev_adp_cpu_state == 0)
		{
			//保存目前cpu_adaptive_1的状态,这个时候cpu_adaptive_1 = 1
			temp_cl_dev_adp_cpu_state = cl_dev_adp_cpu_state[1];
		}
		//强制将cpu_adaptive_1 = 0,则只使用cpu_adaptive_0
		cl_dev_adp_cpu_state[1] = 0;
	}
	//如果cpu_adaptive_0 = 0,则表示温度已经低于到120度,或者还没有升高到120度
	else
	{
		if(temp_cl_dev_adp_cpu_state == 1)
		{
			//如果之前cpu_adaptive_1 = 1,则将cpu_adaptive_1恢复
			cl_dev_adp_cpu_state[1] = temp_cl_dev_adp_cpu_state;
			temp_cl_dev_adp_cpu_state = 0;
		}
	}
	//add end
	//printk("cl_dev_adp_cpu_state[0]=%d, cl_dev_adp_cpu_state[1]=%d, cl_dev_adp_cpu_state[2]=%d \n",cl_dev_adp_cpu_state[0], cl_dev_adp_cpu_state[1], cl_dev_adp_cpu_state[2]);
	//printk("adaptive_cpu_power_limit = %d \n", adaptive_cpu_power_limit);

	/* TODO: no exit point can be obtained in mtk_ts_cpu.c */
	ttj = decide_ttj();

	......
	
	return 0;
}

以上修改,就可以实现:
温度低于100度的时候,CPU正常工作;
温度达到100度,执行cooler“cpu_adaptive_1”;
温度达到120度,退出“cpu_adaptive_1”,执行“cpu_adaptive_0”;
温度降低到120度以下,退出“cpu_adaptive_0”,执行“cpu_adaptive_1”;
温度降低到100度以下,退出“cpu_adaptive_1”,CPU正常运行!!

你可能感兴趣的:(技术随笔)