phy_interface_t interface)
 {
        struct stmmac_priv *priv = netdev_priv(to_net_dev(config->dev));
+       struct phylink_pcs *pcs;
+
+       if (priv->plat->select_pcs) {
+               pcs = priv->plat->select_pcs(priv, interface);
+               if (!IS_ERR(pcs))
+                       return pcs;
+       }
 
        if (priv->hw->xpcs)
                return &priv->hw->xpcs->pcs;
 
 #define __STMMAC_PLATFORM_DATA
 
 #include <linux/platform_device.h>
-#include <linux/phy.h>
+#include <linux/phylink.h>
 
 #define MTL_MAX_RX_QUEUES      8
 #define MTL_MAX_TX_QUEUES      8
        void (*dump_debug_regs)(void *priv);
        int (*pcs_init)(struct stmmac_priv *priv);
        void (*pcs_exit)(struct stmmac_priv *priv);
+       struct phylink_pcs *(*select_pcs)(struct stmmac_priv *priv,
+                                         phy_interface_t interface);
        void *bsp_priv;
        struct clk *stmmac_clk;
        struct clk *pclk;