由於 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:cache-controller@fffef000 {
相容 = 「arm,pl310-cache」;
註冊 = <0xfffef000 0x1000>;
中斷 = <0 38 0x04>;
緩存統一;
緩存級別 = <2>;
arm,標籤延遲 = <1 1 1>;
ARM,資料延遲 = <2 1 1>;
預取資料 = <1>;
prefetch-instr = <1>;
arm,共用覆蓋; # 檢查這是否存在
臂,雙線填充 = <1>;
臂,雙線填充增量 = <0>;
臂,雙線填充包裝 = <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 配置 = <&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 分支開始修復