2 つの異なる問題により、ハード・プロセッサー・システム (HPS) デバイスFPGA 10 SoC インテル® Stratix® UART、I2C、SPI IP は、古いバージョンのカーネルで誤った速度で動作する可能性があります。
SoC FPGA Linux カーネル 4.17 以降 (2018年6月以降) 非デフォルトの MPU クロック周波数が使用される場合: 修正済みで、https://github.com/altera-opensource/linux-socfpga コミットにアップロードされたパッチ 23d4f7b2c6000e09539a6266ef35c213f93649e
- SoC FPGA Linux 4.17 カーネル以降では、Stratix 10 クロック・マネージャー・ドライバーは、FPGA・ビットストリームからクロック情報を抽出します。リファレンス・クロック周波数のみが、デバイスツリーで指定されます。
- 問題のため、MPU 周波数が非デフォルト値に設定されている場合、一部の周波数が誤っている可能性があります。
SoC FPGA Linux カーネル 4.17 は、2018年6月より前および 4.16 以前:
- Linux デバイスツリーには、ハード・プロセッサー・システム (HPS) をインテル® Stratix® 10 SoC FPGAクロック構造に関する情報が含まれています。インテル® Quartus® Prime Pro プラットフォーム・デザイナー・システムのハード・プロセッサー・システム インテル Stratix 10 FPGA IP のクロック・セットアップを反映している必要があります。 ボードとデザインを反映するようにクロック構造が更新されていない場合、Linux ではペリフェラルが正しく動作しない可能性があります。 一般的な問題は、u-boot で動作する UART または I2C インターフェイスですが、Linux では動作しません。
- 問題が原因で、MPU 周波数が非デフォルト値に設定されている場合、一部の周波数が誤っている可能性があります (以下の回避策)
この問題は、新しいバージョンのカーネルで修正されました。クロック情報は、FPGA・コンフィグレーション・ビットストリームおよび更新されたクロックドライバーから読み込まれます。
SoC FPGA Linux カーネル 4.17 以降 (2018年6月以降)、非デフォルトの MPU クロック周波数を使用する場合
- この問題は、コミットが 23d4f7b2c6000e095399a6266ef35c213f93649e の https://github.com/altera-opensource/linux-socfpga の 4.18 カーネルで修正されています
- また、この問題0002_clk-pll-s10_L3L4clockFrequencyFix_1.patch を回避できるパッチも利用可能です。
また、関連する KDB を参照してください: f2s_free_clockを HPS リファレンス・クロックとして使用する際、インテル® Stratix® 10 SoC で Linux の起動に失敗する原因は何ですか?
Soc FPGA Linux カーネル 4.17 (2018年6月以前、4.16 以前):
Linux デバイスツリーを更新してデザインのクロック設定を反映させる方法については、プラットフォーム・デザイナーのクロック設定に合わせて、Stratix 10 SX の Linux デバイスツリーを更新する方法 を参照してください。
非デフォルトの MPU クロック周波数が使用されている場合にマス・エラーを回避するには
- デバイスツリーで L3、L4 L4 低速クロック周波数を手動で設定
○ ロジックを残して PLL の記述を行う
○ L3 ディバイダーからのクロックの上書き
l3_main_free_clk: l3_main_free_clk {
#clockセル = ;
#compatible = "altr,socfpga-s10-perip-clk";
#clocks = ;
#fixedディバイダー = ;
クロック周波数 = ;
互換 = 「固定クロック」
};
l4_sys_free_clk: l4_sys_free_clk {
#clockセル = ;
#compatible = "altr,socfpga-s10-perip-clk";
#clocks = ;
#fixedディバイダー = ;
クロック周波数 = ;
互換 = 「固定クロック」
};
l4_main_clk: l4_main_clk {
#clockセル = ;
#compatible = "altr,socfpga-s10-gate-clk";
#clocks = ;
クロック周波数 = ;
互換 = 「固定クロック」;
#div-reg = ;
#clkゲート = ;
};
l4_mp_clk: l4_mp_clk {
#clockセル = ;
#compatible = "altr,socfpga-s10-gate-clk";
#clocks = ;
クロック周波数 = ;
互換 = 「固定クロック」;
#div-reg= ;
#clkゲート = ;
};
l4_sp_clk: l4_sp_clk {
#clockセル = ;
#compatible = "altr,socfpga-s10-gate-clk";
#clocks = ;
クロック周波数 = ;
互換 = 「固定クロック」;
#div-reg= ;
#clkゲート = ;
};