文章 ID: 000088371 内容类型: 故障排除 上次审核日期: 2023 年 08 月 16 日

为什么在我的 Cyclone® V SoC 设计上,我看到 HPS EMAC 挂起而 RX 缓冲区已满?

环境

Linux-socfpga

BUILT IN - ARTICLE INTRO SECOND COMPONENT
说明

由于 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 分支开始,此问题已修复

相关产品

本文适用于 3 产品

Cyclone® V ST SoC FPGA
Cyclone® V SX SoC FPGA
Cyclone® V SE SoC FPGA

本页面上的内容是原始英文内容的人工翻译与计算机翻译的组合。我们提供此内容是为了您的便利并且仅供参考,未必完整或准确。如果本页面的英文版与翻译版之间存在任何冲突,应以英文版为准。 查看此页面的英语版本。