由于 Linux-socfPGA 内核版本 5.4 及更高版本出现问题,HPS EMAC 在某些情况下可能会挂起或停止。
出现此问题的原因Cyclone® V SoC Linux 设备树设置不正确
- 必须在 L2C-310 高速缓存控制器上启用"共享启用覆盖位"
- 阅读和写入未处理交易限制应设置为在 EMAC DMA 上0xf
要解决此问题,执行以下步骤:
1. 通过编辑 arch/arm/boot/dts/socfpga.dtsi, 确保 L2C-310 设备树节点设置共享的 Enable Override 位
二级:高速缓存controller@fffef000 {
兼容 = "arm,pl310-cache";
reg = ;
中断 = ;
高速缓存统一;
高速缓存级别 = ;
arm,tag-latency = ;
arm,数据延迟 = ;
预先提取数据 = ;
预取存储器 = ;
arm,共享覆盖; # 检查是否存在
arm,双线填充 = ;
arm,double-linefill-incr = ;
arm,双线填充包装 = ;
arm,prefetch-drop = ;
arm,prefetch-offset = ;
};
2. 编辑 以太网节点,以添加用于 snps、axi-config 的参考,以及 添加 snps、axi-config 中 arch/arm/boot/dts/socfpga.dtsi 的节点
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, multicast-filter-bins = ;
snps, perfect-filter-entries = ;
+ snps,axi-config = ;
tx-fifo-depth = ;
rx-fifo-depth = ;
状态 = "已禁用";
};
+
+ stmmac_axi_setup_0:stmmac-axi-config_0 {
+ snps,wr_osr_lmt = ;
+ snps,rd_osr_lmt = ;
+ };
此问题计划在 Linux-SocfPGA 内核的未来版本中解决。