/* Wait until PHY reset complete.
Report error if the reset status is not cleared for more than 0.1 second */
u32Delay = SystemCoreClock / 10;
while (--u32Delay)
{
u32Reg = EMAC_MdioRead(PHY_CNTL_REG, EMAC_PHY_ADDR) ;
u32Delay = SystemCoreClock; // Wait 1 second. Report error if link valid is not set
while (!(EMAC_MdioRead(PHY_STATUS_REG, EMAC_PHY_ADDR) & PHY_STATUS_LINK_VALID))
{
if (--u32Delay == 0) /* Cable not connected */
{
goto error;
}
}
/* Wait for auto-negotiation complete
Report error if auto-negotiation is not complete in 2 seconds */
u32Delay = SystemCoreClock * 2;
while (!(EMAC_MdioRead(PHY_STATUS_REG, EMAC_PHY_ADDR) & PHY_STATUS_AN_COMPLETE))
{
if (--u32Delay == 0)
{
goto error;
}
}
/* Check link valid again. There're some PHY chips need to re-check link valid
bit set after auto-t-negotiation complete before check partner capability.
Report error if link valid is not set after 1 second */
u32Delay = SystemCoreClock;
while (!(EMAC_MdioRead(PHY_STATUS_REG, EMAC_PHY_ADDR) & PHY_STATUS_LINK_VALID))
{
if (--u32Delay == 0)
{
goto error;
}
}