功能定義
系統(tǒng)框架層同事要在某些場(chǎng)景(主要是冷啟動(dòng))將CPU boost到最大頻率,保持一段時(shí)間,但是當(dāng)前mtk平臺(tái)將thermal的優(yōu)先級(jí)高于boost的優(yōu)先級(jí),需要將驅(qū)動(dòng)層boost節(jié)點(diǎn)的優(yōu)先級(jí)提升。
具體實(shí)現(xiàn)
以冷啟動(dòng)boost為例,軟件調(diào)用流程如下

image.png
Kernel 層添加了/proc/ppm/policy/forcelimit_cpu_freq節(jié)點(diǎn)。
因?yàn)槟J(rèn)proc節(jié)點(diǎn)的優(yōu)先級(jí)比較低,低于thermal的優(yōu)先級(jí),所以添加了高優(yōu)先級(jí)的節(jié)點(diǎn)。
Mtk ppm policy驅(qū)動(dòng)的主要結(jié)構(gòu)體是ppm_policy_data
struct ppm_policy_data {
/* settings */
const char *name; //名字
enum ppm_policy policy; //類(lèi)型,優(yōu)先級(jí)相關(guān)
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; //鏈表,根據(jù)優(yōu)先級(jí)高低排列
/* request to PPM */
struct ppm_policy_req req; //里面有每個(gè)簇cpu最小和最大頻率要設(shè)定的值和cpu簇最小和最大core num要設(shè)定的值
/* callbacks */
void (*update_limit_cb)(void);
void (*status_change_cb)(bool enable);
};