Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92
mali_device_driver 分为两个部分 : platform_dependent_part 和 common_parts, 参见 mali_kbase_config_rk.c 开头部分的注释.
gpu dvfs核心控制在mali_kbase_dvfs.c中.
s_mali_dvfs_level_table 定义gpu所有可变的freq level以及对应的min utilisation和max utilisation.
static struct mali_dvfs_level_t s_mali_dvfs_level_table[] = {
{100000, 0, 70},
{160000, 50, 65},
{266000, 60, 78},
{350000, 65, 75},
{400000, 70, 75},
{500000, 90, 100},
};
不过它会被dts中的operating-points所覆盖
clk_gpu_dvfs_table: clk_gpu {
operating-points = <
/* KHz uV */
200000 1200000
300000 1200000
400000 1200000
>;
};
gpu dvfs运行时, common parts (metrics system)会周期地(20ms)通知回调 platform_dependent_part 中的函数 kbase_platform_dvfs_event(), 并传入当前的 gpu utilization.
dvfs_callback -> kbase_pm_get_dvfs_action -> kbase_platform_dvfs_event
int