and must therefore be appropriately determined based on all PHY
       requirements (maximum value of all per-PHY RESET pulse widths).
 
+  clock-frequency:
+    description:
+      Desired MDIO bus clock frequency in Hz. Values greater than IEEE 802.3
+      defined 2.5MHz should only be used when all devices on the bus support
+      the given clock speed.
+
 patternProperties:
   "^ethernet-phy@[0-9a-f]+$":
     type: object
 
        struct device_node *node;
        int err = -ENXIO;
        u32 mii_speed, holdtime;
+       u32 bus_freq;
 
        /*
         * The i.MX28 dual fec interfaces are not equal.
                return -ENOENT;
        }
 
+       bus_freq = 2500000; /* 2.5MHz by default */
+       node = of_get_child_by_name(pdev->dev.of_node, "mdio");
+       if (node)
+               of_property_read_u32(node, "clock-frequency", &bus_freq);
+
        /*
-        * Set MII speed to 2.5 MHz (= clk_get_rate() / 2 * phy_speed)
+        * Set MII speed (= clk_get_rate() / 2 * phy_speed)
         *
         * The formula for FEC MDC is 'ref_freq / (MII_SPEED x 2)' while
         * for ENET-MAC is 'ref_freq / ((MII_SPEED + 1) x 2)'.  The i.MX28
         * Reference Manual has an error on this, and gets fixed on i.MX6Q
         * document.
         */
-       mii_speed = DIV_ROUND_UP(clk_get_rate(fep->clk_ipg), 5000000);
+       mii_speed = DIV_ROUND_UP(clk_get_rate(fep->clk_ipg), bus_freq * 2);
        if (fep->quirks & FEC_QUIRK_ENET_MAC)
                mii_speed--;
        if (mii_speed > 63) {
        fep->mii_bus->priv = fep;
        fep->mii_bus->parent = &pdev->dev;
 
-       node = of_get_child_by_name(pdev->dev.of_node, "mdio");
        err = of_mdiobus_register(fep->mii_bus, node);
        of_node_put(node);
        if (err)