/* When we manage the MAC/PHY using phylink there is no need
         * to manually update the netif_carrier.
         */
-       if (priv->mac)
+       if (dpaa2_eth_is_type_phy(priv))
                goto out;
 
        /* Chech link state; speed / duplex changes are not treated yet */
                           priv->dpbp_dev->obj_desc.id, priv->bpid);
        }
 
-       if (!priv->mac) {
+       if (!dpaa2_eth_is_type_phy(priv)) {
                /* We'll only start the txqs when the link is actually ready;
                 * make sure we don't race against the link up notification,
                 * which may come immediately after dpni_enable();
                goto enable_err;
        }
 
-       if (priv->mac)
+       if (dpaa2_eth_is_type_phy(priv))
                phylink_start(priv->mac->phylink);
 
        return 0;
        int dpni_enabled = 0;
        int retries = 10;
 
-       if (!priv->mac) {
+       if (dpaa2_eth_is_type_phy(priv)) {
+               phylink_stop(priv->mac->phylink);
+       } else {
                netif_tx_stop_all_queues(net_dev);
                netif_carrier_off(net_dev);
-       } else {
-               phylink_stop(priv->mac->phylink);
        }
 
        /* On dpni_disable(), the MC firmware will:
        if (cmd == SIOCSHWTSTAMP)
                return dpaa2_eth_ts_ioctl(dev, rq, cmd);
 
-       if (priv->mac)
+       if (dpaa2_eth_is_type_phy(priv))
                return phylink_mii_ioctl(priv->mac->phylink, rq, cmd);
 
        return -EOPNOTSUPP;
        if (IS_ERR_OR_NULL(dpmac_dev) || dpmac_dev->dev.type != &fsl_mc_bus_dpmac_type)
                return 0;
 
-       if (dpaa2_mac_is_type_fixed(dpmac_dev, priv->mc_io))
-               return 0;
-
        mac = kzalloc(sizeof(struct dpaa2_mac), GFP_KERNEL);
        if (!mac)
                return -ENOMEM;
        err = dpaa2_mac_open(mac);
        if (err)
                goto err_free_mac;
+       priv->mac = mac;
 
-       err = dpaa2_mac_connect(mac);
-       if (err) {
-               netdev_err(priv->net_dev, "Error connecting to the MAC endpoint\n");
-               goto err_close_mac;
+       if (dpaa2_eth_is_type_phy(priv)) {
+               err = dpaa2_mac_connect(mac);
+               if (err) {
+                       netdev_err(priv->net_dev, "Error connecting to the MAC endpoint\n");
+                       goto err_close_mac;
+               }
        }
-       priv->mac = mac;
 
        return 0;
 
 err_close_mac:
        dpaa2_mac_close(mac);
+       priv->mac = NULL;
 err_free_mac:
        kfree(mac);
        return err;
 
 static void dpaa2_eth_disconnect_mac(struct dpaa2_eth_priv *priv)
 {
-       if (!priv->mac)
-               return;
+       if (dpaa2_eth_is_type_phy(priv))
+               dpaa2_mac_disconnect(priv->mac);
 
-       dpaa2_mac_disconnect(priv->mac);
        dpaa2_mac_close(priv->mac);
        kfree(priv->mac);
        priv->mac = NULL;
                dpaa2_eth_update_tx_fqids(priv);
 
                rtnl_lock();
-               if (priv->mac)
+               if (dpaa2_eth_has_mac(priv))
                        dpaa2_eth_disconnect_mac(priv);
                else
                        dpaa2_eth_connect_mac(priv);
 
        return priv->tx_data_offset - DPAA2_ETH_RX_HWA_SIZE;
 }
 
+static inline bool dpaa2_eth_is_type_phy(struct dpaa2_eth_priv *priv)
+{
+       if (priv->mac && priv->mac->attr.link_type == DPMAC_LINK_TYPE_PHY)
+               return true;
+
+       return false;
+}
+
+static inline bool dpaa2_eth_has_mac(struct dpaa2_eth_priv *priv)
+{
+       return priv->mac ? true : false;
+}
+
 int dpaa2_eth_set_hash(struct net_device *net_dev, u64 flags);
 int dpaa2_eth_set_cls(struct net_device *net_dev, u64 key);
 int dpaa2_eth_cls_key_size(u64 key);
 
 {
        struct dpaa2_eth_priv *priv = netdev_priv(net_dev);
 
-       if (priv->mac)
+       if (dpaa2_eth_is_type_phy(priv))
                return phylink_ethtool_nway_reset(priv->mac->phylink);
 
        return -EOPNOTSUPP;
 {
        struct dpaa2_eth_priv *priv = netdev_priv(net_dev);
 
-       if (priv->mac)
+       if (dpaa2_eth_is_type_phy(priv))
                return phylink_ethtool_ksettings_get(priv->mac->phylink,
                                                     link_settings);
 
 {
        struct dpaa2_eth_priv *priv = netdev_priv(net_dev);
 
-       if (!priv->mac)
+       if (!dpaa2_eth_is_type_phy(priv))
                return -ENOTSUPP;
 
        return phylink_ethtool_ksettings_set(priv->mac->phylink, link_settings);
        struct dpaa2_eth_priv *priv = netdev_priv(net_dev);
        u64 link_options = priv->link_state.options;
 
-       if (priv->mac) {
+       if (dpaa2_eth_is_type_phy(priv)) {
                phylink_ethtool_get_pauseparam(priv->mac->phylink, pause);
                return;
        }
                return -EOPNOTSUPP;
        }
 
-       if (priv->mac)
+       if (dpaa2_eth_is_type_phy(priv))
                return phylink_ethtool_set_pauseparam(priv->mac->phylink,
                                                      pause);
        if (pause->autoneg)
                        strlcpy(p, dpaa2_ethtool_extras[i], ETH_GSTRING_LEN);
                        p += ETH_GSTRING_LEN;
                }
-               if (priv->mac)
+               if (dpaa2_eth_has_mac(priv))
                        dpaa2_mac_get_strings(p);
                break;
        }
 
        switch (sset) {
        case ETH_SS_STATS: /* ethtool_get_stats(), ethtool_get_drvinfo() */
-               if (priv->mac)
+               if (dpaa2_eth_has_mac(priv))
                        num_ss_stats += dpaa2_mac_get_sset_count();
                return num_ss_stats;
        default:
        }
        *(data + i++) = buf_cnt;
 
-       if (priv->mac)
+       if (dpaa2_eth_has_mac(priv))
                dpaa2_mac_get_ethtool_stats(priv->mac, data + i);
 }
 
 
        .mac_link_down = dpaa2_mac_link_down,
 };
 
-bool dpaa2_mac_is_type_fixed(struct fsl_mc_device *dpmac_dev,
-                            struct fsl_mc_io *mc_io)
-{
-       struct dpmac_attr attr;
-       bool fixed = false;
-       u16 mc_handle = 0;
-       int err;
-
-       err = dpmac_open(mc_io, 0, dpmac_dev->obj_desc.id,
-                        &mc_handle);
-       if (err || !mc_handle)
-               return false;
-
-       err = dpmac_get_attributes(mc_io, 0, mc_handle, &attr);
-       if (err)
-               goto out;
-
-       if (attr.link_type == DPMAC_LINK_TYPE_FIXED)
-               fixed = true;
-
-out:
-       dpmac_close(mc_io, 0, mc_handle);
-
-       return fixed;
-}
-
 static int dpaa2_pcs_create(struct dpaa2_mac *mac,
                            struct device_node *dpmac_node, int id)
 {