03-23-2015 05:04 PM
Hello,
I'm testing out SGMII interface in a board with ZynQ 7045 and Marvel PHY. The idea is to connect the SGMII interface to EMAC through EMIO. "Ethernet 1000BASE-X PCS/PMA or SGMII" core is used as SGMII to GMII bridge. The SGMII signals are connected to device specific transceiver and SGMII is configured to be in MAC mode with autonegotiation. The shared logic is inside the core.
Now, when I power up the board, the status_vector of the core is 0x0810
Link status - 0
Link synchronization - 0
RUDI(invalid) - 1
PHY link status - 0
Duplex - 0 (Half Duplex)
And when the Marvel PHY is switched to SGMII mode, the status_vector changes to 0x388b
Link status - 1 - OK
Link Synchronization - 1 - OK
RUDI(/I/) - 1 - OK
PHY link status - 1 - OK
Speed - 1000 Mbps - OK
Duplex Mode - 1 (Full duplex) - OK
Remote fault - 1 - NOT OK
Remote fault endoing - 00
What works?
PHY and SGMII core is configured to auto negotiate and Auto negotiation is successful(bits 0, 1, 3). PHY is able to communicate through SGMII to the SGMII core in ZynQ. The link partner status is getting reflected in the status_vector - like unplugging/ plugging the cable.
What doesn't work?
The remote fault bit is getting set and not able to transmit/ receive data. The remote fault encoding info is "00" which means the link is OK. So not sure why this bit is getting set?
Any suggestion/ pointers would help?
03-24-2015 02:08 PM
Hi
Are you disabling the isolate state at power on either using the configuration vector or MDIO?
03-24-2015 05:41 AM
what device is the link partner?
03-24-2015 08:49 AM
The copper link partner is a netgear based NIC in a PC. I tested the external loopback and it is fine.
The internal loopback doesn't work. I chipscope and see the data sent from gmii to the sgmii core. But it doesn't make it to the other end. Similarly I tried transmitting packet from PHY to the MAC through SGMII and I don't see any activity on the GMII RX lines.
The SGMII works because the control information is exchanged between PHY and the core during auto negotiation. So looks like I could be missing some setting? But I don't see any specific MDIO register setting in the SGMII core that I need to enable.
03-24-2015 12:32 PM
Hi
The Remote fault bit is a latching high status bit and you need to read the register 1 to clear it and show the current status.
Also the internal loopback using the configuration vector sends idles and doesn't loopback the original data being transmitter on the GMII TX interface.
03-24-2015 01:44 PM
Hi Satish,
OK, I read that in the pg047 but wasn't sure if that's the case.
By internal loopback I meant internal loopback on the Marvel PHY. GMII TX -> SGMII TX -> PHY -> SGMII RX -> GMII RX
The real problem is I can't transmit/ receive. When I transmit I observe GMII TX but packet never gets to the link partner and when I transmit something from the link partner it nerver gets to the GMII RX. Ideally I would probe the signal lines but I cannot do it with SGMII.
Any pointers?
03-24-2015 02:08 PM
Hi
Are you disabling the isolate state at power on either using the configuration vector or MDIO?
03-24-2015 03:31 PM
Yes isolate bit is driven low in the configuration_vector. and gmii_isolate stays low.
03-24-2015 05:50 PM
Hi Satish,
GMII isolate was the problem. Wasn't setting the configuration_valid properly.
Thank you.