phylink_autoneg_inband(pl->cur_link_an_mode)) {
                if (pl->pcs_ops)
                        pl->pcs_ops->pcs_an_restart(pl->pcs);
-               else
+               else if (pl->config->legacy_pre_march2020)
                        pl->mac_ops->mac_an_restart(pl->config);
        }
 }
        if (test_bit(PHYLINK_DISABLE_STOPPED, &pl->phylink_disable_state))
                return 0;
 
-       if (!pl->pcs_ops) {
+       if (!pl->pcs_ops && pl->config->legacy_pre_march2020) {
                /* Legacy method */
                phylink_mac_config(pl, &pl->link_config);
                phylink_mac_pcs_an_restart(pl);
 
        if (pl->pcs_ops)
                pl->pcs_ops->pcs_get_state(pl->pcs, state);
-       else if (pl->mac_ops->mac_pcs_get_state)
+       else if (pl->mac_ops->mac_pcs_get_state &&
+                pl->config->legacy_pre_march2020)
                pl->mac_ops->mac_pcs_get_state(pl->config, state);
        else
                state->link = 0;
                        }
                        phylink_major_config(pl, false, &link_state);
                        pl->link_config.interface = link_state.interface;
-               } else if (!pl->pcs_ops) {
+               } else if (!pl->pcs_ops && pl->config->legacy_pre_march2020) {
                        /* The interface remains unchanged, only the speed,
                         * duplex or pause settings have changed. Call the
                         * old mac_config() method to configure the MAC/PCS
-                        * only if we do not have a PCS installed (an
-                        * unconverted user.)
+                        * only if we do not have a legacy MAC driver.
                         */
                        phylink_mac_config(pl, &link_state);
                }
 
  * negotiation completion state in @state->an_complete, and link up state
  * in @state->link. If possible, @state->lp_advertising should also be
  * populated.
+ *
+ * Note: This is a legacy method. This function will not be called unless
+ * legacy_pre_march2020 is set in &struct phylink_config and there is no
+ * PCS attached.
  */
 void mac_pcs_get_state(struct phylink_config *config,
                       struct phylink_link_state *state);
  * guaranteed to be correct, and so any mac_config() implementation must
  * never reference these fields.
  *
+ * Note: For legacy March 2020 drivers (drivers with legacy_pre_march2020 set
+ * in their &phylnk_config and which don't have a PCS), this function will be
+ * called on each link up event, and to also change the in-band advert. For
+ * non-legacy drivers, it will only be called to reconfigure the MAC for a
+ * "major" change in e.g. interface mode. It will not be called for changes
+ * in speed, duplex or pause modes or to change the in-band advertisement.
+ * In any case, it is strongly preferred that speed, duplex and pause settings
+ * are handled in the mac_link_up() method and not in this method.
+ *
  * (this requires a rewrite - please refer to mac_link_up() for situations
  *  where the PCS and MAC are not tightly integrated.)
  *
 /**
  * mac_an_restart() - restart 802.3z BaseX autonegotiation
  * @config: a pointer to a &struct phylink_config.
+ *
+ * Note: This is a legacy method. This function will not be called unless
+ * legacy_pre_march2020 is set in &struct phylink_config and there is no
+ * PCS attached.
  */
 void mac_an_restart(struct phylink_config *config);