__ETHTOOL_LINK_MODE_MASK_NBITS);
 }
 
-static int macb_mac_link_state(struct phylink_config *config,
-                              struct phylink_link_state *state)
+static void macb_mac_pcs_get_state(struct phylink_config *config,
+                                  struct phylink_link_state *state)
 {
-       return -EOPNOTSUPP;
+       state->link = 0;
 }
 
 static void macb_mac_an_restart(struct phylink_config *config)
 
 static const struct phylink_mac_ops macb_phylink_ops = {
        .validate = macb_validate,
-       .mac_link_state = macb_mac_link_state,
+       .mac_pcs_get_state = macb_mac_pcs_get_state,
        .mac_an_restart = macb_mac_an_restart,
        .mac_config = macb_mac_config,
        .mac_link_down = macb_mac_link_down,
 
        phylink_helper_basex_speed(state);
 }
 
-static int mvneta_mac_link_state(struct phylink_config *config,
-                                struct phylink_link_state *state)
+static void mvneta_mac_pcs_get_state(struct phylink_config *config,
+                                    struct phylink_link_state *state)
 {
        struct net_device *ndev = to_net_dev(config->dev);
        struct mvneta_port *pp = netdev_priv(ndev);
                state->pause |= MLO_PAUSE_RX;
        if (gmac_stat & MVNETA_GMAC_TX_FLOW_CTRL_ENABLE)
                state->pause |= MLO_PAUSE_TX;
-
-       return 1;
 }
 
 static void mvneta_mac_an_restart(struct phylink_config *config)
 
 static const struct phylink_mac_ops mvneta_phylink_ops = {
        .validate = mvneta_validate,
-       .mac_link_state = mvneta_mac_link_state,
+       .mac_pcs_get_state = mvneta_mac_pcs_get_state,
        .mac_an_restart = mvneta_mac_an_restart,
        .mac_config = mvneta_mac_config,
        .mac_link_down = mvneta_mac_link_down,
 
        bitmap_zero(supported, __ETHTOOL_LINK_MODE_MASK_NBITS);
 }
 
-static void mvpp22_xlg_link_state(struct mvpp2_port *port,
-                                 struct phylink_link_state *state)
+static void mvpp22_xlg_pcs_get_state(struct mvpp2_port *port,
+                                    struct phylink_link_state *state)
 {
        u32 val;
 
                state->pause |= MLO_PAUSE_RX;
 }
 
-static void mvpp2_gmac_link_state(struct mvpp2_port *port,
-                                 struct phylink_link_state *state)
+static void mvpp2_gmac_pcs_get_state(struct mvpp2_port *port,
+                                    struct phylink_link_state *state)
 {
        u32 val;
 
                state->pause |= MLO_PAUSE_TX;
 }
 
-static int mvpp2_phylink_mac_link_state(struct phylink_config *config,
-                                       struct phylink_link_state *state)
+static void mvpp2_phylink_mac_pcs_get_state(struct phylink_config *config,
+                                           struct phylink_link_state *state)
 {
        struct mvpp2_port *port = container_of(config, struct mvpp2_port,
                                               phylink_config);
                mode &= MVPP22_XLG_CTRL3_MACMODESELECT_MASK;
 
                if (mode == MVPP22_XLG_CTRL3_MACMODESELECT_10G) {
-                       mvpp22_xlg_link_state(port, state);
-                       return 1;
+                       mvpp22_xlg_pcs_get_state(port, state);
+                       return;
                }
        }
 
-       mvpp2_gmac_link_state(port, state);
-       return 1;
+       mvpp2_gmac_pcs_get_state(port, state);
 }
 
 static void mvpp2_mac_an_restart(struct phylink_config *config)
 
 static const struct phylink_mac_ops mvpp2_phylink_ops = {
        .validate = mvpp2_phylink_validate,
-       .mac_link_state = mvpp2_phylink_mac_link_state,
+       .mac_pcs_get_state = mvpp2_phylink_mac_pcs_get_state,
        .mac_an_restart = mvpp2_mac_an_restart,
        .mac_config = mvpp2_mac_config,
        .mac_link_up = mvpp2_mac_link_up,
 
                mac->id, phy_modes(state->interface), err);
 }
 
-static int mtk_mac_link_state(struct phylink_config *config,
-                             struct phylink_link_state *state)
+static void mtk_mac_pcs_get_state(struct phylink_config *config,
+                                 struct phylink_link_state *state)
 {
        struct mtk_mac *mac = container_of(config, struct mtk_mac,
                                           phylink_config);
                state->pause |= MLO_PAUSE_RX;
        if (pmsr & MAC_MSR_TX_FC)
                state->pause |= MLO_PAUSE_TX;
-
-       return 1;
 }
 
 static void mtk_mac_an_restart(struct phylink_config *config)
 
 static const struct phylink_mac_ops mtk_phylink_ops = {
        .validate = mtk_validate,
-       .mac_link_state = mtk_mac_link_state,
+       .mac_pcs_get_state = mtk_mac_pcs_get_state,
        .mac_an_restart = mtk_mac_an_restart,
        .mac_config = mtk_mac_config,
        .mac_link_down = mtk_mac_link_down,
 
                      __ETHTOOL_LINK_MODE_MASK_NBITS);
 }
 
-static int stmmac_mac_link_state(struct phylink_config *config,
-                                struct phylink_link_state *state)
+static void stmmac_mac_pcs_get_state(struct phylink_config *config,
+                                    struct phylink_link_state *state)
 {
-       return -EOPNOTSUPP;
+       state->link = 0;
 }
 
 static void stmmac_mac_config(struct phylink_config *config, unsigned int mode,
 
 static const struct phylink_mac_ops stmmac_phylink_mac_ops = {
        .validate = stmmac_validate,
-       .mac_link_state = stmmac_mac_link_state,
+       .mac_pcs_get_state = stmmac_mac_pcs_get_state,
        .mac_config = stmmac_mac_config,
        .mac_an_restart = stmmac_mac_an_restart,
        .mac_link_down = stmmac_mac_link_down,
 
                   __ETHTOOL_LINK_MODE_MASK_NBITS);
 }
 
-static int axienet_mac_link_state(struct phylink_config *config,
-                                 struct phylink_link_state *state)
+static void axienet_mac_pcs_get_state(struct phylink_config *config,
+                                     struct phylink_link_state *state)
 {
        struct net_device *ndev = to_net_dev(config->dev);
        struct axienet_local *lp = netdev_priv(ndev);
 
        state->an_complete = 0;
        state->duplex = 1;
-
-       return 1;
 }
 
 static void axienet_mac_an_restart(struct phylink_config *config)
 
 static const struct phylink_mac_ops axienet_phylink_ops = {
        .validate = axienet_validate,
-       .mac_link_state = axienet_mac_link_state,
+       .mac_pcs_get_state = axienet_mac_pcs_get_state,
        .mac_an_restart = axienet_mac_an_restart,
        .mac_config = axienet_mac_config,
        .mac_link_down = axienet_mac_link_down,
 
                pl->ops->mac_an_restart(pl->config);
 }
 
-static int phylink_get_mac_state(struct phylink *pl, struct phylink_link_state *state)
+static void phylink_mac_pcs_get_state(struct phylink *pl,
+                                     struct phylink_link_state *state)
 {
-
        linkmode_copy(state->advertising, pl->link_config.advertising);
        linkmode_zero(state->lp_advertising);
        state->interface = pl->link_config.interface;
        state->an_complete = 0;
        state->link = 1;
 
-       return pl->ops->mac_link_state(pl->config, state);
+       pl->ops->mac_pcs_get_state(pl->config, state);
 }
 
 /* The fixed state is... fixed except for the link state,
                        break;
 
                case MLO_AN_INBAND:
-                       phylink_get_mac_state(pl, &link_state);
+                       phylink_mac_pcs_get_state(pl, &link_state);
 
                        /* If we have a phy, the "up" state is the union of
                         * both the PHY and the MAC */
                if (pl->phydev)
                        break;
 
-               phylink_get_mac_state(pl, &link_state);
+               phylink_mac_pcs_get_state(pl, &link_state);
 
                /* The MAC is reporting the link results from its own PCS
                 * layer via in-band status. Report these as the current
 
        case MLO_AN_INBAND:
                if (phy_id == 0) {
-                       val = phylink_get_mac_state(pl, &state);
-                       if (val < 0)
-                               return val;
-
+                       phylink_mac_pcs_get_state(pl, &state);
                        val = phylink_mii_emul_read(reg, &state);
                }
                break;
 
 /**
  * struct phylink_mac_ops - MAC operations structure.
  * @validate: Validate and update the link configuration.
- * @mac_link_state: Read the current link state from the hardware.
+ * @mac_pcs_get_state: Read the current link state from the hardware.
  * @mac_config: configure the MAC for the selected mode and state.
  * @mac_an_restart: restart 802.3z BaseX autonegotiation.
  * @mac_link_down: take the link down.
        void (*validate)(struct phylink_config *config,
                         unsigned long *supported,
                         struct phylink_link_state *state);
-       int (*mac_link_state)(struct phylink_config *config,
-                             struct phylink_link_state *state);
+       void (*mac_pcs_get_state)(struct phylink_config *config,
+                                 struct phylink_link_state *state);
        void (*mac_config)(struct phylink_config *config, unsigned int mode,
                           const struct phylink_link_state *state);
        void (*mac_an_restart)(struct phylink_config *config);
              struct phylink_link_state *state);
 
 /**
- * mac_link_state() - Read the current link state from the hardware
+ * mac_pcs_get_state() - Read the current inband link state from the hardware
  * @config: a pointer to a &struct phylink_config.
  * @state: a pointer to a &struct phylink_link_state.
  *
- * Read the current link state from the MAC, reporting the current
- * speed in @state->speed, duplex mode in @state->duplex, pause mode
- * in @state->pause using the %MLO_PAUSE_RX and %MLO_PAUSE_TX bits,
- * negotiation completion state in @state->an_complete, and link
- * up state in @state->link.
+ * Read the current inband link state from the MAC PCS, reporting the
+ * current speed in @state->speed, duplex mode in @state->duplex, pause
+ * mode in @state->pause using the %MLO_PAUSE_RX and %MLO_PAUSE_TX bits,
+ * negotiation completion state in @state->an_complete, and link up state
+ * in @state->link. If possible, @state->lp_advertising should also be
+ * populated.
  */
-int mac_link_state(struct phylink_config *config,
-                  struct phylink_link_state *state);
+void mac_pcs_get_state(struct phylink_config *config,
+                      struct phylink_link_state *state);
 
 /**
  * mac_config() - configure the MAC for the selected mode and state
  *   1000base-X or Cisco SGMII mode depending on the @state->interface
  *   mode). In both cases, link state management (whether the link
  *   is up or not) is performed by the MAC, and reported via the
- *   mac_link_state() callback. Changes in link state must be made
+ *   mac_pcs_get_state() callback. Changes in link state must be made
  *   by calling phylink_mac_change().
  *
  *   If in 802.3z mode, the link speed is fixed, dependent on the
 
 void dsa_port_phylink_validate(struct phylink_config *config,
                               unsigned long *supported,
                               struct phylink_link_state *state);
-int dsa_port_phylink_mac_link_state(struct phylink_config *config,
-                                   struct phylink_link_state *state);
+void dsa_port_phylink_mac_pcs_get_state(struct phylink_config *config,
+                                       struct phylink_link_state *state);
 void dsa_port_phylink_mac_config(struct phylink_config *config,
                                 unsigned int mode,
                                 const struct phylink_link_state *state);
 
 }
 EXPORT_SYMBOL_GPL(dsa_port_phylink_validate);
 
-int dsa_port_phylink_mac_link_state(struct phylink_config *config,
-                                   struct phylink_link_state *state)
+void dsa_port_phylink_mac_pcs_get_state(struct phylink_config *config,
+                                       struct phylink_link_state *state)
 {
        struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
        struct dsa_switch *ds = dp->ds;
 
-       /* Only called for SGMII and 802.3z */
-       if (!ds->ops->phylink_mac_link_state)
-               return -EOPNOTSUPP;
+       /* Only called for inband modes */
+       if (!ds->ops->phylink_mac_link_state) {
+               state->link = 0;
+               return;
+       }
 
-       return ds->ops->phylink_mac_link_state(ds, dp->index, state);
+       if (ds->ops->phylink_mac_link_state(ds, dp->index, state) < 0)
+               state->link = 0;
 }
-EXPORT_SYMBOL_GPL(dsa_port_phylink_mac_link_state);
+EXPORT_SYMBOL_GPL(dsa_port_phylink_mac_pcs_get_state);
 
 void dsa_port_phylink_mac_config(struct phylink_config *config,
                                 unsigned int mode,
 
 const struct phylink_mac_ops dsa_port_phylink_mac_ops = {
        .validate = dsa_port_phylink_validate,
-       .mac_link_state = dsa_port_phylink_mac_link_state,
+       .mac_pcs_get_state = dsa_port_phylink_mac_pcs_get_state,
        .mac_config = dsa_port_phylink_mac_config,
        .mac_an_restart = dsa_port_phylink_mac_an_restart,
        .mac_link_down = dsa_port_phylink_mac_link_down,