#define MVPP22_XLG_CTRL0_REG                   0x100
 #define     MVPP22_XLG_CTRL0_PORT_EN           BIT(0)
 #define     MVPP22_XLG_CTRL0_MAC_RESET_DIS     BIT(1)
+#define     MVPP22_XLG_CTRL0_FORCE_LINK_DOWN   BIT(2)
+#define     MVPP22_XLG_CTRL0_FORCE_LINK_PASS   BIT(3)
 #define     MVPP22_XLG_CTRL0_RX_FLOW_CTRL_EN   BIT(7)
 #define     MVPP22_XLG_CTRL0_TX_FLOW_CTRL_EN   BIT(8)
 #define     MVPP22_XLG_CTRL0_MIB_CNT_DIS       BIT(14)
 
 
        /* Make sure the port is disabled when reconfiguring the mode */
        mvpp2_port_disable(port);
+
        if (port->priv->hw_version == MVPP22 && change_interface) {
                mvpp22_gop_mask_irq(port);
 
        struct mvpp2_port *port = netdev_priv(dev);
        u32 val;
 
-       if (!phylink_autoneg_inband(mode) && !mvpp2_is_xlg(interface)) {
-               val = readl(port->base + MVPP2_GMAC_AUTONEG_CONFIG);
-               val &= ~MVPP2_GMAC_FORCE_LINK_DOWN;
-               val |= MVPP2_GMAC_FORCE_LINK_PASS;
-               writel(val, port->base + MVPP2_GMAC_AUTONEG_CONFIG);
+       if (!phylink_autoneg_inband(mode)) {
+               if (mvpp2_is_xlg(interface)) {
+                       val = readl(port->base + MVPP22_XLG_CTRL0_REG);
+                       val &= ~MVPP22_XLG_CTRL0_FORCE_LINK_DOWN;
+                       val |= MVPP22_XLG_CTRL0_FORCE_LINK_PASS;
+                       writel(val, port->base + MVPP22_XLG_CTRL0_REG);
+               } else {
+                       val = readl(port->base + MVPP2_GMAC_AUTONEG_CONFIG);
+                       val &= ~MVPP2_GMAC_FORCE_LINK_DOWN;
+                       val |= MVPP2_GMAC_FORCE_LINK_PASS;
+                       writel(val, port->base + MVPP2_GMAC_AUTONEG_CONFIG);
+               }
        }
 
        mvpp2_port_enable(port);
        struct mvpp2_port *port = netdev_priv(dev);
        u32 val;
 
-       if (!phylink_autoneg_inband(mode) && !mvpp2_is_xlg(interface)) {
-               val = readl(port->base + MVPP2_GMAC_AUTONEG_CONFIG);
-               val &= ~MVPP2_GMAC_FORCE_LINK_PASS;
-               val |= MVPP2_GMAC_FORCE_LINK_DOWN;
-               writel(val, port->base + MVPP2_GMAC_AUTONEG_CONFIG);
+       if (!phylink_autoneg_inband(mode)) {
+               if (mvpp2_is_xlg(interface)) {
+                       val = readl(port->base + MVPP22_XLG_CTRL0_REG);
+                       val &= ~MVPP22_XLG_CTRL0_FORCE_LINK_PASS;
+                       val |= MVPP22_XLG_CTRL0_FORCE_LINK_DOWN;
+                       writel(val, port->base + MVPP22_XLG_CTRL0_REG);
+               } else {
+                       val = readl(port->base + MVPP2_GMAC_AUTONEG_CONFIG);
+                       val &= ~MVPP2_GMAC_FORCE_LINK_PASS;
+                       val |= MVPP2_GMAC_FORCE_LINK_DOWN;
+                       writel(val, port->base + MVPP2_GMAC_AUTONEG_CONFIG);
+               }
        }
 
        netif_tx_stop_all_queues(dev);