]> git.openfabrics.org - ~shefty/rdma-dev.git/commitdiff
bnx2x: Add RJ45 SFP module detection
authorYaniv Rosner <yanivr@broadcom.com>
Mon, 11 Mar 2013 05:17:48 +0000 (05:17 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 12 Mar 2013 11:54:24 +0000 (07:54 -0400)
Add RJ45 SFP module detection. In case the user set 10G link speed, and the
module doesn't support it, then force the speed to 1G and notify the user.

Signed-off-by: Yaniv Rosner <yanivr@broadcom.com>
Signed-off-by: Yuval Mintz <yuvalmin@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c

index 77ebae0ac64aa9a4e681a506129c5a835d85ef4e..329c7f9a2694a9902d4968d12de51904a876e0d3 100644 (file)
 #define SFP_EEPROM_CON_TYPE_ADDR               0x2
        #define SFP_EEPROM_CON_TYPE_VAL_LC      0x7
        #define SFP_EEPROM_CON_TYPE_VAL_COPPER  0x21
+       #define SFP_EEPROM_CON_TYPE_VAL_RJ45    0x22
 
 
 #define SFP_EEPROM_COMP_CODE_ADDR              0x3
@@ -8049,20 +8050,24 @@ static int bnx2x_get_edc_mode(struct bnx2x_phy *phy,
                break;
        }
        case SFP_EEPROM_CON_TYPE_VAL_LC:
+       case SFP_EEPROM_CON_TYPE_VAL_RJ45:
                check_limiting_mode = 1;
                if ((val[1] & (SFP_EEPROM_COMP_CODE_SR_MASK |
                               SFP_EEPROM_COMP_CODE_LR_MASK |
                               SFP_EEPROM_COMP_CODE_LRM_MASK)) == 0) {
-                       DP(NETIF_MSG_LINK, "1G Optic module detected\n");
+                       DP(NETIF_MSG_LINK, "1G SFP module detected\n");
                        gport = params->port;
                        phy->media_type = ETH_PHY_SFP_1G_FIBER;
-                       phy->req_line_speed = SPEED_1000;
-                       if (!CHIP_IS_E1x(bp))
-                               gport = BP_PATH(bp) + (params->port << 1);
-                       netdev_err(bp->dev, "Warning: Link speed was forced to 1000Mbps."
-                             " Current SFP module in port %d is not"
-                             " compliant with 10G Ethernet\n",
-                        gport);
+                       if (phy->req_line_speed != SPEED_1000) {
+                               phy->req_line_speed = SPEED_1000;
+                               if (!CHIP_IS_E1x(bp)) {
+                                       gport = BP_PATH(bp) +
+                                       (params->port << 1);
+                               }
+                               netdev_err(bp->dev,
+                                          "Warning: Link speed was forced to 1000Mbps. Current SFP module in port %d is not compliant with 10G Ethernet\n",
+                                          gport);
+                       }
                } else {
                        int idx, cfg_idx = 0;
                        DP(NETIF_MSG_LINK, "10G Optic module detected\n");