首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重写旧版cpufreq_driver的cpufreq_frequency_table初始化

重写旧版cpufreq_driver的cpufreq_frequency_table初始化
EN

Stack Overflow用户
提问于 2017-05-28 03:31:14
回答 1查看 82关注 0票数 0

长时间的听众,第一次打电话的人。

我一直在向后移植上游代码的特性,直到4.12-rc-无论是什么,对于一个更老的高通SoC主板(apq8064,我知道这是一项荒谬的任务)来说,都是3.4基础的内核。

到目前为止,我在几乎所有的核心api上都取得了成功,除了cpufreq之外,所有的兼容性问题都是通过创造性的垫片和ducttape来解决的。

请记住,我仍然在使用传统的平台驱动程序和时钟,没有dt或公共时钟框架。

我的问题始于将struct包含到struct中,作为cpufreq_policy中从percpu到per-policy的转变的一部分。在3.13中,注册平台的freq_table对于特殊情况变得更加困难,因为使用cpufreq_frequency_table_get_attr不再是一个选项。

在我的例子中,cpufreq_ driver的初始化是通用的,并且依赖于我的平台的缩放驱动程序(acpuclock-krait)来注册freq_table,这对于较旧的api来说很好,但是与每个策略的设置不兼容。上游的so i需要驱动程序手动初始化policy->freq_table,而我的则同时使用一个cpu和一个由35个数组组成的数组来表示平台代码中的表。此外,在选择表格时,它还考虑了6个不同的speedbin/pvs值。我正在考虑去掉"cpu“参数,使用cpumask_copy,甚至可以把两个驱动程序合为一个,让时钟驱动程序成为一个探测器,但是,到目前为止,这对我来说是一个谜。这是我的表格注册的片段,如果有人能想到一些可以破解的东西,我将永远感激……

代码语言:javascript
复制
ifdef CONFIG_CPU_FREQ_MSM
static struct     cpufreq_frequency_table.freq_table[NR_CPUS][35];
extern int console_batt_stat;
static void __init cpufreq_table_init(void)
{
    int cpu;
    int freq_cnt = 0;

    for_each_possible_cpu(cpu) {
        int i;
        /* Construct the freq_table tables from     acpu_freq_tbl. */
        for (i = 0, freq_cnt = 0;     drv.acpu_freq_tbl[i].speed.khz != 0
                && freq_cnt <     ARRAY_SIZE(*freq_table)-1; i++) {
            if (drv.acpu_freq_tbl[i].use_for_scaling) {
                freq_table[cpu][freq_cnt].index =     freq_cnt;
                freq_table[cpu][freq_cnt].frequency
                    = drv.acpu_freq_tbl[i].speed.khz;
                freq_cnt++;
            }
        }
        /* freq_table not big enough to store all usable freqs. */
        BUG_ON(drv.acpu_freq_tbl[i].speed.khz != 0);

        freq_table[cpu][freq_cnt].index = freq_cnt;
        freq_table[cpu][freq_cnt].frequency =     CPUFREQ_TABLE_END;

        /* Register table with CPUFreq. */
        cpufreq_frequency_table_get_attr(freq_table[cpu], cpu);
    }

    dev_info(drv.dev, "CPU Frequencies Supported: %d\n", freq_cnt);
}
EN

回答 1

Stack Overflow用户

发布于 2017-05-28 06:28:52

更新!我想在合并所有核心更改之前更新初始注册,并且我非常确定我已经这样做了。以前,有问题的数组引用了一个看起来像这样的percpu虚拟数组: freq_tableNR_CPUS,它要求cpu参数作为表的一部分列出。我在这里做了一些更改,允许我进行percpu设置和特定于平台的freq管理( cpufreq不需要看到它),但使用了一个表示"index“的虚拟表,cpufreq确实需要看到它。Commit在这里,下一个修复了明显的错误:https://github.com/robcore/machinex/commit/59d7e5307104c2396a2e4c2a5e0b07f950dea10f

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44220857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档