[RK3288][Android6.0] 调试笔记 --- CPU使用的频率表

Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92

系统中有三张CPU相关的频率表:

1. rockchip-cpufreq.c:

/* Frequency table index must be sequential starting at 0 */
static struct cpufreq_frequency_table default_freq_table[] = {
    {.frequency = 312 * 1000,       .index = 875 * 1000},
    {.frequency = 504 * 1000,       .index = 925 * 1000},
    {.frequency = 816 * 1000,       .index = 975 * 1000},
    {.frequency = 1008 * 1000,      .index = 1075 * 1000},
    {.frequency = 1200 * 1000,      .index = 1150 * 1000},
    {.frequency = 1416 * 1000,      .index = 1250 * 1000},
    {.frequency = 1608 * 1000,      .index = 1350 * 1000},
    {.frequency = CPUFREQ_TABLE_END},
};
static struct cpufreq_frequency_table *freq_table = default_freq_table;

2. rk3288.dtsi:

&clk_core_dvfs_table {
    operating-points = <
        /* KHz    uV */
        126000 900000
        216000 900000
        312000 900000
        408000 900000
        600000 900000
        696000 950000
        816000 1000000
        1008000 1050000
        1200000 1100000
        1416000 1200000
        1512000 1300000
        1608000 1350000
    //  1704000 1350000
    //  1800000 1400000
        >;
    //......
    };

3. rk3288.dtsi:

&clk_core_dvfs_table {
        //......
        support-pvtm = <1>;
        pvtm-operating-points = <
                /* KHz    uV    margin(uV)*/
                126000 900000   25000
                216000 900000   25000
                312000 900000   25000
                408000 900000   25000
                600000 900000   25000
                696000 950000   25000
                816000 1000000  25000
                1008000 1050000 25000
                1200000 1100000 25000
                1416000 1200000 25000
                1512000 1300000 25000
                1608000 1350000 25000
                >;
    status="okay";
    };

最终用的是第三张.


代码调用:

第一张表被覆盖的地方:
dvfs.c:

static int cpufreq_init_cpu0(struct cpufreq_policy *policy)
{
    freq_table = dvfs_get_freq_volt_table(clk_cpu_dvfs_node);
}
struct cpufreq_frequency_table *dvfs_get_freq_volt_table(struct dvfs_node *clk_dvfs_node) 
{
    struct cpufreq_frequency_table *table;

    if (!clk_dvfs_node)
        return NULL;

    mutex_lock(&clk_dvfs_node->vd->mutex);
    table = clk_dvfs_node->dvfs_table;
    mutex_unlock(&clk_dvfs_node->vd->mutex);

    return table;
}

第二张表被覆盖的地方:

int clk_enable_dvfs(struct dvfs_node *clk_dvfs_node)
{
            if (clk_dvfs_node->support_pvtm)
            pvtm_set_dvfs_table(clk_dvfs_node);
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值