SoC FPGA Linux カーネルバージョン 4.17 2018年6月以降、および 4.18 以降:
- Linux デバイスツリーでは、インテル® Stratix® 10 SX のトップレベル・リファレンス・クロック周波数のみが指定されています。
- インテル® Quartus® Prime Pro プラットフォーム・デザイナー・デザインのStratix 10 HPS コンポーネントで設定されたクロックツリーは、クロック・マネージャー・ドライバーによってFPGA・ビットストリームからロードされます。
SoC FPGA Linux カーネル・バージョン 4.17 (2018年6月より前) およびそれ以前のバージョン:
Linux デバイスツリーには、インテル® Stratix® 10 SX の完全なクロッキング構造に関する情報が含まれており、インテル® Quartus® Prime Pro プラットフォーム・デザイナー・デザインのStratix 10 HPS コンポーネントのクロック・セットアップを反映する必要があります。
ボードとデザインを反映するようにクロック構造が更新されていない場合、Linux ではペリフェラルが正しく動作しない可能性があります。
Linux カーネルには、汎用トップレベル・デバイスツリーと、インテル Stratix 10 SX デベロップメント・キット用のサンプルデバイスツリーが含まれています。
arch/arm64/boot/dts/altera/
socfpga_stratix10.dtsi #Genericトップレベルのデバイスツリー
Socfpga_stratix10_socdk.dts # インテル Stratix 10 SX 開発キット用のデバイスツリー例、ゴールデン・ハードウェア・リファレンス・デザイン (GHRD)、ゴールデン・ソフトウェア・リファレンス・デザイン (GSRD)
メモ:
- ゴールデン・ハードウェア・リファレンス・デザイン (GHRD) は、例 / ハードウェア / フォルダー内にインテル FPGA SoC EDS が同梱されています。
- ゴールデン・ソフトウェア・リファレンス・デザイン (GSRD) は、Rocketboards.org https://rocketboards.org/foswiki/Documentation/GSRD からダウンロードできます。
この問題は、新しいバージョンのカーネル (5.X) で修正されました。
SoC FPGA Linux カーネルバージョン 4.17 2018年6月以降、および 4.18 以降:
Linux デバイスツリーでは、インテル® Stratix® 10 SX のトップレベル・リファレンス・クロック周波数のみが指定されています。
clkmgr@ffd10000 {
クロック {
osc1 { クロック周波数 = ; };
};
};
SoC FPGA Linux カーネル・バージョン 4.17 (2018年6月より前) およびそれ以前のバージョン:
socfpga_stratix10.dtsi には、各クロックツリー・コンポーネントで使用可能な設定が表示されます。
peri_emacb_clk: peri_emacb_clk@ec {
#clockセル = ;
互換 = 「altr,socfpga-s10-perip-clk」;
クロック = 、、、、;
reg = ;
};
以下は、UART と I2C を供給するクロックを示すツリーの一部です。 デフォルトでは、IP のソースクロックは設定されますが、ツリーへの接続は設定されていないことに注意してください。 IP は、noc_clkによって駆動されるクロックをl4_sp_clockに設定しますが、noc_clkとnoc_free_clkにはドライバーが定義されていません。
:
main_noc_base_clk: main_noc_base_clk {
...
クロック = ;
...
};
noc_free_clk: noc_free_clk@4c {
...
クロック = 、、
,,
;
...
};
noc_clk: noc_clk@30 {
...
クロック = 、;
...
};
l4_sp_clk: l4_sp_clk {
...
クロック = ;
...
};
i2c1: i2c@ffc02900 {
...
クロック = ;
...
};
UART0: serial0@ffc02000 {
...
クロック = ;
...
};
必要な設定は、以下に示す構文を使用して、ボードの .dts ファイルを使用して適用できます。
soc {
clkmgr@ffd10000 {
クロック {
osc1 {
クロック周波数 = ;
};
periph_pll@e4 {
peri_emaca_clk@e8{
クロック = ;
};
peri_emacb_clk@ec {
クロック = ;
};
};
noc_free_clk@4c {
クロック = ;
};
noc_clk@30 {
クロック = ;
};
emaca_free_clk {
クロック = ;
};
emacb_free_clk {
クロック = ;
};
emac0_clk {
クロック = ;
};
emac1_clk {
クロック = ;
};
emac2_clk{
クロック = ;
};
};
};
};
};
上記は、UART / I2C の問題を修正し、一部のイーサネット・クロックも定義します。 このクロックツリーは、UART / I2C からメイン PLL まで完全になりました。 これは、ソースクロック周波数に基づいて UART と I2C を設定するロジックが適切な計算を行うことができることを意味します。
デバイスツリーの詳細については、Linux カーネルのドキュメントを参照してください。