bnxt_en: Refactor the initialization of the ethtool link settings.
authorMichael Chan <michael.chan@broadcom.com>
Sun, 24 Nov 2019 03:30:47 +0000 (22:30 -0500)
committerJakub Kicinski <jakub.kicinski@netronome.com>
Sun, 24 Nov 2019 22:48:02 +0000 (14:48 -0800)
Refactor this logic in bnxt_probe_phy() into a separate function
bnxt_init_ethtool_link_settings().  It used to be that the settable
link settings will never be changed without going through ethtool.
So we only needed to do this once in bnxt_probe_phy().  Now, another
function sharing the port may change it and we may need to re-initialize
the ethtool settings again in run-time.

Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
drivers/net/ethernet/broadcom/bnxt/bnxt.c

index 9d02232c311337a7f8b7a37eddeedb8a621fc35e..1b86ba8d0be35f39d570fb5abeb419eff2877162 100644 (file)
@@ -10249,6 +10249,31 @@ static void bnxt_chk_missed_irq(struct bnxt *bp)
 
 static void bnxt_cfg_ntp_filters(struct bnxt *);
 
+static void bnxt_init_ethtool_link_settings(struct bnxt *bp)
+{
+       struct bnxt_link_info *link_info = &bp->link_info;
+
+       if (BNXT_AUTO_MODE(link_info->auto_mode)) {
+               link_info->autoneg = BNXT_AUTONEG_SPEED;
+               if (bp->hwrm_spec_code >= 0x10201) {
+                       if (link_info->auto_pause_setting &
+                           PORT_PHY_CFG_REQ_AUTO_PAUSE_AUTONEG_PAUSE)
+                               link_info->autoneg |= BNXT_AUTONEG_FLOW_CTRL;
+               } else {
+                       link_info->autoneg |= BNXT_AUTONEG_FLOW_CTRL;
+               }
+               link_info->advertising = link_info->auto_link_speeds;
+       } else {
+               link_info->req_link_speed = link_info->force_link_speed;
+               link_info->req_duplex = link_info->duplex_setting;
+       }
+       if (link_info->autoneg & BNXT_AUTONEG_FLOW_CTRL)
+               link_info->req_flow_ctrl =
+                       link_info->auto_pause_setting & BNXT_LINK_PAUSE_BOTH;
+       else
+               link_info->req_flow_ctrl = link_info->force_pause_setting;
+}
+
 static void bnxt_sp_task(struct work_struct *work)
 {
        struct bnxt *bp = container_of(work, struct bnxt, sp_task);
@@ -11411,26 +11436,7 @@ static int bnxt_probe_phy(struct bnxt *bp, bool fw_dflt)
        if (!fw_dflt)
                return 0;
 
-       /*initialize the ethool setting copy with NVM settings */
-       if (BNXT_AUTO_MODE(link_info->auto_mode)) {
-               link_info->autoneg = BNXT_AUTONEG_SPEED;
-               if (bp->hwrm_spec_code >= 0x10201) {
-                       if (link_info->auto_pause_setting &
-                           PORT_PHY_CFG_REQ_AUTO_PAUSE_AUTONEG_PAUSE)
-                               link_info->autoneg |= BNXT_AUTONEG_FLOW_CTRL;
-               } else {
-                       link_info->autoneg |= BNXT_AUTONEG_FLOW_CTRL;
-               }
-               link_info->advertising = link_info->auto_link_speeds;
-       } else {
-               link_info->req_link_speed = link_info->force_link_speed;
-               link_info->req_duplex = link_info->duplex_setting;
-       }
-       if (link_info->autoneg & BNXT_AUTONEG_FLOW_CTRL)
-               link_info->req_flow_ctrl =
-                       link_info->auto_pause_setting & BNXT_LINK_PAUSE_BOTH;
-       else
-               link_info->req_flow_ctrl = link_info->force_pause_setting;
+       bnxt_init_ethtool_link_settings(bp);
        return 0;
 }