RTL8211FDI-CG拔掉网线不停做硬件复位导致PHY驱动出错

       一开始产品做ESD(静电放电测试)测试,会将网口打坏,导致网络不通。所以应用层添加了一个看门狗程序,来检测PHY状态。

        硬件复位操作(对GPIO进行拉低,拉高操作)

        软件复位操作(对PHY的复位寄存器写入对应的值,eth0 0x01 0x00 0x8000)

        看门狗程序每隔2秒检测一次,检测到PHY状态为LInkDown状态超过3次就进行硬件复位,并且需要软件复位。

如果PHY状态为LINKUP状态,且需要软件复位,就进行软件复位。

问题:网线长时间拔掉,看门狗程序会不停的对PHY进行硬件复位操作,导致PHY驱动出错。

报错信息如下:

[60651.919917] RTL8211F Gigabit Ethernet 30be0000.ethernet-1:01: Master/Slave resolution failed, maybe conflicting manual settings?
[60651.931536] ------------[ cut here ]------------
[60651.936165] WARNING: CPU: 1 PID: 1615742 at drivers/net/phy/phy.c:716 phy_error+0x10/0x58
[60651.944340] Modules linked in: imx570(O)
[60651.948269] CPU: 1 PID: 1615742 Comm: kworker/u8:2 Tainted: G           O      5.4.3-00196-gdc7c19ad1481-dirty #28
[60651.958615] Hardware name: NXP i.MX8MNano EVK board (DT)
[60651.963932] Workqueue: events_power_efficient phy_state_machine
[60651.969854] pstate: 60000005 (nZCv daif -PAN -UAO)
[60651.974644] pc : phy_error+0x10/0x58
[60651.978218] lr : phy_state_machine+0x90/0x178
[60651.982571] sp : ffff80001feabd60
[60651.985883] x29: ffff80001feabd60 x28: ffff800011886000 
[60651.991192] x27: ffff00001400c070 x26: ffff00001400c020 
[60651.996504] x25: 0000000000000000 x24: 00000000ffffffbd 
[60652.001815] x23: ffff00001456e800 x22: 0000000000000005 
[60652.007126] x21: ffff00001456ec38 x20: ffff00001456e7e0 
[60652.012440] x19: ffff00001456e800 x18: 0000000000000010 
[60652.017751] x17: 0000000000000000 x16: 0000000000000000 
[60652.023063] x15: ffff0000146f7470 x14: 6c6f736572206576 
[60652.028374] x13: 616c532f72657473 x12: 614d203a31303a31 
[60652.033688] x11: 2d74656e72656874 x10: 652e303030306562 
[60652.038999] x9 : 30332074656e7265 x8 : ffff8000119dd000 
[60652.044310] x7 : ffff8000106840f8 x6 : 0000000000000224 
[60652.049621] x5 : 0000000000000000 x4 : 0000000000000000 
[60652.054934] x3 : ffff00001456ec38 x2 : 0000000000000000 
[60652.060246] x1 : ffff0000146f7000 x0 : ffff00001456e800 
[60652.065559] Call trace:
[60652.068007]  phy_error+0x10/0x58
[60652.071233]  phy_state_machine+0x90/0x178
[60652.075246]  process_one_work+0x198/0x320
[60652.079254]  worker_thread+0x48/0x420
[60652.082917]  kthread+0xf0/0x120
[60652.086059]  ret_from_fork+0x10/0x18
[60652.089633] ---[ end trace 23a4fd45b3c659b0 ]---

        为啥要不停的给PHY做硬件复位呢? 一开始ESD测试的时候,怕做了一次硬件复位,PHY没有起来,这时候又将PHY打坏了,需要继续做硬件复位,但是引起了PHY驱动出错的问题。

解决办法:只对PHY做3次硬件复位,直到下次正常LinkUp以后,再LinkDown了,再做硬件复位。

反思:网线拔掉了,不停的对PHY做硬件复位这种肯定是不合理的,对PHY做了一次硬件复位,没有起来,你再做复位也没意义。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值