由于 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-缓存”;
注册 = <0xfffef000 0x1000>;
中断 = <0 38 0x04>;
缓存统一;
缓存级别 = <2>;
臂,标签延迟 = <1 1 1>;
arm,数据延迟 = <2 1 1>;
预取数据 = <1>;
预取 = <1>;
arm,共享覆盖; # 检查这是否存在
臂,双线填充 = <1>;
臂,双线填充增量 = <0>;
臂,双线填充包装 = <1>;
臂,预取-掉落 = <0>;
臂,预取偏移量 = <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 分支开始,此问题已修复