描述
当在硬件配置中包含“大型发送卸载 (Large Send Offload)”并在缓冲区描述符中启用 LSO 功能时,GEM IP 可能通过中断状态寄存器的位 6(同样反映在发射状态寄存器的位 4 中)错误触发“amba error”中断事件。
除了误报此错误外,并未观测到任何功能性问题,且仍可继续使用 LSO 卸载功能。
这被分类为次要硬件问题,因为可轻松屏蔽并忽略误报事件。
详细描述
LSO 提供 TCP 分段 (TSO) 和 UDP 分片 (UFO) 硬件功能,广泛用于提升 TCP/IP 或 UDP/IP 性能。
当软件通过缓冲区描述符 (BD) 查询大型帧时,DMA 引擎将基于软件编程的最大分段大小 (MSS) 值(对应 TSO)或最大以太网帧大小(对应 UFO)来生成其自己的 BD。
启用并激活 LSO 后,中断状态寄存器的位 6 会检查这些生成的 BD 的有效性,如果不正确则会发出报告。
经观测发现,当 DMA 进入休眠状态(由于没有帧在排队)时,中断状态寄存器的位 6 可能误报错误。
敬请放心忽略此误报。
解决方案
影响:
很小。可采用软件变通方法。
GEM IP 可能错误触发“amba error”中断。
变通方法:
根据 LSO 帧正在其中排队的队列,将每个 BD 中发送的缓冲区最大长度限制为比分配给该队列的 TX SRAM 空间少 56 个字节。
例如,如果 LSO 帧正在 Q0 中排队,并且已向 Q0 分配 16KB(作为硬件配置的一部分),那么请将每个排队的 BD 中的长度字段限制为最大 16327 个字节(即,如果设置的长度字段在 16328 到 16383 范围内,就可能发生此问题)。
赛灵思驱动程序将每个排队的 BD 中的长度字段限制为 16327 个字节。
通过设置中断掩码寄存器的位 6 从而屏蔽中断状态寄存器的位 6,这样即可屏蔽“amba_error”中断。
当软件内核中已启用 TSO 或 UFO 时,忽略中断例程内的“amba_error”中断。
对于上述第 2 和第 3 项:虽然当 LSO 处于活动状态时此事件不出现,但是用户在任何正常操作环境内都不应目击此错误,其主要目的是在帧排队等待发射时检查全部软件错误。
因此,建议用户首先在完全禁用 LSO 的情况下启用此中断并运行测试,以确保不会通过位 6 报告全部软件错误,然后再将其屏蔽以配合 LSO 来使用。
位 6 所报告的此错误描述如下:
"Transmit frame corruption due to AMBA (AHB/AXI) error.Set if an error occurs whilst midway through reading transmit frame from external system memory, including HRESP errors(AHB), RRESP or BRESP(AXI) errors and buffers exhausted mid frame (if the buffers run out during transmission of a frame then transmission stops, FCS shall be bad and tx_er asserted).Also set in DMA packet buffer mode if single frame is too large for configured packet buffer memory size."
此错误表明发生了 AXI 响应错误、检测到未使用的位中间帧 (used-bit-mid-frame) 或者软件排队的帧对于已配置的数据包缓冲区而言过大。
在中断状态寄存器的位 11 中同样会指出上述第 1 项错误,因此即使位 6 已屏蔽,错误事件仍可见。
第 2 和第 3 项错误与 LSO 帧不相关,因为 DMA 内部生成的 BD 的 MSS 更小。
这表明内部(而非软件提供的)BD 存在错误,因此当非 LSO 帧排队时,将不会出现错误事件。
受影响的配置:
在硬件配置中包含“大型发送卸载”(通过 gem_pbuf_lso 配置选项),且在缓冲区描述符中启用 LSO 功能。
解决方案:
这是第三方勘误表。不对该问题进行修复。