aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Rose <gregory.v.rose@intel.com>2012-04-09 21:56:37 -0400
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2012-05-03 05:36:07 -0400
commit31a1b3758e41d225695222793e5947e13ddcaba2 (patch)
tree3a5bfddeace5f3c0abc15de83b7747354caa95e2
parent59aed95263bdd0e2b48eb9be5a94346d2d4abf90 (diff)
ixgbevf: Add support to recognize 100mb link speed
The X540 10Gig controller is capable of linking at 100Mbits - add support for reporting that link speed. Signed-off-by: Greg Rose <gregory.v.rose@intel.com> Tested-by: Sibai Li <sibai.li@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
-rw-r--r--drivers/net/ethernet/intel/ixgbevf/defines.h2
-rw-r--r--drivers/net/ethernet/intel/ixgbevf/ethtool.c18
-rw-r--r--drivers/net/ethernet/intel/ixgbevf/vf.c12
3 files changed, 25 insertions, 7 deletions
diff --git a/drivers/net/ethernet/intel/ixgbevf/defines.h b/drivers/net/ethernet/intel/ixgbevf/defines.h
index 947b5c830735..e09a6cc633bb 100644
--- a/drivers/net/ethernet/intel/ixgbevf/defines.h
+++ b/drivers/net/ethernet/intel/ixgbevf/defines.h
@@ -40,6 +40,7 @@
40typedef u32 ixgbe_link_speed; 40typedef u32 ixgbe_link_speed;
41#define IXGBE_LINK_SPEED_1GB_FULL 0x0020 41#define IXGBE_LINK_SPEED_1GB_FULL 0x0020
42#define IXGBE_LINK_SPEED_10GB_FULL 0x0080 42#define IXGBE_LINK_SPEED_10GB_FULL 0x0080
43#define IXGBE_LINK_SPEED_100_FULL 0x0008
43 44
44#define IXGBE_CTRL_RST 0x04000000 /* Reset (SW) */ 45#define IXGBE_CTRL_RST 0x04000000 /* Reset (SW) */
45#define IXGBE_RXDCTL_ENABLE 0x02000000 /* Enable specific Rx Queue */ 46#define IXGBE_RXDCTL_ENABLE 0x02000000 /* Enable specific Rx Queue */
@@ -48,6 +49,7 @@ typedef u32 ixgbe_link_speed;
48#define IXGBE_LINKS_SPEED_82599 0x30000000 49#define IXGBE_LINKS_SPEED_82599 0x30000000
49#define IXGBE_LINKS_SPEED_10G_82599 0x30000000 50#define IXGBE_LINKS_SPEED_10G_82599 0x30000000
50#define IXGBE_LINKS_SPEED_1G_82599 0x20000000 51#define IXGBE_LINKS_SPEED_1G_82599 0x20000000
52#define IXGBE_LINKS_SPEED_100_82599 0x10000000
51 53
52/* Number of Transmit and Receive Descriptors must be a multiple of 8 */ 54/* Number of Transmit and Receive Descriptors must be a multiple of 8 */
53#define IXGBE_REQ_TX_DESCRIPTOR_MULTIPLE 8 55#define IXGBE_REQ_TX_DESCRIPTOR_MULTIPLE 8
diff --git a/drivers/net/ethernet/intel/ixgbevf/ethtool.c b/drivers/net/ethernet/intel/ixgbevf/ethtool.c
index 2bfe0d1d7958..e8dddf572d38 100644
--- a/drivers/net/ethernet/intel/ixgbevf/ethtool.c
+++ b/drivers/net/ethernet/intel/ixgbevf/ethtool.c
@@ -107,10 +107,20 @@ static int ixgbevf_get_settings(struct net_device *netdev,
107 hw->mac.ops.check_link(hw, &link_speed, &link_up, false); 107 hw->mac.ops.check_link(hw, &link_speed, &link_up, false);
108 108
109 if (link_up) { 109 if (link_up) {
110 ethtool_cmd_speed_set( 110 __u32 speed = SPEED_10000;
111 ecmd, 111 switch (link_speed) {
112 (link_speed == IXGBE_LINK_SPEED_10GB_FULL) ? 112 case IXGBE_LINK_SPEED_10GB_FULL:
113 SPEED_10000 : SPEED_1000); 113 speed = SPEED_10000;
114 break;
115 case IXGBE_LINK_SPEED_1GB_FULL:
116 speed = SPEED_1000;
117 break;
118 case IXGBE_LINK_SPEED_100_FULL:
119 speed = SPEED_100;
120 break;
121 }
122
123 ethtool_cmd_speed_set(ecmd, speed);
114 ecmd->duplex = DUPLEX_FULL; 124 ecmd->duplex = DUPLEX_FULL;
115 } else { 125 } else {
116 ethtool_cmd_speed_set(ecmd, -1); 126 ethtool_cmd_speed_set(ecmd, -1);
diff --git a/drivers/net/ethernet/intel/ixgbevf/vf.c b/drivers/net/ethernet/intel/ixgbevf/vf.c
index 74be7411242a..ec89b86f7ca4 100644
--- a/drivers/net/ethernet/intel/ixgbevf/vf.c
+++ b/drivers/net/ethernet/intel/ixgbevf/vf.c
@@ -404,11 +404,17 @@ static s32 ixgbevf_check_mac_link_vf(struct ixgbe_hw *hw,
404 else 404 else
405 *link_up = false; 405 *link_up = false;
406 406
407 if ((links_reg & IXGBE_LINKS_SPEED_82599) == 407 switch (links_reg & IXGBE_LINKS_SPEED_82599) {
408 IXGBE_LINKS_SPEED_10G_82599) 408 case IXGBE_LINKS_SPEED_10G_82599:
409 *speed = IXGBE_LINK_SPEED_10GB_FULL; 409 *speed = IXGBE_LINK_SPEED_10GB_FULL;
410 else 410 break;
411 case IXGBE_LINKS_SPEED_1G_82599:
411 *speed = IXGBE_LINK_SPEED_1GB_FULL; 412 *speed = IXGBE_LINK_SPEED_1GB_FULL;
413 break;
414 case IXGBE_LINKS_SPEED_100_82599:
415 *speed = IXGBE_LINK_SPEED_100_FULL;
416 break;
417 }
412 418
413 return 0; 419 return 0;
414} 420}