#define phylink_to_dpaa2_mac(config) \
        container_of((config), struct dpaa2_mac, phylink_config)
 
+#define DPMAC_PROTOCOL_CHANGE_VER_MAJOR                4
+#define DPMAC_PROTOCOL_CHANGE_VER_MINOR                8
+
+#define DPAA2_MAC_FEATURE_PROTOCOL_CHANGE      BIT(0)
+
+static int dpaa2_mac_cmp_ver(struct dpaa2_mac *mac,
+                            u16 ver_major, u16 ver_minor)
+{
+       if (mac->ver_major == ver_major)
+               return mac->ver_minor - ver_minor;
+       return mac->ver_major - ver_major;
+}
+
+static void dpaa2_mac_detect_features(struct dpaa2_mac *mac)
+{
+       mac->features = 0;
+
+       if (dpaa2_mac_cmp_ver(mac, DPMAC_PROTOCOL_CHANGE_VER_MAJOR,
+                             DPMAC_PROTOCOL_CHANGE_VER_MINOR) >= 0)
+               mac->features |= DPAA2_MAC_FEATURE_PROTOCOL_CHANGE;
+}
+
 static int phy_mode(enum dpmac_eth_if eth_if, phy_interface_t *if_mode)
 {
        *if_mode = PHY_INTERFACE_MODE_NA;
                goto err_close_dpmac;
        }
 
+       err = dpmac_get_api_version(mac->mc_io, 0, &mac->ver_major, &mac->ver_minor);
+       if (err) {
+               netdev_err(net_dev, "dpmac_get_api_version() = %d\n", err);
+               goto err_close_dpmac;
+       }
+
+       dpaa2_mac_detect_features(mac);
+
        /* Find the device node representing the MAC device and link the device
         * behind the associated netdev to it.
         */