Skip to content

Commit f1b4d62

Browse files
aabodunrinJeff Kirsher
authored andcommitted
igb: Support to get 2_5G link status for appropriate media type
Since i354 2.5Gb devices are not Copper media type but SerDes, so this patch changes the way we detect speed/duplex link info for this device. Signed-off-by: Akeem G Abodunrin <akeem.g.abodunrin@intel.com> Tested-by: Aaron Brown <aaron.f.brown@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
1 parent db476e8 commit f1b4d62

File tree

2 files changed

+18
-18
lines changed

2 files changed

+18
-18
lines changed

drivers/net/ethernet/intel/igb/e1000_82575.c

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1217,7 +1217,7 @@ static s32 igb_get_pcs_speed_and_duplex_82575(struct e1000_hw *hw, u16 *speed,
12171217
u16 *duplex)
12181218
{
12191219
struct e1000_mac_info *mac = &hw->mac;
1220-
u32 pcs;
1220+
u32 pcs, status;
12211221

12221222
/* Set up defaults for the return values of this function */
12231223
mac->serdes_has_link = false;
@@ -1238,20 +1238,31 @@ static s32 igb_get_pcs_speed_and_duplex_82575(struct e1000_hw *hw, u16 *speed,
12381238
mac->serdes_has_link = true;
12391239

12401240
/* Detect and store PCS speed */
1241-
if (pcs & E1000_PCS_LSTS_SPEED_1000) {
1241+
if (pcs & E1000_PCS_LSTS_SPEED_1000)
12421242
*speed = SPEED_1000;
1243-
} else if (pcs & E1000_PCS_LSTS_SPEED_100) {
1243+
else if (pcs & E1000_PCS_LSTS_SPEED_100)
12441244
*speed = SPEED_100;
1245-
} else {
1245+
else
12461246
*speed = SPEED_10;
1247-
}
12481247

12491248
/* Detect and store PCS duplex */
1250-
if (pcs & E1000_PCS_LSTS_DUPLEX_FULL) {
1249+
if (pcs & E1000_PCS_LSTS_DUPLEX_FULL)
12511250
*duplex = FULL_DUPLEX;
1252-
} else {
1251+
else
12531252
*duplex = HALF_DUPLEX;
1253+
1254+
/* Check if it is an I354 2.5Gb backplane connection. */
1255+
if (mac->type == e1000_i354) {
1256+
status = rd32(E1000_STATUS);
1257+
if ((status & E1000_STATUS_2P5_SKU) &&
1258+
!(status & E1000_STATUS_2P5_SKU_OVER)) {
1259+
*speed = SPEED_2500;
1260+
*duplex = FULL_DUPLEX;
1261+
hw_dbg("2500 Mbs, ");
1262+
hw_dbg("Full Duplex\n");
1263+
}
12541264
}
1265+
12551266
}
12561267

12571268
return 0;

drivers/net/ethernet/intel/igb/e1000_mac.c

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1171,17 +1171,6 @@ s32 igb_get_speed_and_duplex_copper(struct e1000_hw *hw, u16 *speed,
11711171
hw_dbg("Half Duplex\n");
11721172
}
11731173

1174-
/* Check if it is an I354 2.5Gb backplane connection. */
1175-
if (hw->mac.type == e1000_i354) {
1176-
if ((status & E1000_STATUS_2P5_SKU) &&
1177-
!(status & E1000_STATUS_2P5_SKU_OVER)) {
1178-
*speed = SPEED_2500;
1179-
*duplex = FULL_DUPLEX;
1180-
hw_dbg("2500 Mbs, ");
1181-
hw_dbg("Full Duplex\n");
1182-
}
1183-
}
1184-
11851174
return 0;
11861175
}
11871176

0 commit comments

Comments
 (0)