2017-05-27 5 views
0

初めての呼び出し元です。レガシーcpufreq_driverのcpufreq_frequency_table初期化の書き換え

私は以前のクアルコムSoCボード(apq8064、私が知っているばかげた取り組み)のために、4.12-rcのようなものを上流のコードから3.4ベースのカーネルにバックポートしてきました。

これまで私はcpufreqを除いて、クリエイティブなシムとダブテールで解決された互換性の問題を抱えて、ほぼすべてのコアAPIで成功を収めてきました。

私はまだレガシープラットフォームのドライバとクロッキングを使用していますが、dtのものや一般的な時計フレームのものは使用していません。

私の問題は、apcpのpercpuからper-policyへの移行の一環として、struct cpufreq_policyにstuct cpufreq_frequency_tableを含めることから始まります。 3.13では、cpufreq_frequency_table_get_attrの使用はもはやオプションではないため、プラットフォームのfreq_tableの登録は固有のケースでは難しくなりました。

私の場合、cpufreq_driverのinitは汎用で、私のプラットフォームのスケーリングドライバ(acpuclock-krait)に依存してfreq_tableを登録します。これは古いapiでは問題ありませんが、ポリシーごとの設定とは互換性がなくなります。上流側ではドライバが手動でpolicy-> freq_tableを初期化する必要があり、mineはcpuとプラットフォームコード内のテーブルを表す35の配列の両方を使用します。また、テーブルを選択するときに6種類のspeedbin/pvs値を考慮します。私はそれから "cpu"パラメータを落としてcpumask_copyを使うことを検討しています。おそらく2つのドライバを1つに組み合わせてクロックドライバをプローブにすることも考えていますが、これまでのinitは私の謎です。ここに私のテーブル登録のスニペットは、ある誰もがハッキング何かを考えることができれば、私は永遠に感謝するだろう...

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); 
} 

答えて

0

UPDATE!私は最初の登録を更新してからすべての中核的な変更を元に戻したいと思っていました。以前は、問題の配列は、次のようなpercpuダミー配列を参照しました:freq_table [NR_CPUS] [35] cpuパラメータをテーブルの一部としてリストする必要がありました。私はここでpercpuの設定とプラットフォーム固有のfreq管理(cpufreqは見ておく必要はありません)を可能にする変更を加えましたが、cpufreqが参照する必要がある "インデックス"を表すダミーテーブルを使用しました。コミットはここにある、次の1つの明白な間違いが修正されました:https://github.com/robcore/machinex/commit/59d7e5307104c2396a2e4c2a5e0b07f950dea10f

関連する問題