Hello NXP team,
we have custom T1042 board with SGMII connected to FPGA (SGMII core + MAC inside).
If autoneg is selected on FPGA side link fail to establish, if link is forced up on FPGA side it's possible to transmit data however frames pass only in T1042->FPGA direction, no frame can be received by T1042.
We've verified signals at physical layer - signals are of reference quality, no signal integrity issues.
From Linux side everything looks fine, link is described as "fixed" in device tree and ethtool report it up.
FPGA was tested by enabling loopback in FPGA's SedDes - link is up and MAC successfully receive own transmitted frames.
Honestly we have now idea how to debug this problem, maybe access to internal PSCPMA phy may help however standard Linux drivers do not expose it.
Thanks,
I've just discovered that when T1042 runs U-boot autonegotiation completes successfully but link go down after Linux start. This may confirm that hardware is ok.
Unfortunately I don't know how to force U-boot perform ping without real phy (it try to read link status and fail "link down"), anybody have idea if this is possible?
Concerning loopback. Originally I described "near-end" loopback in FPGA PMA so FPGA get back what it send. Just tried "far-end" loopback so T1042 should receive back what it send and the same problem - receive nothing, so it looks like T1042 cannot perform autonegotiation with itself when running Linux, will do further investigations.
Declaring a fixed link in the Device Tree just prevents the driver
from reading the status of the external PHY. In the current implementation, it
does not affect the on-chip PCS initialization at all, thus if the
other side of the connection does not support autonegotiation type
SGMII, it may fail to complete autoneg phase. Results depend on the
external device logic, T1040 can ignore this, what you actually seem
to observe.
Therefore, the first thing to check is the type of autonegotiation
your FPGA supports, if at all. Required software actions are specified
in Section 31.6 of T1040RM.
Since T1040 is able to receive what it sends when your FPGA is in
loopback mode, the link itself is operable in both directions and
the problem is in the FPGA. You need, however, to check how your
FPGA does this loopback, at the PMA level or at the PCS level. If
the FPGA PCS in involved in the loopback (means, PCS decodes and
re-encodes the code groups it receives), the problem is purely in
the FPGA logic.
On T1040 side, it would be helpful to read the on-chip PCS management
registers described in T1040RM, Section 3.5, but you have to use a
debugger to do that.
Have a great day,
Platon
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------