linkmode_copy(supported, phy->supported);
        linkmode_copy(config.advertising, phy->advertising);
 
-       /* Clause 45 PHYs switch their Serdes lane between several different
-        * modes, normally 10GBASE-R, SGMII. Some use 2500BASE-X for 2.5G
-        * speeds. We really need to know which interface modes the PHY and
-        * MAC supports to properly work out which linkmodes can be supported.
+       /* Check whether we would use rate matching for the proposed interface
+        * mode.
         */
-       if (phy->is_c45 &&
+       config.rate_matching = phy_get_rate_matching(phy, interface);
+
+       /* Clause 45 PHYs may switch their Serdes lane between, e.g. 10GBASE-R,
+        * 5GBASE-R, 2500BASE-X and SGMII if they are not using rate matching.
+        * For some interface modes (e.g. RXAUI, XAUI and USXGMII) switching
+        * their Serdes is either unnecessary or not reasonable.
+        *
+        * For these which switch interface modes, we really need to know which
+        * interface modes the PHY supports to properly work out which ethtool
+        * linkmodes can be supported. For now, as a work-around, we validate
+        * against all interface modes, which may lead to more ethtool link
+        * modes being advertised than are actually supported.
+        */
+       if (phy->is_c45 && config.rate_matching == RATE_MATCH_NONE &&
            interface != PHY_INTERFACE_MODE_RXAUI &&
            interface != PHY_INTERFACE_MODE_XAUI &&
            interface != PHY_INTERFACE_MODE_USXGMII)
                config.interface = PHY_INTERFACE_MODE_NA;
        else
                config.interface = interface;
-       config.rate_matching = phy_get_rate_matching(phy, config.interface);
 
        ret = phylink_validate(pl, supported, &config);
        if (ret) {