Documentation/devicetree/bindings/net/ethernet.txt
                          for details.
 
+- mii-bus              : Should be a phandle to a valid MDIO bus device node.
+                         This mii-bus will be used in preference to the
+                         global dsa,mii-bus defined above, for this switch.
+
 Optional subnodes:
 - fixed-link           : Fixed-link subnode describing a link to a non-MDIO
                          managed entity. See
                        #address-cells = <1>;
                        #size-cells = <0>;
                        reg = <17 1>;   /* MDIO address 17, switch 1 in tree */
+                       mii-bus = <&mii_bus1>;
 
                        switch1uplink: port@0 {
                                reg = <0>;
 
 {
        struct device_node *np = dev->of_node;
        struct device_node *child, *mdio, *ethernet, *port, *link;
-       struct mii_bus *mdio_bus;
+       struct mii_bus *mdio_bus, *mdio_bus_switch;
        struct net_device *ethernet_dev;
        struct dsa_platform_data *pd;
        struct dsa_chip_data *cd;
                if (!of_property_read_u32(child, "eeprom-length", &eeprom_len))
                        cd->eeprom_len = eeprom_len;
 
+               mdio = of_parse_phandle(child, "mii-bus", 0);
+               if (mdio) {
+                       mdio_bus_switch = of_mdio_find_bus(mdio);
+                       if (!mdio_bus_switch) {
+                               ret = -EPROBE_DEFER;
+                               goto out_free_chip;
+                       }
+                       cd->host_dev = &mdio_bus_switch->dev;
+               }
+
                for_each_available_child_of_node(child, port) {
                        port_reg = of_get_property(port, "reg", NULL);
                        if (!port_reg)