This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] DP83867IR:在 ifdown eth1后 Eth0链路状态变为关闭状态

Guru**** 2752995 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1165898/dp83867ir-eth0-link-status-goes-down-after-ifdown-eth1

器件型号:DP83867IR

尊敬的 TI 团队:

我们使用 DP83867IRPAPT、

将 eth1链接设置为关闭后、 eth0 Link 状态意外关闭。

我的测试方案是:

$ ifconfig eth0 up;  ifconfig eth1 up

TI DP83867 8000f00.MDIO:00:连接的 PHY 驱动程序[TI DP83867](MII_BUS:phy_addr=8000f00.MDIO:00、IRQ=POLL)
am65-cpsw-uss 8000000.ethernet eth0:链路断开
TI DP83867 8000f00.MDIO:01:连接的 PHY 驱动程序[TI DP83867](MII_BUS:phy_addr=8000f00.MDIO:01、IRQ=POLL)
am65-cpsw-uss 8000000.ethernet eth1:链路断开
IPv6:ADDRCONF (NETDEV_CHANGE):eth0:链路就绪
am65-cpsw-uss 8000000.ethernet eth0:链路已启动- 1Gbps/全-流控制已关闭

$ ifconfig | grep eth.:
eth0:flags=4163 <UP,BROADCAST,RUNNING,MULTICAST> MTU 1500
ETH1:flags=4099 MTU 1500

$./MDIO-tool r eth0 1 # BMSR 寄存器  
0x796d

运行之后。 我关闭了 eth1。  Eth0也意外丢失链接。

$ ifconfig eth1 down
am65-cpsw-uss 8000000.ethernet eth0:链路断开

$ ifconfig eth0
eth0:flags=4099 MTU 1500

$./MDIO-tool r  eth0 17 # STS2寄存器
0x1140

$./MDIO-tool r  eth0  # BMCR 寄存器
0x1140

$./MDIO-tool r  eth0 1 # BMSR 寄存器
0x1140

OS 轮询所有 LAN 的链路状态,在  drivers/net/phy/phy_device.c 的 genphy_update_link()中

通过   drivers/net/ti/davinci_mdio.c 上的 davinci_mdib_read()获取 PHY 链路状态

 我确定驱动程序使用正确的 PHY ID 来写入 eth1 MDIO 寄存器。

Davinci_mdiobb_write (struct MII_bus *总线、int phy、int reg、 U16 val)

我 不知道它为什么会影响另一个 PHY (eth0)。

只有写入 eth1 (PHY1) MDIO 寄存器才会导致 Eth0 (PHY0)链路断开。

如果我交换 eth0和 eth1角色并进行测试、则没有问题。

写入 PHY0 MDIO 寄存器只影响自身。

有人能否提供有关此问题的一些线索?

谢谢、

肖恩

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Sean、

    我建议进行以下操作:

    • 检查 eth1 (接口?)上的连接
    • 验证寄存器读取是否正确
    • 检查运行两个 PHY 的处理器
      • 两个都是867?
    • 提供有关设置的更多详细信息(方框图、原理图等)
    • 通过读取寄存器6E 的位0至3来双检查 PHY 地址
    • 确认 PHY 的搭接正确
      • 通过数据表确认

    请告诉我这是怎么发生的、我们可以进一步调查!

    此致、

    Jason Lee

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jason、Sean

    答复如下

    • 检查 eth1 (接口?)上的连接 =>  eth1和2接口 是 RGMII。
    • 检查运行两个 PHY 的处理器=> 两个 PHY 都是 DP83867IRPAPT。
    • 提供有关设置的更多详细信息(方框图、原理图等) => 方框图如下所示。
    • 确认 PHY 的自举正确=> 是的、我们已检查自举、请参阅下图。


      BR、
      泰勒
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Jason、Taylor、

    • 验证寄存器读取是否正确=>
      我使用的 MDIO 工具源代码。

    root@# ifconfig eth0
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet6 fe80::290:e8ff:fe11:2244  prefixlen 64  scopeid 0x20<link>
            ether 00:90:e8:11:22:44  txqueuelen 1000  (Ethernet)
            RX packets 173  bytes 47890 (46.7 KiB)
            RX errors 0  dropped 58  overruns 0  frame 0
            TX packets 233  bytes 16278 (15.8 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    
    root@# ./mdio-tool r eth0 0
    0x1140
    root@# ./mdio-tool r eth0 1
    0x796d
    root@# ./mdio-tool r eth0 2
    0x2000
    root@# ./mdio-tool r eth0 3
    0xa231
    
    root@# ifconfig eth1
    eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet6 fe80::290:e8ff:fe11:2245  prefixlen 64  scopeid 0x20<link>
            ether 00:90:e8:11:22:45  txqueuelen 1000  (Ethernet)
            RX packets 578  bytes 116552 (113.8 KiB)
            RX errors 0  dropped 232  overruns 0  frame 0
            TX packets 27  bytes 1566 (1.5 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    root@# ./mdio-tool r eth1 0
    0x1140
    root@# ./mdio-tool r eth1 1
    0x796d
    root@# ./mdio-tool r eth1 2
    0x2000
    root@# ./mdio-tool r eth1 3
    0xa231

    • 通过读取寄存器6E 的位0至位3来仔细检查 PHY 地址 =>

    当错误发生时、6E 寄存器的寄存器位0至3为:  

    位:4 3 2 1 0

    Val:0 1 0 1 0 = 10

    root@#./mdio-tool r eth0 0x6e
    0xcea.

    一些寄存器值为:

    寄存器 运行时的值   错误发生时的值  
    0x0 MBCR 0x1140 0x1140
    0x1 BMSR 0x796d 0x1140
    0x2 PHYIDR1 0x2000 0x1140
    0x3 PHYIDR2 0xa231 0x1140
    0x4 ANAR 0x011 0x1140
    0x5 ANLPAR 0xc5e1 0x1140
    0x6 ANER 0x006f 0x1140
    0x7 ANNPTR 0x2001 0x1140
    0x8 ANNPTR 0x4806 0x1140
    0x9 CFG1 0x0300 0x1140
    0xA STS1 0x3800 0x1140
    0xD REGCR 0x401f 0x401f
    0xE 地址 0x0007 0x1140
    0xF 1KSCR 0x3000 0x1140
    0x10 PHYCR 0x5048 0x1140
    0x11 PHYSTS 0xac3e 0x1140
    0x12 MICR 0x0000 0x1140
    0x13 ISR 0x1c42 0x1140
    0x14 CFG2 0x2bc7 0x1140
    0x15 接收器 0x0000 0x1140
    0x16 BOSCH 0x0000 0x1140
    0x17 STS2 0x0040 0x1140
    0x18 LEDCR1 0xd156 0x1140
    0x19 LEDCR2 0x4444 0x1140
    0x1A LEDCR3 0x0002 0x1140
    0x1E CFG3 0x0202 0x1140
    0x1f CTRL 0x0000 0x1140
    0x2C FLD_CFG 0xcea. 0xcea.
    0x2D FLD_CFG 0xcea. 0xcea.
    0x31 CFG4 0xcea. 0xcea.
    0x32 RGMIICTL 0xcea. 0xcea.
    0x33 RGMIICTL2 0xcea. 0xcea.
    0x39 BICSR1 0xcea. 0xcea.
    0x43 100CR 0xcea. 0xcea.
    0x6e TAD_STS1 0xcea. 0xcea.
    0x6f 自举_STS2 0xcea. 0xcea.
    0x86 RGMIIDCTL 0xcea. 0xcea.
    0xFE LOOPCR 0xcea. 0xcea.
    0x134 RXFCFG 0xcea. 0xcea.
    0x135 RXFSTS 0xcea. 0xcea.
    0x136 RXFPMD1 0xcea. 0xcea.
    0x1a7 ALCD_CTRL 0xcea. 0xcea.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Sean 和 Taylor、

    明天上午、我将与应用程序团队会面、确认并验证 这些结果。 感谢您的耐心等待!

    此致、

    Jason Lee

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Sean 和 Taylor、

    我与我们的应用程序团队会面、并注意到:

    • 为 eth0和 eth1的 PHY 地址提供了不同的原理图和寄存器读取值
    • 对于 MDIO00和 MDIO01、它们是否对应于 PHY 地址00和01?
    • 他们正在尝试直接访问6E 寄存器。 这将不起作用(请参阅数据表中的第8.4.2.1节、了解扩展寄存器的正确读取过程。 (这就是为什么在0x1E 之后填充相同值的原因)
    • 0x1140之后的寄存器读取存在问题

    此致、

    Jason Lee

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好 Jason

    PHY 地址为00和01。  

    BR、
    泰勒

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    泰勒

    我相信他们仍在尝试直接访问这些寄存器。 有关扩展寄存器的正确读取过程、请参阅数据表中的第8.4.2.1节。 (这就是为什么在0x1E 之后填充相同值的原因。) 谢谢!

    此致、

    Jason Lee

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Jason、

    寄存器0x1E 显示 PHY ID 正确。

    #读取 Phy0的寄存器0x6e

    root@# ./mdio-tool w eth0 d 1f
    root@# ./mdio-tool w eth0 e 6e
    root@# ./mdio-tool w eth0 d 401f
    root@# ./mdio-tool r eth0 e
    0xe000


    #读取  Phy1的寄存器0x6e

    root@# ./mdio-tool w eth1 d 1f
    root@# ./mdio-tool w eth1 e 6e
    root@# ./mdio-tool w eth1 d 401f
    root@# ./mdio-tool r eth1 e
    0xe001

    谢谢、

    肖恩

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Sean、

    要进行确认、您现在是否能够正确读取所有其他寄存器?

    [引用 userid="524681" URL"~/support/interface-group/interface/f/interface-forum/1165898/dp83867ir-eth0-link-status-goes-down-after-ifdown-eth1 "]只有写入 eth1 (PHY1) MDIO 寄存器时,eth0 (PHY0)链接才会关闭。

    我假设您是通过软件方法在 Linux 终端中执行此操作的。 您是否通过拔下连接到 eth1的电缆手动尝试过此测试? 我们正在尝试确定这是硬件问题还是软件问题。

    此致、

    Jason Lee