This patch defines the flags for 2.5G speed advertisement.
Currently this speed is supported only on i225 (Foxville) devices.
In this mode, the speed selection
bits in the status register will be the same as in 1 Gbps mode, and,
additionally, bit 22 in the status register will be turned on.

Signed-off-by: Dima Ruinskiy <dima.ruins...@intel.com>
Signed-off-by: Guinan Sun <guinanx....@intel.com>
---
 drivers/net/e1000/base/e1000_defines.h |  5 +++++
 drivers/net/e1000/base/e1000_mac.c     | 14 ++++++++++++--
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/drivers/net/e1000/base/e1000_defines.h 
b/drivers/net/e1000/base/e1000_defines.h
index dbc515aef..d9ed3a52f 100644
--- a/drivers/net/e1000/base/e1000_defines.h
+++ b/drivers/net/e1000/base/e1000_defines.h
@@ -301,6 +301,7 @@
 #define E1000_STATUS_SPEED_10          0x00000000 /* Speed 10Mb/s */
 #define E1000_STATUS_SPEED_100         0x00000040 /* Speed 100Mb/s */
 #define E1000_STATUS_SPEED_1000                0x00000080 /* Speed 1000Mb/s */
+#define E1000_STATUS_SPEED_2500                0x00400000 /* Speed 2.5Gb/s 
indication for I225 */
 #define E1000_STATUS_LAN_INIT_DONE     0x00000200 /* Lan Init Compltn by NVM */
 #define E1000_STATUS_PHYRA             0x00000400 /* PHY Reset Asserted */
 #define E1000_STATUS_GIO_MASTER_ENABLE 0x00080000 /* Master request status */
@@ -338,6 +339,9 @@
 #define E1000_ALL_SPEED_DUPLEX ( \
        ADVERTISE_10_HALF | ADVERTISE_10_FULL | ADVERTISE_100_HALF | \
        ADVERTISE_100_FULL | ADVERTISE_1000_FULL)
+#define E1000_ALL_SPEED_DUPLEX_2500 ( \
+       ADVERTISE_10_HALF | ADVERTISE_10_FULL | ADVERTISE_100_HALF | \
+       ADVERTISE_100_FULL | ADVERTISE_1000_FULL | ADVERTISE_2500_FULL)
 #define E1000_ALL_NOT_GIG      ( \
        ADVERTISE_10_HALF | ADVERTISE_10_FULL | ADVERTISE_100_HALF | \
        ADVERTISE_100_FULL)
@@ -346,6 +350,7 @@
 #define E1000_ALL_HALF_DUPLEX  (ADVERTISE_10_HALF | ADVERTISE_100_HALF)
 
 #define AUTONEG_ADVERTISE_SPEED_DEFAULT                E1000_ALL_SPEED_DUPLEX
+#define AUTONEG_ADVERTISE_SPEED_DEFAULT_2500   E1000_ALL_SPEED_DUPLEX_2500
 
 /* LED Control */
 #define E1000_PHY_LED0_MODE_MASK       0x00000007
diff --git a/drivers/net/e1000/base/e1000_mac.c 
b/drivers/net/e1000/base/e1000_mac.c
index 48384b284..92ee33745 100644
--- a/drivers/net/e1000/base/e1000_mac.c
+++ b/drivers/net/e1000/base/e1000_mac.c
@@ -1638,8 +1638,18 @@ s32 e1000_get_speed_and_duplex_copper_generic(struct 
e1000_hw *hw, u16 *speed,
 
        status = E1000_READ_REG(hw, E1000_STATUS);
        if (status & E1000_STATUS_SPEED_1000) {
-               *speed = SPEED_1000;
-               DEBUGOUT("1000 Mbs, ");
+               /* For I225, STATUS will indicate 1G speed in both 1 Gbps
+                * and 2.5 Gbps link modes. An additional bit is used
+                * to differentiate between 1 Gbps and 2.5 Gbps.
+                */
+               if ((hw->mac.type == e1000_i225) &&
+                   (status & E1000_STATUS_SPEED_2500)) {
+                       *speed = SPEED_2500;
+                       DEBUGOUT("2500 Mbs, ");
+               } else {
+                       *speed = SPEED_1000;
+                       DEBUGOUT("1000 Mbs, ");
+               }
        } else if (status & E1000_STATUS_SPEED_100) {
                *speed = SPEED_100;
                DEBUGOUT("100 Mbs, ");
-- 
2.17.1

Reply via email to