+ bgmac->cmn = core->bus->drv_gmac_cmn.core;
+
+- bgmac->phyaddr = core->core_unit ? sprom->et1phyaddr :
+- sprom->et0phyaddr;
++ /*
++ * Too much can go wrong in scanning MDC/MDIO playing "whos my phy?" .
++ * Instead, explicitly use the phy address 30.
++ */
++ if (ci->id == BCMA_CHIP_ID_BCM4707 || ci->id == BCMA_CHIP_ID_BCM53018)
++ bgmac->phyaddr = BGMAC_PHY_NOREGS;
++ else
++ bgmac->phyaddr = core->core_unit ? sprom->et1phyaddr :
++ sprom->et0phyaddr;
++
+ bgmac->phyaddr &= BGMAC_PHY_MASK;
+ if (bgmac->phyaddr == BGMAC_PHY_MASK) {
+ bgmac_err(bgmac, "No PHY found\n");
+@@ -1423,6 +1458,27 @@ static int bgmac_probe(struct bcma_devic