A dedicated function for i225 that Configures the link for auto-neg
or forced speed and duplex. It was taken from the
e1000_setup_copper_link_82575 function in e1000_82575 file and was
refactored for i225 only.

Signed-off-by: Dany Trakhtenberg <dany.trakhtenb...@intel.com>
Signed-off-by: Guinan Sun <guinanx....@intel.com>
---
 drivers/net/e1000/base/e1000_i225.c | 30 +++++++++++++++++++++++++++++
 drivers/net/e1000/base/e1000_phy.h  | 13 +++++++++++++
 2 files changed, 43 insertions(+)

diff --git a/drivers/net/e1000/base/e1000_i225.c 
b/drivers/net/e1000/base/e1000_i225.c
index 4ba6c45be..621dc6863 100644
--- a/drivers/net/e1000/base/e1000_i225.c
+++ b/drivers/net/e1000/base/e1000_i225.c
@@ -124,6 +124,36 @@ void e1000_release_swfw_sync_i225(struct e1000_hw *hw, u16 
mask)
        e1000_put_hw_semaphore_generic(hw);
 }
 
+/*
+ * e1000_setup_copper_link_i225 - Configure copper link settings
+ * @hw: pointer to the HW structure
+ *
+ * Configures the link for auto-neg or forced speed and duplex.  Then we check
+ * for link, once link is established calls to configure collision distance
+ * and flow control are called.
+ */
+s32 e1000_setup_copper_link_i225(struct e1000_hw *hw)
+{
+       u32 phpm_reg;
+       s32 ret_val;
+       u32 ctrl;
+
+       DEBUGFUNC("e1000_setup_copper_link_i225");
+
+       ctrl = E1000_READ_REG(hw, E1000_CTRL);
+       ctrl |= E1000_CTRL_SLU;
+       ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
+       E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
+
+       phpm_reg = E1000_READ_REG(hw, E1000_I225_PHPM);
+       phpm_reg &= ~E1000_I225_PHPM_GO_LINKD;
+       E1000_WRITE_REG(hw, E1000_I225_PHPM, phpm_reg);
+
+       ret_val = e1000_setup_copper_link_generic(hw);
+
+       return ret_val;
+}
+
 /* e1000_get_hw_semaphore_i225 - Acquire hardware semaphore
  * @hw: pointer to the HW structure
  *
diff --git a/drivers/net/e1000/base/e1000_phy.h 
b/drivers/net/e1000/base/e1000_phy.h
index 32e9d2620..3321bc0ba 100644
--- a/drivers/net/e1000/base/e1000_phy.h
+++ b/drivers/net/e1000/base/e1000_phy.h
@@ -122,6 +122,19 @@ s32 e1000_write_xmdio_reg(struct e1000_hw *hw, u16 addr, 
u8 dev_addr,
 #define GS40G_MAC_SPEED_1G             0X0006
 #define GS40G_COPPER_SPEC              0x0010
 
+#endif /* NO_I210_SUPPORT */
+#ifndef NO_I225_SUPPORT
+#define E1000_I225_PHPM                        0x0E14 /* I225 PHY Power 
Management */
+#define E1000_I225_PHPM_DIS_1000_D3    0x0008 /* Disable 1G in D3 */
+#define E1000_I225_PHPM_LINK_ENERGY    0x0010 /* Link Energy Detect */
+#define E1000_I225_PHPM_GO_LINKD       0x0020 /* Go Link Disconnect */
+#define E1000_I225_PHPM_DIS_1000       0x0040 /* Disable 1G globally */
+#define E1000_I225_PHPM_SPD_B2B_EN     0x0080 /* Smart Power Down Back2Back */
+#define E1000_I225_PHPM_RST_COMPL      0x0100 /* PHY Reset Completed */
+#define E1000_I225_PHPM_DIS_100_D3     0x0200 /* Disable 100M in D3 */
+#define E1000_I225_PHPM_ULP            0x0400 /* Ultra Low-Power Mode */
+#define E1000_I225_PHPM_DIS_2500       0x0800 /* Disable 2.5G globally */
+#define E1000_I225_PHPM_DIS_2500_D3    0x1000 /* Disable 2.5G in D3 */
 /* GPY211 - I225 defines */
 #define GPY_MMD_MASK                   0xFFFF0000
 #define GPY_MMD_SHIFT                  16
-- 
2.17.1

Reply via email to