Linux-socfpga カーネルバージョン 5.4 以降の問題により、状況によっては HPS EMAC がハングまたはストールすることがあります。
この問題は、Cyclone® V SoC Linux デバイスツリーの設定が正しくないために発生します
- 共有イネーブルオーバーライドビットは、L2C-310キャッシュコントローラで有効にする必要があります
- 読み取りと書き込みの未処理トランザクション制限は、EMAC DMA で 0xf に設定する必要があります
この問題を回避するには、次の手順を実行します。
1. arch/arm/boot/dts/socfpga.dtsi を編集して、L2C-310 デバイスツリー・ノードが共有のイネーブル・オーバーライド・ビットに設定されていることを確認します
L2: キャッシュcontroller@fffef000 {
compatible = "arm,pl310-cache";
reg = <0xfffef000 0x1000>;
割り込み = <0 38 0x04>;
キャッシュ統合;
キャッシュレベル = <2>;
arm,tag-latency = <1 1 1>;
ARM,データ・レイテンシー = <2 1 1>;
プリフェッチデータ= <1>;
prefetch-instr = <1>;
アーム、共有オーバーライド; # これが存在することを確認します
ARM、ダブルラインフィル= <1>;
ARM,ダブルラインフィル-incr = <0>;
ARM、ダブルラインフィルラップ= <1>;
ARM、プリフェッチドロップ= <0>;
ARM,プリフェッチオフセット = <7>;
};
2. イーサネット・ノード を編集 して snps,axi-config のリファレンスを追加し、arch/arm/boot/dts/socfpga.dtsi に snps,axi-config のノード を追加します 。
GMAC0 の例:
diff --git a/arch/arm/boot/dts/socfpga.dtsi b/arch/arm/boot/dts/socfpga.dtsi
インデックス E404220..90A0560 100644
--- a/arch/arm/boot/dts/socfpga.dtsi
+++ b/arch/arm/boot/dts/socfpga.dtsi
@@ -560,10 +560,16@@
リセット名 = "stmmaceth";
SNPS,マルチキャスト・フィルター・ビン = <256>;
SNPS,完全フィルタエントリ = <128>;
+ snps,axi-config = <&stmmac_axi_setup_0>;
TX-FIFO-depth = <4096>;
rx-fifo-depth = <4096>;
ステータス = "無効";
};
+
+ stmmac_axi_setup_0: stmmac-axi-config_0 {
+ SNPS,wr_osr_lmt = <0xf>;
+ SNPS,rd_osr_lmt = <0xf>;
+ };
この問題は、linux-socfpga-5.10.120-lts および linux-socfpga-5.15.30-lts ブランチで修正されています。