- // Wait for PHY ready
- timer_delay(255);
-
-#if 0 // debug test
- for (;;)
- {
- for (i = 0; i < 32; i++)
- {
- // Clear MII isolate.
- phy_hw_read(i, NIC_PHY_BMCR);
- phy_cr = phy_hw_read(i, NIC_PHY_BMCR);
-
- phy_cr &= ~NIC_PHY_BMCR_ISOLATE;
- phy_hw_write(i, NIC_PHY_BMCR, phy_cr);
-
- phy_cr = phy_hw_read(i, NIC_PHY_BMCR);
-
- LOG_INFO("%s: PHY ID %d %#04x %#04x\n",
- __func__, i,
- phy_hw_read(i, NIC_PHY_ID1), phy_hw_read(i, NIC_PHY_ID2));
- }
- timer_delay(1000);
- }
-#endif
-
- // Clear MII isolate.
- phy_hw_read(NIC_PHY_ADDR, NIC_PHY_BMCR);
- phy_cr = phy_hw_read(NIC_PHY_ADDR, NIC_PHY_BMCR);
-
- phy_cr &= ~NIC_PHY_BMCR_ISOLATE;
- phy_hw_write(NIC_PHY_ADDR, NIC_PHY_BMCR, phy_cr);
-
- phy_cr = phy_hw_read(NIC_PHY_ADDR, NIC_PHY_BMCR);
-
- LOG_INFO("%s: PHY ID %#04x %#04x\n",
- __func__,
- phy_hw_read(NIC_PHY_ADDR, NIC_PHY_ID1), phy_hw_read(NIC_PHY_ADDR, NIC_PHY_ID2));
-
- // Wait for auto negotiation completed.
- phy_hw_read(NIC_PHY_ADDR, NIC_PHY_BMSR);
- for (;;)
- {
- if (phy_hw_read(NIC_PHY_ADDR, NIC_PHY_BMSR) & NIC_PHY_BMSR_ANCOMPL)
- break;
- cpu_relax();
- }