]> Pileus Git - ~andy/linux/blobdiff - drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
bnx2x: Fix generic option settings
[~andy/linux] / drivers / net / ethernet / broadcom / bnx2x / bnx2x_ethtool.c
index 92a467ff4104da3bedd8aa6762c51c19ea977a22..38fc794c1655d9d011d425ccce35cfa41ee43889 100644 (file)
@@ -358,49 +358,47 @@ static int bnx2x_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
 
        cfg_idx = bnx2x_get_link_cfg_idx(bp);
        old_multi_phy_config = bp->link_params.multi_phy_config;
-       switch (cmd->port) {
-       case PORT_TP:
-               if (bp->port.supported[cfg_idx] & SUPPORTED_TP)
-                       break; /* no port change */
-
-               if (!(bp->port.supported[0] & SUPPORTED_TP ||
-                     bp->port.supported[1] & SUPPORTED_TP)) {
-                       DP(BNX2X_MSG_ETHTOOL, "Unsupported port type\n");
-                       return -EINVAL;
-               }
-               bp->link_params.multi_phy_config &=
-                       ~PORT_HW_CFG_PHY_SELECTION_MASK;
-               if (bp->link_params.multi_phy_config &
-                   PORT_HW_CFG_PHY_SWAPPED_ENABLED)
-                       bp->link_params.multi_phy_config |=
-                       PORT_HW_CFG_PHY_SELECTION_SECOND_PHY;
-               else
-                       bp->link_params.multi_phy_config |=
-                       PORT_HW_CFG_PHY_SELECTION_FIRST_PHY;
-               break;
-       case PORT_FIBRE:
-       case PORT_DA:
-               if (bp->port.supported[cfg_idx] & SUPPORTED_FIBRE)
-                       break; /* no port change */
-
-               if (!(bp->port.supported[0] & SUPPORTED_FIBRE ||
-                     bp->port.supported[1] & SUPPORTED_FIBRE)) {
+       if (cmd->port != bnx2x_get_port_type(bp)) {
+               switch (cmd->port) {
+               case PORT_TP:
+                       if (!(bp->port.supported[0] & SUPPORTED_TP ||
+                             bp->port.supported[1] & SUPPORTED_TP)) {
+                               DP(BNX2X_MSG_ETHTOOL,
+                                  "Unsupported port type\n");
+                               return -EINVAL;
+                       }
+                       bp->link_params.multi_phy_config &=
+                               ~PORT_HW_CFG_PHY_SELECTION_MASK;
+                       if (bp->link_params.multi_phy_config &
+                           PORT_HW_CFG_PHY_SWAPPED_ENABLED)
+                               bp->link_params.multi_phy_config |=
+                               PORT_HW_CFG_PHY_SELECTION_SECOND_PHY;
+                       else
+                               bp->link_params.multi_phy_config |=
+                               PORT_HW_CFG_PHY_SELECTION_FIRST_PHY;
+                       break;
+               case PORT_FIBRE:
+               case PORT_DA:
+                       if (!(bp->port.supported[0] & SUPPORTED_FIBRE ||
+                             bp->port.supported[1] & SUPPORTED_FIBRE)) {
+                               DP(BNX2X_MSG_ETHTOOL,
+                                  "Unsupported port type\n");
+                               return -EINVAL;
+                       }
+                       bp->link_params.multi_phy_config &=
+                               ~PORT_HW_CFG_PHY_SELECTION_MASK;
+                       if (bp->link_params.multi_phy_config &
+                           PORT_HW_CFG_PHY_SWAPPED_ENABLED)
+                               bp->link_params.multi_phy_config |=
+                               PORT_HW_CFG_PHY_SELECTION_FIRST_PHY;
+                       else
+                               bp->link_params.multi_phy_config |=
+                               PORT_HW_CFG_PHY_SELECTION_SECOND_PHY;
+                       break;
+               default:
                        DP(BNX2X_MSG_ETHTOOL, "Unsupported port type\n");
                        return -EINVAL;
                }
-               bp->link_params.multi_phy_config &=
-                       ~PORT_HW_CFG_PHY_SELECTION_MASK;
-               if (bp->link_params.multi_phy_config &
-                   PORT_HW_CFG_PHY_SWAPPED_ENABLED)
-                       bp->link_params.multi_phy_config |=
-                       PORT_HW_CFG_PHY_SELECTION_FIRST_PHY;
-               else
-                       bp->link_params.multi_phy_config |=
-                       PORT_HW_CFG_PHY_SELECTION_SECOND_PHY;
-               break;
-       default:
-               DP(BNX2X_MSG_ETHTOOL, "Unsupported port type\n");
-               return -EINVAL;
        }
        /* Save new config in case command complete successfully */
        new_multi_phy_config = bp->link_params.multi_phy_config;