Tool/software:
Hello TI-Support-Team,
Thanks for your help on our issues.
We are currently testing devices by doing multiple power cycles and then let a AM24xx System start up (using MDIO manual mode).
In some cases, it seams one of two PHYs (DP83826E) provide wrong information, when reading direct MDIO registers. With a logic analyser we could see that the data really exists on the MDIO/MDC lines.
Additional information:
- it seams previous operation with fixed communication setting Duplexity + Speed increases the possibility of the issue, instead of autonegotiation.
- the PHY varies from issue to issue PHY1 or PHY2 can have it
- the value received by indirect access varies also, another time it was "0xFEFD"
Do you have an idea, what we can do to avoid this issue or you might have an idea in which cases the PHY coud send such data on direct request?
Can you have a look on the following MDIO communication log?
Start-up
W:DP83826e addr:2 regnum: 0x000D with 0x001F
W:DP83826e addr:2 regnum: 0x000E with 0x0467 <-- Set Register SOR1
W:DP83826e addr:2 regnum: 0x000D with 0x401F
R:DP83826e addr:2 regnum: 0x000E with 0x0008 --> Read SOR1 --> Strap3(CRS/LED3)high --> PHYADD1 = 1 --> PHY Address is 0x2
W:DP83826e addr:2 regnum: 0x000D with 0x001F
W:DP83826e addr:2 regnum: 0x000E with 0x0468 <-- Set Register SOR2
W:DP83826e addr:2 regnum: 0x000D with 0x401F
R:DP83826e addr:2 regnum: 0x000E with 0x26A7 --> Read SOR2 --> CFG_AN_1 |CFG_AN_0 | CFG_AN_EN | CFG_AMDIX | LED_SPEED_POL | CFG_LED_LINK_POL | LED_2_POLARITY | RESERVED
--> Reserved should not be set?
W:DP83826e addr:0 regnum: 0x000D with 0x001F
W:DP83826e addr:0 regnum: 0x000E with 0x0467 <-- Set Register SOR1
W:DP83826e addr:0 regnum: 0x000D with 0x401F
R:DP83826e addr:0 regnum: 0x000E with 0x0002 --> Read SOR1 --> Strap1(CLKOUT/LED1)high --> Odd Nibble Detection enabled --> PHY Address is 0x0
W:DP83826e addr:0 regnum: 0x000D with 0x001F
W:DP83826e addr:0 regnum: 0x000E with 0x0468 <-- Set Register SOR2
W:DP83826e addr:0 regnum: 0x000D with 0x401F
R:DP83826e addr:0 regnum: 0x000E with 0x2E87 --> Read SOR2 --> CFG_AN_1 |CFG_AN_0 | CFG_AN_EN | CFG_AMDIX | CFG_LED_LINK_POL | LED_2_POLARITY | LED_3_POLARITY | RESERVED
--> Reserved should not be set?
// PHY2 is working in this case
W:DP83826e addr:2 regnum: 0x000D with 0x001F
W:DP83826e addr:2 regnum: 0x000E with 0x0303 <-- Set Register LED0_GPIO_CFG
W:DP83826e addr:2 regnum: 0x000D with 0x401F
R:DP83826e addr:2 regnum: 0x000E with 0x0008 --> Read LED0_GPIO_CFG --> reserved value for cfg_led0_clk_sel (1h) but cfg_led0_gpio_ctrl (0) = LED0
W:DP83826e addr:2 regnum: 0x000D with 0x001F
W:DP83826e addr:2 regnum: 0x000E with 0x0303 <-- Set Register LED0_GPIO_CFG
W:DP83826e addr:2 regnum: 0x000D with 0x401F
W:DP83826e addr:2 regnum: 0x000E with 0x0008 --> write back with changes but kept reserved bits
W:DP83826e addr:2 regnum: 0x000D with 0x001F
W:DP83826e addr:2 regnum: 0x000E with 0x0025 <-- Set Register MLEDCR
W:DP83826e addr:2 regnum: 0x000D with 0x401F
R:DP83826e addr:2 regnum: 0x000E with 0x0041 --> Read MLEDCR cfg_mled_en 1h = Value routed as per MLEDCR[6:3] --> 8h = LINK OK / BLINK on TX/RX Activity
W:DP83826e addr:2 regnum: 0x000D with 0x001F
W:DP83826e addr:2 regnum: 0x000E with 0x0025 <-- Set Register MLEDCR
W:DP83826e addr:2 regnum: 0x000D with 0x401F
W:DP83826e addr:2 regnum: 0x000E with 0x0041 --> Write Register with same configuration
W:DP83826e addr:2 regnum: 0x000D with 0x001F
W:DP83826e addr:2 regnum: 0x000E with 0x0305 <-- Set Register LED2_GPIO_CFG
W:DP83826e addr:2 regnum: 0x000D with 0x401F
R:DP83826e addr:2 regnum: 0x000E with 0x000E --> Read LED2_GPIO_CFG !! Default should be 0x0008 but cfg_led2_gpio_ctr = COL is set
W:DP83826e addr:2 regnum: 0x000D with 0x001F
W:DP83826e addr:2 regnum: 0x000E with 0x0305 <-- Set Register LED2_GPIO_CFG
W:DP83826e addr:2 regnum: 0x000D with 0x401F
W:DP83826e addr:2 regnum: 0x000E with 0x0008 --> write cfg_led2_gpio_ctr = LED2
W:DP83826e addr:2 regnum: 0x000D with 0x001F
W:DP83826e addr:2 regnum: 0x000E with 0x0460 <-- Set LEDCFG Register
W:DP83826e addr:2 regnum: 0x000D with 0x401F
R:DP83826e addr:2 regnum: 0x000E with 0x0565 --> Get LEDCFG LED0=LinkOK | LED2=100BASETX | LED3=10BASE-T | 5h = RESERVED RESET !! Defaut should be 0x5665h but in case of a running device same data is provided
W:DP83826e addr:2 regnum: 0x000D with 0x001F
W:DP83826e addr:2 regnum: 0x000E with 0x0460 <-- Set LEDCFG Register
W:DP83826e addr:2 regnum: 0x000D with 0x401F
W:DP83826e addr:2 regnum: 0x000E with 0x0555 --> write LED0=LinkOK | LED2=100Base-TX | LED3=100BASE-TX | 5h = Reserved Reset
R:DP83826e addr:2 regnum: 0x0018 with 0x0480 --> Read 18h directly LED Link Polarity=active High(strapping) | Blink Rate = 5Hz
W:DP83826e addr:2 regnum: 0x0018 with 0x0480 --> Write 18h directly Polarity=active High(strapping) | Blink Rate = 5Hz
// PHY1 failing in this case
W:DP83826e addr:0 regnum: 0x000D with 0x001F
W:DP83826e addr:0 regnum: 0x000E with 0x0303 <-- Set Register LED0_GPIO_CFG
W:DP83826e addr:0 regnum: 0x000D with 0x401F
R:DP83826e addr:0 regnum: 0x000E with 0x0008 --> Read LED0_GPIO_CFG --> reserved value for cfg_led0_clk_sel (1h) but cfg_led0_gpio_ctrl (0) = LED0
W:DP83826e addr:0 regnum: 0x000D with 0x001F
W:DP83826e addr:0 regnum: 0x000E with 0x0303 <-- Set Register LED0_GPIO_CFG
W:DP83826e addr:0 regnum: 0x000D with 0x401F
W:DP83826e addr:0 regnum: 0x000E with 0x0008 --> write back with changes but kept reserved bits
W:DP83826e addr:0 regnum: 0x000D with 0x001F
W:DP83826e addr:0 regnum: 0x000E with 0x0025 <-- Set Register MLEDCR
W:DP83826e addr:0 regnum: 0x000D with 0x401F
R:DP83826e addr:0 regnum: 0x000E with 0x1DEF --> Read MLEDCR
!! Reserved Bits set. - unexpected data -----------/---------------------/---------------------/---------------/
W:DP83826e addr:0 regnum: 0x000D with 0x001F
W:DP83826e addr:0 regnum: 0x000E with 0x0025 <-- Set Register MLEDCR
W:DP83826e addr:0 regnum: 0x000D with 0x401F
W:DP83826e addr:0 regnum: 0x000E with 0x1DC7 --> Write back modified registers
!! Modified data is still bad, because only unreserved/used bits have been changed -----------/---------------------/---------------------/---------------/
W:DP83826e addr:0 regnum: 0x000D with 0x001F
W:DP83826e addr:0 regnum: 0x000E with 0x0305 <-- Set Register LED2_GPIO_CFG
W:DP83826e addr:0 regnum: 0x000D with 0x401F
R:DP83826e addr:0 regnum: 0x000E with 0x0008 --> Read LED2_GPIO_CFG with the expected default
W:DP83826e addr:0 regnum: 0x000D with 0x001F
W:DP83826e addr:0 regnum: 0x000E with 0x0305 <-- Set Register LED2_GPIO_CFG
W:DP83826e addr:0 regnum: 0x000D with 0x401F
W:DP83826e addr:0 regnum: 0x000E with 0x0008 --> Write back to LED2_GPIO_CFG
W:DP83826e addr:0 regnum: 0x000D with 0x001F
W:DP83826e addr:0 regnum: 0x000E with 0x0460 <-- Set LEDCFG Register
W:DP83826e addr:0 regnum: 0x000D with 0x401F
R:DP83826e addr:0 regnum: 0x000E with 0x0555 --> Read LEDCFG Register, not the reset default, but the value set by firmware
W:DP83826e addr:0 regnum: 0x000D with 0x001F
W:DP83826e addr:0 regnum: 0x000E with 0x0460 <-- Set LEDCFG Register
W:DP83826e addr:0 regnum: 0x000D with 0x401F
W:DP83826e addr:0 regnum: 0x000E with 0x0555 --> Write firmware defaults
R:DP83826e addr:0 regnum: 0x0018 with 0x1DEF --> Read LEDCR(18h) directly
--> Bad data Read -----------/--------------------/----------------------/---------------/
W:DP83826e addr:0 regnum: 0x0018 with 0x1DEF --> Write LEDCR(18h) directly
--> Modified data is still bad, because only unreserved/used bits have been changed -----------/--------------------/----------------------/---------------/
R:DP83826e addr:2 regnum: 0x0002 with 0x2000
R:DP83826e addr:2 regnum: 0x0003 with 0xA131
R:DP83826e addr:0 regnum: 0x0002 with 0x1DEF
--> Bad data Read -----------/--------------------/----------------------/---------------/
DP83826e addr:0 failed with 0x1DEF
ASSERT! --> Restart of the System repeatedly (no self repair due to soft restart)
