if (!state->link)
                return;
 
-       /* If in-band is disabled, then the advertisement data is not
-        * meaningful.
-        */
-       if (neg_mode != PHYLINK_PCS_NEG_INBAND_ENABLED)
-               return;
-
        switch (state->interface) {
        case PHY_INTERFACE_MODE_1000BASEX:
-               phylink_decode_c37_word(state, lpa, SPEED_1000);
+               if (neg_mode == PHYLINK_PCS_NEG_INBAND_ENABLED) {
+                       phylink_decode_c37_word(state, lpa, SPEED_1000);
+               } else {
+                       state->speed = SPEED_1000;
+                       state->duplex = DUPLEX_FULL;
+                       state->pause |= MLO_PAUSE_TX | MLO_PAUSE_RX;
+               }
                break;
 
        case PHY_INTERFACE_MODE_2500BASEX:
-               phylink_decode_c37_word(state, lpa, SPEED_2500);
+               if (neg_mode == PHYLINK_PCS_NEG_INBAND_ENABLED) {
+                       phylink_decode_c37_word(state, lpa, SPEED_2500);
+               } else {
+                       state->speed = SPEED_2500;
+                       state->duplex = DUPLEX_FULL;
+                       state->pause |= MLO_PAUSE_TX | MLO_PAUSE_RX;
+               }
                break;
 
        case PHY_INTERFACE_MODE_SGMII:
        case PHY_INTERFACE_MODE_QSGMII:
-               phylink_decode_sgmii_word(state, lpa);
+               if (neg_mode == PHYLINK_PCS_NEG_INBAND_ENABLED)
+                       phylink_decode_sgmii_word(state, lpa);
                break;
+
        case PHY_INTERFACE_MODE_QUSGMII:
-               phylink_decode_usgmii_word(state, lpa);
+               if (neg_mode == PHYLINK_PCS_NEG_INBAND_ENABLED)
+                       phylink_decode_usgmii_word(state, lpa);
                break;
 
        default: