aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYaniv Rosner <yanivr@broadcom.com>2013-03-11 01:17:48 -0400
committerDavid S. Miller <davem@davemloft.net>2013-03-12 07:54:24 -0400
commitb807c74855ebc3d686a323c13843146fac200f41 (patch)
treea9f1c0e2d146b47ebe7c59497b1f8ca8836c8714
parentab5777d7483026c9bf795eba573c22ef8d2e32cd (diff)
bnx2x: Add RJ45 SFP module detection
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>
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c
index 77ebae0ac64a..329c7f9a2694 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c
@@ -152,6 +152,7 @@
152#define SFP_EEPROM_CON_TYPE_ADDR 0x2 152#define SFP_EEPROM_CON_TYPE_ADDR 0x2
153 #define SFP_EEPROM_CON_TYPE_VAL_LC 0x7 153 #define SFP_EEPROM_CON_TYPE_VAL_LC 0x7
154 #define SFP_EEPROM_CON_TYPE_VAL_COPPER 0x21 154 #define SFP_EEPROM_CON_TYPE_VAL_COPPER 0x21
155 #define SFP_EEPROM_CON_TYPE_VAL_RJ45 0x22
155 156
156 157
157#define SFP_EEPROM_COMP_CODE_ADDR 0x3 158#define SFP_EEPROM_COMP_CODE_ADDR 0x3
@@ -8049,20 +8050,24 @@ static int bnx2x_get_edc_mode(struct bnx2x_phy *phy,
8049 break; 8050 break;
8050 } 8051 }
8051 case SFP_EEPROM_CON_TYPE_VAL_LC: 8052 case SFP_EEPROM_CON_TYPE_VAL_LC:
8053 case SFP_EEPROM_CON_TYPE_VAL_RJ45:
8052 check_limiting_mode = 1; 8054 check_limiting_mode = 1;
8053 if ((val[1] & (SFP_EEPROM_COMP_CODE_SR_MASK | 8055 if ((val[1] & (SFP_EEPROM_COMP_CODE_SR_MASK |
8054 SFP_EEPROM_COMP_CODE_LR_MASK | 8056 SFP_EEPROM_COMP_CODE_LR_MASK |
8055 SFP_EEPROM_COMP_CODE_LRM_MASK)) == 0) { 8057 SFP_EEPROM_COMP_CODE_LRM_MASK)) == 0) {
8056 DP(NETIF_MSG_LINK, "1G Optic module detected\n"); 8058 DP(NETIF_MSG_LINK, "1G SFP module detected\n");
8057 gport = params->port; 8059 gport = params->port;
8058 phy->media_type = ETH_PHY_SFP_1G_FIBER; 8060 phy->media_type = ETH_PHY_SFP_1G_FIBER;
8059 phy->req_line_speed = SPEED_1000; 8061 if (phy->req_line_speed != SPEED_1000) {
8060 if (!CHIP_IS_E1x(bp)) 8062 phy->req_line_speed = SPEED_1000;
8061 gport = BP_PATH(bp) + (params->port << 1); 8063 if (!CHIP_IS_E1x(bp)) {
8062 netdev_err(bp->dev, "Warning: Link speed was forced to 1000Mbps." 8064 gport = BP_PATH(bp) +
8063 " Current SFP module in port %d is not" 8065 (params->port << 1);
8064 " compliant with 10G Ethernet\n", 8066 }
8065 gport); 8067 netdev_err(bp->dev,
8068 "Warning: Link speed was forced to 1000Mbps. Current SFP module in port %d is not compliant with 10G Ethernet\n",
8069 gport);
8070 }
8066 } else { 8071 } else {
8067 int idx, cfg_idx = 0; 8072 int idx, cfg_idx = 0;
8068 DP(NETIF_MSG_LINK, "10G Optic module detected\n"); 8073 DP(NETIF_MSG_LINK, "10G Optic module detected\n");