@@ -737,10 +737,9 @@ static int fec_enet_mii_init(struct platform_device *pdev)
fep->mii_timeout = 0;
/*
- * Set MII speed to 2.5 MHz
+ * Set MII speed to 2.5 MHz (= clk_get_rate() / 2 * phy_speed)
*/
- fep->phy_speed = ((((clk_get_rate(fep->clk) / 2 + 4999999)
- / 2500000) / 2) & 0x3F) << 1;
+ fep->phy_speed = DIV_ROUND_UP(clk_get_rate(fep->clk), 5000000) << 1;
writel(fep->phy_speed, fep->hwp + FEC_MII_SPEED);
fep->mii_bus = mdiobus_alloc();
@@ -1121,10 +1120,6 @@ int __init fec_enet_init(struct net_device *dev, int index)
dev->netdev_ops = &fec_netdev_ops;
dev->ethtool_ops = &fec_enet_ethtool_ops;
- /* Set MII speed to 2.5 MHz */
- fep->phy_speed = ((((clk_get_rate(fep->clk) / 2 + 4999999)
- / 2500000) / 2) & 0x3F) << 1;
-
/* Initialize the receive buffer descriptors. */
bdp = fep->rx_bd_base;
for (i = 0; i < RX_RING_SIZE; i++) {
BugLink: http://bugs.launchpad.net/bugs/546649 BugLink: http://bugs.launchpad.net/bugs/457878 - remove duplicated phy_speed caculation - fix the phy_speed caculation according to the DataSheet Signed-off-by: Bryan Wu <bryan.wu@canonical.com> --- drivers/net/fec.c | 9 ++------- 1 files changed, 2 insertions(+), 7 deletions(-)