Other Parts Discussed in Thread: DP83869
We have a setup using two DP83869 on a carrier and daughter board:
+------------------------------------+----------------------------------------+
| | |
| ____ debug-MDIO _____________________________ |
| / | \ |
| +-----+ +---------+ | +---------+ +------+
| | eth0|- RGMII -| DP83869 |----- SGMII -----| DP83869 |- 1000BASE-T -| RJ45 |
| | |- MDIO --| bridge | | | T-PHY | +------+
| | | +---------+ | +---------+ |
| | CPU | (strap) |
| | | +---------+ | +------+
| | eth1|- RGMII -| DP83869 |--- 1000BASE-X ---------------------------| SFP |
| | |- MDIO --| X-PHY | | +------+
| +-----+ +---------+ | |
| | |
| daughter board | carrier board |
+------------------------------------+----------------------------------------+
We are running Linux on the CPU.
The carrier DP83869 acts as RGMII-SGMII bridge. It has an MDIO interface to the CPU. The device-tree setting has:
ti,op-mode = <DP83869_RGMII_SGMII_BRIDGE>;
The daughter DP83869 acts as SGMII-1000BASE-T PHY. It is strap-only, but we connected an MDIO interface for this debugging. The device-tree setting has:
ti,op-mode = <DP83869_SGMII_COPPER_ETHERNET>;
The link in Linux does not automatically come up, ip link claims NO-CARRIER even when a cable is plugged in. By issuing
ethtool -s eth1 autoneg off speed 1000 duplex full
the link comes up. A connected switch also shows a 1Gb link. However, any data sent from Linux (ping) results in error packets arriving at the switch (as shown by the switch's web interface).
We tried many things related to the hardware, but to no avail so far. I suspect the SGMII link between the PHYs, but could not examine it because we don't have a sufficiently high-bandwidth scope.
I would appreciate any insight to what might be the problem. I am attaching register dumps of the two DP83869s below, each in the state after start-up, after plugging in a cable between the 1000BASE-T PHY's RJ45 socket and the switch, and after issuing the ethtool command above. The highlighted cells are changes from the previous state:
bridge | phy | |||||||
initial | cable | autoneg off | initial | cable | autoneg off | |||
0x000 | BMCR | Basic Mode Control Register | 0x1140 | 0x1140 | 0x0140 | 0x1140 | 0x1140 | 0x1140 |
0x001 | BMSR | Basic Mode Status Register | 0x7949 | 0x7949 | 0x794d | 0x7949 | 0x796d | 0x796d |
0x002 | PHYIDR1 | PHY Identifier Register #1 | 0x2000 | 0x2000 | 0x2000 | 0x2000 | 0x2000 | 0x2000 |
0x003 | PHYIDR2 | PHY Identifier Register #2 | 0xa0f3 | 0xa0f3 | 0xa0f3 | 0xa0f3 | 0xa0f3 | 0xa0f3 |
0x004 | ANAR | Auto-Negotiation Advertisement Register | 0x05e1 | 0x05e1 | 0x05e1 | 0x01e1 | 0x01e1 | 0x01e1 |
0x005 | ALNPAR | Auto-Negotiation Link Partner Ability Register | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0xc5e1 | 0xc5e1 |
0x006 | ANER | Auto-Negotiate Expansion Register | 0x0064 | 0x0064 | 0x0064 | 0x0064 | 0x006f | 0x006d |
0x007 | ANNPTR | Auto-Negotiation Next Page Transmit Register | 0x2001 | 0x2001 | 0x2001 | 0x2001 | 0x2001 | 0x2001 |
0x008 | ANLNPTR | Auto-Negotiation Link Partner Next Page Receive Register | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x6801 | 0x6801 |
0x009 | GEN_CFG1 | Configuration Register 1 | 0x1200 | 0x1200 | 0x1200 | 0x0b00 | 0x0b00 | 0x0b00 |
0x00A | GEN_STATUS1 | Status Register 1 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x3800 | 0x3800 |
0x00F | 1KSCR | 1000BASE-T Status Register | 0xf000 | 0xf000 | 0xf000 | 0xf000 | 0xf000 | 0xf000 |
0x010 | PHY_CONTROL | PHY Control Register | 0x5828 | 0x5828 | 0x5828 | 0x5048 | 0x5048 | 0x5048 |
0x011 | PHY_STATUS | PHY Status Register | 0x0302 | 0x0302 | 0xaf02 | 0x0002 | 0xbc22 | 0xac22 |
0x012 | INTERRUPT_MASK | MII Interrupt Control Register | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 |
0x013 | INTERRUPT_STATUS | Interrupt Status Register | 0x0000 | 0x0000 | 0x6400 | 0x0040 | 0x1c42 | 0x0000 |
0x014 | GEN_CFG2 | Configuration Register 2 | 0x2bc7 | 0x2bc7 | 0x2bc7 | 0x2bc7 | 0x2bc7 | 0x2bc7 |
0x015 | RX_ERR_CNT | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | |
0x016 | BIST_CONTROL | BIST Control Register | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 |
0x017 | GEN_STATUS2 | Status Register 2 | 0x0040 | 0x0040 | 0x0040 | 0x0040 | 0x0040 | 0x0040 |
0x018 | LEDS_CFG1 | LED Configuration Register 1 | 0x6150 | 0x6150 | 0x6150 | 0x6150 | 0x6150 | 0x6150 |
0x019 | LEDS_CFG2 | LED Configuration Register 2 | 0x4000 | 0x4000 | 0x4000 | 0x4444 | 0x4444 | 0x4444 |
0x01A | LEDS_CFG3 | LED Configuration Register 3 | 0x0002 | 0x0002 | 0x0002 | 0x0002 | 0x0002 | 0x0002 |
0x01E | GEN_CFG4 | Configuration Register 3 | 0x0012 | 0x0012 | 0x0012 | 0x0012 | 0x0012 | 0x0012 |
0x01F | GEN_CTRL | Control Register | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 |
0x025 | ANALOG_TEST_CTRL | Testmode Channel Control Register | 0x0480 | 0x0480 | 0x0480 | 0x0480 | 0x0480 | 0x0480 |
0x02C | GEN_CFG_ENH_AMIX | 0x141f | 0x141f | 0x141f | 0x141f | 0x141f | 0x141f | |
0x02D | GEN_CFG_FLD | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | |
0x02E | GEN_CFG_FLD_THR | 0x0221 | 0x0221 | 0x0221 | 0x0221 | 0x0221 | 0x0221 | |
0x031 | GEN_CFG3 | Configuration Register 4 | 0x10b0 | 0x10b0 | 0x10b0 | 0x10b0 | 0x10b0 | 0x10b0 |
0x032 | RGMII_CTRL | RGMII Control Register | 0x00d3 | 0x00d3 | 0x00d3 | 0x0050 | 0x0050 | 0x0050 |
0x033 | RGMII_CTRL2 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | |
0x037 | SGMII_AUTO_NEG_STATUS | SGMII Autonegotiation Status Register | 0x0000 | 0x0000 | 0x0003 | 0x0000 | 0x0000 | 0x0003 |
0x039 | PRBS_TX_CHK_CTRL | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | |
0x03A | PRBS_TX_CHK_BYTE_CNT | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | |
0x043 | G_100BT_REG0 | 0x07a0 | 0x07a0 | 0x07a0 | 0x07a0 | 0x07a0 | 0x07a0 | |
0x04F | SERDES_SYNC_STS | 0x0126 | 0x0126 | 0x0126 | 0x0186 | 0x0186 | 0x0186 | |
0x055 | G_1000BT_PMA_STATUS | Skew FIFO Status Register | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x1010 | 0x1010 |
0x06E | STRAP_STS | Strap Status Register | 0x060e | 0x060e | 0x060e | 0x0c00 | 0x0c00 | 0x0c00 |
0x086 | ANA_RGMII_DLL_CTRL | RGMII Delay Control Register | 0x03d0 | 0x03d0 | 0x03d0 | 0x0077 | 0x0077 | 0x0077 |
0x134 | RXF_CFG | 0x1000 | 0x1000 | 0x1000 | 0x1000 | 0x1000 | 0x1000 | |
0x135 | RXF_STATUS | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | |
0x170 | IO_MUX_CFG | 0x0c0f | 0x0c0f | 0x0c0f | 0x0c0c | 0x0c0c | 0x0c0c | |
0x180 | TDR_GEN_CFG1 | 0x0752 | 0x0752 | 0x0752 | 0x0752 | 0x0752 | 0x0752 | |
0x181 | TDR_GEN_CFG2 | 0xc850 | 0xc850 | 0xc850 | 0xc850 | 0xc850 | 0xc850 | |
0x182 | TDR_SEG_DURATION1 | 0x5326 | 0x5326 | 0x5326 | 0x5326 | 0x5326 | 0x5326 | |
0x183 | TDR_SEG_DURATION2 | 0xa01e | 0xa01e | 0xa01e | 0xa01e | 0xa01e | 0xa01e | |
0x184 | TDR_GEN_CFG3 | 0xe976 | 0xe976 | 0xe976 | 0xe976 | 0xe976 | 0xe976 | |
0x185 | TDR_GEN_CFG4 | 0x19cf | 0x19cf | 0x19cf | 0x19cf | 0x19cf | 0x19cf | |
0x190 | TDR_PEAKS_LOC_A_0_1 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | |
0x191 | TDR_PEAKS_LOC_A_2_3 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | |
0x192 | TDR_PEAKS_LOC_A_4_B_0 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | |
0x193 | TDR_PEAKS_LOC_B_1_2 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | |
0x194 | TDR_PEAKS_LOC_B_3_4 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | |
0x195 | TDR_PEAKS_LOC_C_0_1 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | |
0x196 | TDR_PEAKS_LOC_C_2_3 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | |
0x197 | TDR_PEAKS_LOC_C_4_D_0 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | |
0x198 | TDR_PEAKS_LOC_D_1_2 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | |
0x199 | TDR_PEAKS_LOC_D_3_4 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | |
0x1A4 | TDR_GEN_STATUS | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | |
0x1A5 | TDR_PEAKS_SIGN_A_B | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | |
0x1A6 | TDR_PEAKS_SIGN_C_D | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | |
0x1DF | OP_MODE_DECODE | 0x0043 | 0x0043 | 0x0043 | 0x0006 | 0x0006 | 0x0006 | |
0x1E0 | GPIO_MUX_CTRL | 0x417a | 0x417a | 0x417a | 0x417a | 0x417a | 0x417a | |
0x1EC | MC_LINK_LOSS | 0x1ffd | 0x1ffd | 0x1ffd | 0x1ffd | 0x1ffd | 0x1ffd | |
0xC00 | FX_CTRL | Fiber Control Register | 0x1140 | 0x1140 | 0x1140 | 0x1140 | 0x1140 | 0x1140 |
0xC01 | FX_STS | Fiber Status Register | 0x6149 | 0x6149 | 0x617d | 0x6149 | 0x6149 | 0x6169 |
0xC02 | FX_PHYID1 | Fiber PHYID Register 1 | 0x2000 | 0x2000 | 0x2000 | 0x2000 | 0x2000 | 0x2000 |
0xC03 | FX_PHYID2 | Fiber PHYID Register 2 | 0xa0f3 | 0xa0f3 | 0xa0f3 | 0xa0f3 | 0xa0f3 | 0xa0f3 |
0xC04 | FX_ANADV | Fiber Autonegotiation Advertisement Register | 0x0020 | 0x0020 | 0x0020 | 0x0020 | 0x0020 | 0x0020 |
0xC05 | FX_LPABL | Fiber Link Partner Ability Register | 0x0000 | 0x0000 | 0xd801 | 0x0000 | 0x0000 | 0x4001 |
0xC06 | FX_ANEXP | Fiber Autonegotiation Expansion Register | 0x0000 | 0x0000 | 0x000b | 0x0000 | 0x0000 | 0x0003 |
0xC07 | FX_LOCNP | Fiber LOC Next Page Register | 0x2001 | 0x2001 | 0x2001 | 0x2001 | 0x2001 | 0x2001 |
0xC08 | FX_LPNP | Fiber Link Partner Next Page Register | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 | 0x0000 |
0xC10 | CFG_FX_CTRL0 | Fiber Signal Detect | 0x3348 | 0x3348 | 0x3348 | 0x3348 | 0x3348 | 0x3348 |
0xC18 | FX_INT_EN | Fiber Interrupt Enable Register | 0x01ff | 0x01ff | 0x01ff | 0x01ff | 0x01ff | 0x01ff |
0xC19 | FX_INT_STS | Fiber Interrupt Status Register | 0x0010 | 0x0000 | 0x0019 | 0x0000 | 0x0010 | 0x0001 |