PFE 专家们好
客户:LGE/Mobis
平台:S32G2
模块PFE 从属驱动程序 1.6.0
我们的客户使用 BSP36、PFE 从驱动程序 1.6.0 和 PFE MCAL 驱动程序 1.3.0。
客户正在实施 A53 不正常的 RESET。如果 A53 不发送心跳,M7 将强制 RESET A53。
经过 4~5 次连续 RESET 测试后,PFE FW 输出以下错误日志。
它们的使用顺序如下
|
/* 1.禁用 GIC500 的中断路由器 */
disable_a53_interrupt_routing(); /* 2.删除 PFE 逻辑接口 */ /* 3. 清除从属 HIF 内部 Rx bd */ /* 4. 清除 PFE 端口一致性寄存器 */ /* 5.关闭 A53 内核/分区 */ /* 6.启用 GIC500 的中断路由器 */ /* 7.打开 A53 内核/分区 */ |
我搭建了类似的环境,无法重现问题,我的测试日志正常。
您能帮忙分析一下在什么情况下会出现错误吗?
感谢您的支持。
顺祝商祺!
狮子座
这也让我们感到困惑。阅读代码后,我认为这是针对 1 个 EMAC 连接到同一驱动器的多个 HIF 通道时的用例。但我认为,现在已经不推荐使用这种情况了。而且绝对不能在从属模式下使用。
我看到这条命令没有出错,但不知道是否会产生这个错误:
libfci_cli logif-update -i emac2 --egress hif
令我困惑的是 tx_port =PFE_PHY_IF_ID_HIF。在什么情况下 tx_port 等于PFE_PHY_IF_ID_HIF?我将要求客户分享他们的 PFE 配置。
BR、
狮子座
感谢您的回答,我会向客户确认他们是如何配置 PFE 的。
BR、
狮子座
你好,这个错误来自函数 fp_replica_hif_rx_scaling() 中的 FW。这是对该函数中 while 循环的无限循环保护。它试图找到下一个要发送数据包的活动 HIF,但找不到(它刚刚被 BD 冲洗禁用)。
要进一步调查,请尝试查看是否有启用流量传播的特定选项。Linux 驱动程序真的只配置了一个 HIF 吗?我不确定这段 FW 代码是一直执行还是只在某些特定配置下执行。FW 应确定该帧针对的是禁用接口,并将其丢弃。
另外,在调用 Eth_43_PFE_ChannelBdFlushRx() 时,Linux 驱动程序必须处于非活动状态。如果内核处于恐慌状态,情况确实如此,但视它们触发信号心跳损失的方式而定,情况可能并非如此。为了确保这一点,也许在调用 BD flush API 之前关闭 Linux 分区更为安全。或者,他们可以确保内核处于 "恐慌 "模式或其他模式,在这种模式下不会执行任何操作。
我猜他们使用的是桥接模式,而且在恢复过程中看起来流量是流动的。在您的环境中也是这样设置的吗?