功能定义
系统框架层同事要在某些场景(主要是冷启动)将CPU boost到最大频率,保持一段时间,但是当前mtk平台将thermal的优先级高于boost的优先级,需要将驱动层boost节点的优先级提升。
具体实现
以冷启动boost为例,软件调用流程如下
image.png
Kernel 层添加了/proc/ppm/policy/forcelimit_cpu_freq节点。
因为默认proc节点的优先级比较低,低于thermal的优先级,所以添加了高优先级的节点。
Mtk ppm policy驱动的主要结构体是ppm_policy_data
struct ppm_policy_data {
/* settings */
const char *name; //名字
enum ppm_policy policy; //类型,优先级相关
unsigned int priority; /* smaller value has higher priority */
/* status */
bool is_enabled;
bool is_activated;
bool is_limit_updated;
/* lock */
struct mutex lock;
/* list link */
struct list_head link; //链表,根据优先级高低排列
/* request to PPM */
struct ppm_policy_req req; //里面有每个簇cpu最小和最大频率要设定的值和cpu簇最小和最大core num要设定的值
/* callbacks */
void (*update_limit_cb)(void);
void (*status_change_cb)(bool enable);
};