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>
This commit is contained in:
parent
db476e8511
commit
f1b4d6214b
@ -1217,7 +1217,7 @@ static s32 igb_get_pcs_speed_and_duplex_82575(struct e1000_hw *hw, u16 *speed,
|
|||||||
u16 *duplex)
|
u16 *duplex)
|
||||||
{
|
{
|
||||||
struct e1000_mac_info *mac = &hw->mac;
|
struct e1000_mac_info *mac = &hw->mac;
|
||||||
u32 pcs;
|
u32 pcs, status;
|
||||||
|
|
||||||
/* Set up defaults for the return values of this function */
|
/* Set up defaults for the return values of this function */
|
||||||
mac->serdes_has_link = false;
|
mac->serdes_has_link = false;
|
||||||
@ -1238,20 +1238,31 @@ static s32 igb_get_pcs_speed_and_duplex_82575(struct e1000_hw *hw, u16 *speed,
|
|||||||
mac->serdes_has_link = true;
|
mac->serdes_has_link = true;
|
||||||
|
|
||||||
/* Detect and store PCS speed */
|
/* Detect and store PCS speed */
|
||||||
if (pcs & E1000_PCS_LSTS_SPEED_1000) {
|
if (pcs & E1000_PCS_LSTS_SPEED_1000)
|
||||||
*speed = SPEED_1000;
|
*speed = SPEED_1000;
|
||||||
} else if (pcs & E1000_PCS_LSTS_SPEED_100) {
|
else if (pcs & E1000_PCS_LSTS_SPEED_100)
|
||||||
*speed = SPEED_100;
|
*speed = SPEED_100;
|
||||||
} else {
|
else
|
||||||
*speed = SPEED_10;
|
*speed = SPEED_10;
|
||||||
}
|
|
||||||
|
|
||||||
/* Detect and store PCS duplex */
|
/* Detect and store PCS duplex */
|
||||||
if (pcs & E1000_PCS_LSTS_DUPLEX_FULL) {
|
if (pcs & E1000_PCS_LSTS_DUPLEX_FULL)
|
||||||
*duplex = FULL_DUPLEX;
|
*duplex = FULL_DUPLEX;
|
||||||
} else {
|
else
|
||||||
*duplex = HALF_DUPLEX;
|
*duplex = HALF_DUPLEX;
|
||||||
|
|
||||||
|
/* Check if it is an I354 2.5Gb backplane connection. */
|
||||||
|
if (mac->type == e1000_i354) {
|
||||||
|
status = rd32(E1000_STATUS);
|
||||||
|
if ((status & E1000_STATUS_2P5_SKU) &&
|
||||||
|
!(status & E1000_STATUS_2P5_SKU_OVER)) {
|
||||||
|
*speed = SPEED_2500;
|
||||||
|
*duplex = FULL_DUPLEX;
|
||||||
|
hw_dbg("2500 Mbs, ");
|
||||||
|
hw_dbg("Full Duplex\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1171,17 +1171,6 @@ s32 igb_get_speed_and_duplex_copper(struct e1000_hw *hw, u16 *speed,
|
|||||||
hw_dbg("Half Duplex\n");
|
hw_dbg("Half Duplex\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check if it is an I354 2.5Gb backplane connection. */
|
|
||||||
if (hw->mac.type == e1000_i354) {
|
|
||||||
if ((status & E1000_STATUS_2P5_SKU) &&
|
|
||||||
!(status & E1000_STATUS_2P5_SKU_OVER)) {
|
|
||||||
*speed = SPEED_2500;
|
|
||||||
*duplex = FULL_DUPLEX;
|
|
||||||
hw_dbg("2500 Mbs, ");
|
|
||||||
hw_dbg("Full Duplex\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user