rc = phy_device_register(phy);
        if (rc) {
                phy_device_free(phy);
+               dev_err(&mdio->dev, "registered phy fail at address %i\n",
+                       addr);
                return -ENODEV;
        }
 
        return 0;
 }
 
-static void hns_mac_register_phy(struct hns_mac_cb *mac_cb)
+static int hns_mac_register_phy(struct hns_mac_cb *mac_cb)
 {
        struct acpi_reference_args args;
        struct platform_device *pdev;
 
        /* Loop over the child nodes and register a phy_device for each one */
        if (!to_acpi_device_node(mac_cb->fw_port))
-               return;
+               return -ENODEV;
 
        rc = acpi_node_get_property_reference(
                        mac_cb->fw_port, "mdio-node", 0, &args);
        if (rc)
-               return;
+               return rc;
 
        addr = hns_mac_phy_parse_addr(mac_cb->dev, mac_cb->fw_port);
        if (addr < 0)
-               return;
+               return addr;
 
        /* dev address in adev */
        pdev = hns_dsaf_find_platform_device(acpi_fwnode_handle(args.adev));
+       if (!pdev) {
+               dev_err(mac_cb->dev, "mac%d mdio pdev is NULL\n",
+                       mac_cb->mac_id);
+               return  -EINVAL;
+       }
+
        mii_bus = platform_get_drvdata(pdev);
+       if (!mii_bus) {
+               dev_err(mac_cb->dev,
+                       "mac%d mdio is NULL, dsaf will probe again later\n",
+                       mac_cb->mac_id);
+               return -EPROBE_DEFER;
+       }
+
        rc = hns_mac_register_phydev(mii_bus, mac_cb, addr);
        if (!rc)
                dev_dbg(mac_cb->dev, "mac%d register phy addr:%d\n",
                        mac_cb->mac_id, addr);
+
+       return rc;
 }
 
 #define MAC_MEDIA_TYPE_MAX_LEN         16
  *@np:device node
  * return: 0 --success, negative --fail
  */
-static int  hns_mac_get_info(struct hns_mac_cb *mac_cb)
+static int hns_mac_get_info(struct hns_mac_cb *mac_cb)
 {
        struct device_node *np;
        struct regmap *syscon;
                        }
                }
        } else if (is_acpi_node(mac_cb->fw_port)) {
-               hns_mac_register_phy(mac_cb);
+               ret = hns_mac_register_phy(mac_cb);
+               /*
+                * Mac can work well if there is phy or not.If the port don't
+                * connect with phy, the return value will be ignored. Only
+                * when there is phy but can't find mdio bus, the return value
+                * will be handled.
+                */
+               if (ret == -EPROBE_DEFER)
+                       return ret;
        } else {
                dev_err(mac_cb->dev, "mac%d cannot find phy node\n",
                        mac_cb->mac_id);
                        dsaf_dev->mac_cb[port_id] = mac_cb;
                }
        }
+
        /* init mac_cb for all port */
        for (port_id = 0; port_id < max_port_num; port_id++) {
                mac_cb = dsaf_dev->mac_cb[port_id];
                ret = hns_mac_get_cfg(dsaf_dev, mac_cb);
                if (ret)
                        return ret;
+
                ret = hns_mac_init_ex(mac_cb);
                if (ret)
                        return ret;