|
@@ -462,33 +462,6 @@ void phy_stop_machine(struct phy_device *phydev)
|
|
|
phydev->adjust_state = NULL;
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * phy_force_reduction - reduce PHY speed/duplex settings by one step
|
|
|
- * @phydev: target phy_device struct
|
|
|
- *
|
|
|
- * Description: Reduces the speed/duplex settings by one notch,
|
|
|
- * in this order--
|
|
|
- * 1000/FULL, 1000/HALF, 100/FULL, 100/HALF, 10/FULL, 10/HALF.
|
|
|
- * The function bottoms out at 10/HALF.
|
|
|
- */
|
|
|
-static void phy_force_reduction(struct phy_device *phydev)
|
|
|
-{
|
|
|
- int idx;
|
|
|
-
|
|
|
- idx = phy_find_setting(phydev->speed, phydev->duplex);
|
|
|
-
|
|
|
- idx++;
|
|
|
-
|
|
|
- idx = phy_find_valid(idx, phydev->supported);
|
|
|
-
|
|
|
- phydev->speed = settings[idx].speed;
|
|
|
- phydev->duplex = settings[idx].duplex;
|
|
|
-
|
|
|
- pr_info("Trying %d/%s\n",
|
|
|
- phydev->speed, DUPLEX_FULL == phydev->duplex ? "FULL" : "HALF");
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
/**
|
|
|
* phy_error - enter HALTED state for this PHY device
|
|
|
* @phydev: target phy_device struct
|
|
@@ -818,30 +791,11 @@ void phy_state_machine(struct work_struct *work)
|
|
|
phydev->adjust_link(phydev->attached_dev);
|
|
|
|
|
|
} else if (0 == phydev->link_timeout--) {
|
|
|
- int idx;
|
|
|
-
|
|
|
needs_aneg = 1;
|
|
|
/* If we have the magic_aneg bit,
|
|
|
* we try again */
|
|
|
if (phydev->drv->flags & PHY_HAS_MAGICANEG)
|
|
|
break;
|
|
|
-
|
|
|
- /* The timer expired, and we still
|
|
|
- * don't have a setting, so we try
|
|
|
- * forcing it until we find one that
|
|
|
- * works, starting from the fastest speed,
|
|
|
- * and working our way down */
|
|
|
- idx = phy_find_valid(0, phydev->supported);
|
|
|
-
|
|
|
- phydev->speed = settings[idx].speed;
|
|
|
- phydev->duplex = settings[idx].duplex;
|
|
|
-
|
|
|
- phydev->autoneg = AUTONEG_DISABLE;
|
|
|
-
|
|
|
- pr_info("Trying %d/%s\n",
|
|
|
- phydev->speed,
|
|
|
- DUPLEX_FULL == phydev->duplex ?
|
|
|
- "FULL" : "HALF");
|
|
|
}
|
|
|
break;
|
|
|
case PHY_NOLINK:
|
|
@@ -866,10 +820,8 @@ void phy_state_machine(struct work_struct *work)
|
|
|
phydev->state = PHY_RUNNING;
|
|
|
netif_carrier_on(phydev->attached_dev);
|
|
|
} else {
|
|
|
- if (0 == phydev->link_timeout--) {
|
|
|
- phy_force_reduction(phydev);
|
|
|
+ if (0 == phydev->link_timeout--)
|
|
|
needs_aneg = 1;
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
phydev->adjust_link(phydev->attached_dev);
|