[dpdk-dev] [PATCH 33/39] net/ixgbe/base: add X550em_a FW ALEF support

2016-09-23 Thread Wang, Xiao W
Hi Wenzhuo,

> -Original Message-
> From: Lu, Wenzhuo
> Sent: Thursday, September 22, 2016 10:57 AM
> To: Yigit, Ferruh ; Wang, Xiao W
> 
> Cc: dev at dpdk.org
> Subject: RE: [dpdk-dev] [PATCH 33/39] net/ixgbe/base: add X550em_a FW ALEF
> support
> 
> Hi Xiao,
> 
> 
> > -Original Message-
> > From: Yigit, Ferruh
> > Sent: Tuesday, September 20, 2016 1:08 AM
> > To: Wang, Xiao W; Lu, Wenzhuo
> > Cc: dev at dpdk.org
> > Subject: Re: [dpdk-dev] [PATCH 33/39] net/ixgbe/base: add X550em_a FW
> ALEF
> > support
> >
> > On 8/27/2016 4:48 PM, Xiao Wang wrote:
> > > This patch adds X550em_a FW ALEF support for B0 per DCR 64. ALEF is
> >
> > Is it required more information on B0 and ALEF. Is there an official name 
> > for
> B0?
> I think we should focus on the change. Users will have no idea about B0.

OK, I will remove these info.


[dpdk-dev] [PATCH 33/39] net/ixgbe/base: add X550em_a FW ALEF support

2016-09-22 Thread Lu, Wenzhuo
Hi Xiao,


> -Original Message-
> From: Yigit, Ferruh
> Sent: Tuesday, September 20, 2016 1:08 AM
> To: Wang, Xiao W; Lu, Wenzhuo
> Cc: dev at dpdk.org
> Subject: Re: [dpdk-dev] [PATCH 33/39] net/ixgbe/base: add X550em_a FW ALEF
> support
> 
> On 8/27/2016 4:48 PM, Xiao Wang wrote:
> > This patch adds X550em_a FW ALEF support for B0 per DCR 64. ALEF is
> 
> Is it required more information on B0 and ALEF. Is there an official name for 
> B0?
I think we should focus on the change. Users will have no idea about B0.


[dpdk-dev] [PATCH 33/39] net/ixgbe/base: add X550em_a FW ALEF support

2016-09-19 Thread Ferruh Yigit
On 8/27/2016 4:48 PM, Xiao Wang wrote:
> This patch adds X550em_a FW ALEF support for B0 per DCR 64. ALEF is

Is it required more information on B0 and ALEF. Is there an official
name for B0?

> the new unified FW. The driver uses the KRM_PMD_RX_FLEX_PORT/
> FLX_MASK_ST20 registers to configure the lane mode.
> 
> Signed-off-by: Xiao Wang 
> ---




[dpdk-dev] [PATCH 33/39] net/ixgbe/base: add X550em_a FW ALEF support

2016-08-27 Thread Xiao Wang
This patch adds X550em_a FW ALEF support for B0 per DCR 64. ALEF is
the new unified FW. The driver uses the KRM_PMD_RX_FLEX_PORT/
FLX_MASK_ST20 registers to configure the lane mode.

Signed-off-by: Xiao Wang 
---
 drivers/net/ixgbe/base/ixgbe_type.h |  16 +++
 drivers/net/ixgbe/base/ixgbe_x550.c | 223 ++--
 2 files changed, 180 insertions(+), 59 deletions(-)

diff --git a/drivers/net/ixgbe/base/ixgbe_type.h 
b/drivers/net/ixgbe/base/ixgbe_type.h
index a3cc5e2..92c3e24 100644
--- a/drivers/net/ixgbe/base/ixgbe_type.h
+++ b/drivers/net/ixgbe/base/ixgbe_type.h
@@ -4162,9 +4162,25 @@ struct ixgbe_hw {
 #define IXGBE_KRM_DSP_TXFFE_STATE_5(P) ((P) ? 0x8638 : 0x4638)
 #define IXGBE_KRM_RX_TRN_LINKUP_CTRL(P)((P) ? 0x8B00 : 0x4B00)
 #define IXGBE_KRM_PMD_DFX_BURNIN(P)((P) ? 0x8E00 : 0x4E00)
+#define IXGBE_KRM_PMD_FLX_MASK_ST20(P) ((P) ? 0x9054 : 0x5054)
 #define IXGBE_KRM_TX_COEFF_CTRL_1(P)   ((P) ? 0x9520 : 0x5520)
 #define IXGBE_KRM_RX_ANA_CTL(P)((P) ? 0x9A00 : 0x5A00)

+#define IXGBE_KRM_PMD_FLX_MASK_ST20_SFI_10G_DA ~(0x3 << 20)
+#define IXGBE_KRM_PMD_FLX_MASK_ST20_SFI_10G_SR (1u << 20)
+#define IXGBE_KRM_PMD_FLX_MASK_ST20_SFI_10G_LR (0x2 << 20)
+#define IXGBE_KRM_PMD_FLX_MASK_ST20_SGMII_EN   (1u << 25)
+#define IXGBE_KRM_PMD_FLX_MASK_ST20_AN37_EN(1u << 26)
+#define IXGBE_KRM_PMD_FLX_MASK_ST20_AN_EN  (1u << 27)
+#define IXGBE_KRM_PMD_FLX_MASK_ST20_SPEED_10M  ~(0x7 << 28)
+#define IXGBE_KRM_PMD_FLX_MASK_ST20_SPEED_100M (1u << 28)
+#define IXGBE_KRM_PMD_FLX_MASK_ST20_SPEED_1G   (0x2 << 28)
+#define IXGBE_KRM_PMD_FLX_MASK_ST20_SPEED_10G  (0x3 << 28)
+#define IXGBE_KRM_PMD_FLX_MASK_ST20_SPEED_AN   (0x4 << 28)
+#define IXGBE_KRM_PMD_FLX_MASK_ST20_SPEED_2_5G (0x7 << 28)
+#define IXGBE_KRM_PMD_FLX_MASK_ST20_SPEED_MASK (0x7 << 28)
+#define IXGBE_KRM_PMD_FLX_MASK_ST20_FW_AN_RESTART  (1u << 31)
+
 #define IXGBE_KRM_PORT_CAR_GEN_CTRL_NELB_32B   (1 << 9)
 #define IXGBE_KRM_PORT_CAR_GEN_CTRL_NELB_KRPCS (1 << 11)

diff --git a/drivers/net/ixgbe/base/ixgbe_x550.c 
b/drivers/net/ixgbe/base/ixgbe_x550.c
index 19a554d..0cc7a3f 100644
--- a/drivers/net/ixgbe/base/ixgbe_x550.c
+++ b/drivers/net/ixgbe/base/ixgbe_x550.c
@@ -1607,6 +1607,53 @@ s32 ixgbe_setup_sfp_modules_X550em(struct ixgbe_hw *hw)
 }

 /**
+*  ixgbe_restart_an_internal_phy_x550em - restart autonegotiation for the
+*  internal PHY
+*  @hw: pointer to hardware structure
+**/
+STATIC s32 ixgbe_restart_an_internal_phy_x550em(struct ixgbe_hw *hw)
+{
+   s32 status;
+   u32 link_ctrl;
+
+   /* Restart auto-negotiation. */
+   status = hw->mac.ops.read_iosf_sb_reg(hw,
+  IXGBE_KRM_LINK_CTRL_1(hw->bus.lan_id),
+  IXGBE_SB_IOSF_TARGET_KR_PHY, &link_ctrl);
+
+   if (status) {
+   DEBUGOUT("Auto-negotiation did not complete\n");
+   return status;
+   }
+
+   link_ctrl |= IXGBE_KRM_LINK_CTRL_1_TETH_AN_RESTART;
+   status = hw->mac.ops.write_iosf_sb_reg(hw,
+   IXGBE_KRM_LINK_CTRL_1(hw->bus.lan_id),
+   IXGBE_SB_IOSF_TARGET_KR_PHY, link_ctrl);
+
+   if (hw->mac.type == ixgbe_mac_X550EM_a) {
+   u32 flx_mask_st20;
+
+   /* Indicate to FW that AN restart has been asserted */
+   status = hw->mac.ops.read_iosf_sb_reg(hw,
+   IXGBE_KRM_PMD_FLX_MASK_ST20(hw->bus.lan_id),
+   IXGBE_SB_IOSF_TARGET_KR_PHY, &flx_mask_st20);
+
+   if (status) {
+   DEBUGOUT("Auto-negotiation did not complete\n");
+   return status;
+   }
+
+   flx_mask_st20 |= IXGBE_KRM_PMD_FLX_MASK_ST20_FW_AN_RESTART;
+   status = hw->mac.ops.write_iosf_sb_reg(hw,
+   IXGBE_KRM_PMD_FLX_MASK_ST20(hw->bus.lan_id),
+   IXGBE_SB_IOSF_TARGET_KR_PHY, flx_mask_st20);
+   }
+
+   return status;
+}
+
+/**
  * ixgbe_setup_sgmii - Set up link for sgmii
  * @hw: pointer to hardware structure
  */
@@ -1614,7 +1661,7 @@ STATIC s32 ixgbe_setup_sgmii(struct ixgbe_hw *hw, 
ixgbe_link_speed speed,
 bool autoneg_wait)
 {
struct ixgbe_mac_info *mac = &hw->mac;
-   u32 lval, sval;
+   u32 lval, sval, flx_val;
s32 rc;

rc = mac->ops.read_iosf_sb_reg(hw,
@@ -1648,10 +1695,25 @@ STATIC s32 ixgbe_setup_sgmii(struct ixgbe_hw *hw, 
ixgbe_link_speed speed,
if (rc)
return rc;

-   lval |= IXGBE_KRM_LINK_CTRL_1_TETH_AN_RESTART;
+   rc = mac->ops.read_iosf_sb_reg(hw,
+   IXGBE_KRM_PMD_FLX_MASK_ST20(hw->bus.lan_id),
+   IXGBE_SB_IOSF_TARGET_KR_PHY, &flx_val);
+   if (