[15/70] net/e1000/base: setup copper link function for i225
Checks
Commit Message
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.Trakhtenberg@intel.com>
Signed-off-by: Guinan Sun <guinanx.sun@intel.com>
---
drivers/net/e1000/base/e1000_i225.c | 30 +++++++++++++++++++++++++++++
drivers/net/e1000/base/e1000_phy.h | 13 +++++++++++++
2 files changed, 43 insertions(+)
Comments
Hi,
> -----Original Message-----
> From: Sun, GuinanX <guinanx.sun@intel.com>
> Sent: Monday, June 22, 2020 2:46 PM
> To: dev@dpdk.org
> Cc: Guo, Jia <jia.guo@intel.com>; Zhao1, Wei <wei.zhao1@intel.com>; Sun,
> GuinanX <guinanx.sun@intel.com>; Trakhtenberg, Dany
> <dany.trakhtenberg@intel.com>
> Subject: [PATCH 15/70] net/e1000/base: setup copper link function for i225
>
> 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.Trakhtenberg@intel.com>
> Signed-off-by: Guinan Sun <guinanx.sun@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
It seems we should commit to folder dpdk/drivers/net/igc/base not in e1000 folder for i225
> @@ -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;
> +
@@ -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
*
@@ -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