ixgbe: Add support for x550em_a MAC
Subsystems (2)
v4 cover ixgbe: Add support for x550em_a MAC
The following patches add support for a new ixgbe MAC type, x550em_a. The interfaces supported are native SFP+, SFP+ with a retimer, SGMII backplane and KR backplane.
---
This series replaces two previous series of patches:
ixgbe: Add initial support for a new ixgbe MAC
ixgbe: Add KR and SFP+ interfaces to X550EM_A
with some reorganization, a couple bug fixes and incorporation of other feedback. This series also adds the SGMII backplane support which was not included in the previous 2 series.
Changes in V2 of this series:
- Corrected endianness of IOSF data accessed by firmware Changes in V3 of this series:
- Moved a mac type check into ixgbe_setup_kr_x550em Changes in V4 of this series:
- Patch 4 was replaced with different patch to implement a new PHY access method. The previous patch resuled in a failure on other MACs.
---
Mark D Rustad (11):
ixgbe: Add definitions for x550em_a 10G MAC
ixgbe: Use method pointer to access IOSF devices
ixgbe: Add support for x550em_a 10G MAC type
ixgbe: Use new methods for PHY access
ixgbe: Read and set instance id
ixgbe: Read and parse NW_MNG_IF_SEL register
ixgbe: Introduce function to control MDIO speed
ixgbe: Add support for SFPs with retimer
ixgbe: Add support for SGMII backplane interface
ixgbe: Add KR backplane support for x550em_a
ixgbe: Bump version number
drivers/net/ethernet/intel/ixgbe/ixgbe.h | 3 drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c | 1 drivers/net/ethernet/intel/ixgbe/ixgbe_common.c | 9 drivers/net/ethernet/intel/ixgbe/ixgbe_dcb.c | 6 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 9 drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c | 3 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 51 ++ drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.c | 2 drivers/net/ethernet/intel/ixgbe/ixgbe_phy.h | 6 drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c | 6 drivers/net/ethernet/intel/ixgbe/ixgbe_type.h | 88 +++ drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c | 576 +++++++++++++++++++++- 12 files changed, 714 insertions(+), 46 deletions(-)
Signature · 1 line
Mark Rustad, Network Division, Intel Corporation
PATCH v4 1/11 ixgbe: Add definitions for x550em_a 10G MAC
Add definitions for a x550em_a 10G MAC device with a native SFP interface.
--- drivers/net/ethernet/intel/ixgbe/ixgbe_type.h | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-)
drivers/net/ethernet/intel/ixgbe/ixgbe_type.h +18 -4
@@ -80,16 +80,18 @@#define IXGBE_DEV_ID_X550EM_X_SFP 0x15AC#define IXGBE_DEV_ID_X550EM_X_10G_T 0x15AD#define IXGBE_DEV_ID_X550EM_X_1G_T 0x15AE +#define IXGBE_DEV_ID_X550EM_A_SFP_N 0x15C4 + +/* VF Device IDs */ #define IXGBE_DEV_ID_X550_VF_HV 0x1564#define IXGBE_DEV_ID_X550_VF 0x1565#define IXGBE_DEV_ID_X550EM_X_VF 0x15A8#define IXGBE_DEV_ID_X550EM_X_VF_HV 0x15A9 - -/* VF Device IDs */ #define IXGBE_DEV_ID_82599_VF 0x10ED#define IXGBE_DEV_ID_X540_VF 0x1515#define IXGBE_DEV_ID_X550_VF 0x1565#define IXGBE_DEV_ID_X550EM_X_VF 0x15A8 +#define IXGBE_DEV_ID_X550EM_A_VF 0x15C5#define IXGBE_CAT (r, m) IXGBE_##r##_##m
@@ -128,7 +130,7 @@#define IXGBE_FLA_X540 IXGBE_FLA_8259X#define IXGBE_FLA_X550 IXGBE_FLA_8259X#define IXGBE_FLA_X550EM_x IXGBE_FLA_8259X -#define IXGBE_FLA_X550EM_a 0x15F6C +#define IXGBE_FLA_X550EM_a 0x15F68#define IXGBE_FLA (_hw) IXGBE_BY_MAC((_hw), FLA)#define IXGBE_EEMNGCTL 0x10110#define IXGBE_EEMNGDATA 0x10114
@@ -368,6 +370,8 @@ struct ixgbe_thermal_sensor_data {#define IXGBE_MRCTL (_i) (0x0F600 + ((_i) * 4))#define IXGBE_VMRVLAN (_i) (0x0F610 + ((_i) * 4))#define IXGBE_VMRVM (_i) (0x0F630 + ((_i) * 4)) +#define IXGBE_WQBR_RX (_i) (0x2FB0 + ((_i) * 4))/* 4 total */ +#define IXGBE_WQBR_TX (_i) (0x8130 + ((_i) * 4))/* 4 total */ #define IXGBE_L34T_IMIR (_i) (0x0E800 + ((_i) * 4))/*128 of these (0-127)*/ #define IXGBE_RXFECCERR0 0x051B8#define IXGBE_LLITHRESH 0x0EC90
@@ -439,6 +443,8 @@ struct ixgbe_thermal_sensor_data {#define IXGBE_DMATXCTL_TE 0x1/* Transmit Enable */ #define IXGBE_DMATXCTL_NS 0x2/* No Snoop LSO hdr buffer */ #define IXGBE_DMATXCTL_GDV 0x8/* Global Double VLAN */ +#define IXGBE_DMATXCTL_MDP_EN 0x20/* Bit 5 */ +#define IXGBE_DMATXCTL_MBINTEN 0x40/* Bit 6 */ #define IXGBE_DMATXCTL_VT_SHIFT 16/* VLAN EtherType */ #define IXGBE_PFDTXGSWC_VT_LBEN 0x1/* Local L2 VT switch enable */
@@ -547,7 +553,6 @@ struct ixgbe_thermal_sensor_data {#define IXGBE_TDPT2TCCR (_i) (0x0CD20 + ((_i) * 4))/* 8 of these (0-7) */ #define IXGBE_TDPT2TCSR (_i) (0x0CD40 + ((_i) * 4))/* 8 of these (0-7) */ -/* Security Control Registers */ #define IXGBE_SECTXCTRL 0x08800#define IXGBE_SECTXSTAT 0x08804
@@ -1196,6 +1201,8 @@ struct ixgbe_thermal_sensor_data {#define IXGBE_RDRXCTL_RSCLLIDIS 0x00800000/* Disable RSC compl on LLI */ #define IXGBE_RDRXCTL_RSCACKC 0x02000000/* must set 1 when RSC enabled */ #define IXGBE_RDRXCTL_FCOE_WRFIX 0x04000000/* must set 1 when RSC enabled */ +#define IXGBE_RDRXCTL_MBINTEN 0x10000000 +#define IXGBE_RDRXCTL_MDP_EN 0x20000000/* RQTC Bit Masks and Shifts */ #define IXGBE_RQTC_SHIFT_TC (_i) ((_i) * 4)
@@ -1950,7 +1957,9 @@ enum {#define IXGBE_GSSR_PHY1_SM 0x0004#define IXGBE_GSSR_MAC_CSR_SM 0x0008#define IXGBE_GSSR_FLASH_SM 0x0010 +#define IXGBE_GSSR_NVM_UPDATE_SM 0x0200#define IXGBE_GSSR_SW_MNG_SM 0x0400 +#define IXGBE_GSSR_TOKEN_SM 0x40000000/* SW bit for shared access */ #define IXGBE_GSSR_SHARED_I2C_SM 0x1806/* Wait for both phys & I2Cs */ #define IXGBE_GSSR_I2C_MASK 0x1800#define IXGBE_GSSR_NVM_PHY_MASK 0xF
@@ -2523,6 +2532,10 @@ enum ixgbe_fdir_pballoc_type {#define IXGBE_FDIRCTRL_REPORT_STATUS_ALWAYS 0x00000080#define IXGBE_FDIRCTRL_DROP_Q_SHIFT 8#define IXGBE_FDIRCTRL_FLEX_SHIFT 16 +#define IXGBE_FDIRCTRL_DROP_NO_MATCH 0x00008000 +#define IXGBE_FDIRCTRL_FILTERMODE_SHIFT 21 +#define IXGBE_FDIRCTRL_FILTERMODE_MACVLAN 0x0001/* bit 23:21, 001b */ +#define IXGBE_FDIRCTRL_FILTERMODE_CLOUD 0x0002/* bit 23:21, 010b */ #define IXGBE_FDIRCTRL_SEARCHLIM 0x00800000#define IXGBE_FDIRCTRL_MAX_LENGTH_SHIFT 24#define IXGBE_FDIRCTRL_FULL_THRESH_MASK 0xF0000000
@@ -2981,6 +2994,7 @@ enum ixgbe_mac_type { ixgbe_mac_X540, ixgbe_mac_X550, ixgbe_mac_X550EM_x, + ixgbe_mac_x550em_a, ixgbe_num_macs };
PATCH v4 2/11 ixgbe: Use method pointer to access IOSF devices
In reply to Mark D RustadProvide method pointers and use them to access IOSF-attached devices. A new MAC will introduce a new access method.
--- drivers/net/ethernet/intel/ixgbe/ixgbe_type.h | 2 ++ drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c | 32 ++++++++++++++----------- 2 files changed, 20 insertions(+), 14 deletions(-)
drivers/net/ethernet/intel/ixgbe/ixgbe_type.h +2 -0
@@ -3331,6 +3331,8 @@ struct ixgbe_mac_operations {s32 (*dmac_config)(struct ixgbe_hw *hw);s32 (*dmac_update_tcs)(struct ixgbe_hw *hw);s32 (*dmac_config_tcs)(struct ixgbe_hw *hw); +s32 (*read_iosf_sb_reg)(struct ixgbe_hw *,u32 ,u32 ,u32 *); +s32 (*write_iosf_sb_reg)(struct ixgbe_hw *,u32 ,u32 ,u32 ); };struct ixgbe_phy_operations {
drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c +18 -14
@@ -1615,7 +1615,7 @@ static s32 ixgbe_setup_kr_speed_x550em(struct ixgbe_hw *hw,s32 status;u32 reg_val; - status =ixgbe_read_iosf_sb_reg_x550 (hw, + status = hw->mac.ops.read_iosf_sb_reg (hw,IXGBE_KRM_LINK_CTRL_1 (hw->bus.lan_id),IXGBE_SB_IOSF_TARGET_KR_PHY , ®_val);if (status)
@@ -1637,7 +1637,7 @@ static s32 ixgbe_setup_kr_speed_x550em(struct ixgbe_hw *hw,/* Restart auto-negotiation. */ reg_val |=IXGBE_KRM_LINK_CTRL_1_TETH_AN_RESTART ; - status =ixgbe_write_iosf_sb_reg_x550 (hw, + status = hw->mac.ops.write_iosf_sb_reg (hw,IXGBE_KRM_LINK_CTRL_1 (hw->bus.lan_id),IXGBE_SB_IOSF_TARGET_KR_PHY , reg_val);
@@ -1654,9 +1654,9 @@ static s32 ixgbe_setup_kx4_x550em(struct ixgbe_hw *hw)s32 status;u32 reg_val; - status =ixgbe_read_iosf_sb_reg_x550 (hw,IXGBE_KX4_LINK_CNTL_1 , -IXGBE_SB_IOSF_TARGET_KX4_PCS0 + - hw->bus.lan_id, ®_val); + status = hw->mac.ops.read_iosf_sb_reg (hw,IXGBE_KX4_LINK_CNTL_1 , +IXGBE_SB_IOSF_TARGET_KX4_PCS0 + + hw->bus.lan_id, ®_val);if (status)return status;
@@ -1675,9 +1675,9 @@ static s32 ixgbe_setup_kx4_x550em(struct ixgbe_hw *hw)/* Restart auto-negotiation. */ reg_val |=IXGBE_KX4_LINK_CNTL_1_TETH_AN_RESTART ; - status =ixgbe_write_iosf_sb_reg_x550 (hw,IXGBE_KX4_LINK_CNTL_1 , -IXGBE_SB_IOSF_TARGET_KX4_PCS0 + - hw->bus.lan_id, reg_val); + status = hw->mac.ops.write_iosf_sb_reg (hw,IXGBE_KX4_LINK_CNTL_1 , +IXGBE_SB_IOSF_TARGET_KX4_PCS0 + + hw->bus.lan_id, reg_val);return status; }
@@ -1897,9 +1897,10 @@ static s32 ixgbe_setup_fc_x550em(struct ixgbe_hw *hw)if (hw->device_id !=IXGBE_DEV_ID_X550EM_X_KR )return 0 ; - rc =ixgbe_read_iosf_sb_reg_x550 (hw, -IXGBE_KRM_AN_CNTL_1 (hw->bus.lan_id), -IXGBE_SB_IOSF_TARGET_KR_PHY , ®_val); + rc = hw->mac.ops.read_iosf_sb_reg (hw, +IXGBE_KRM_AN_CNTL_1 (hw->bus.lan_id), +IXGBE_SB_IOSF_TARGET_KR_PHY , + ®_val);if (rc)return rc;
@@ -1909,9 +1910,10 @@ static s32 ixgbe_setup_fc_x550em(struct ixgbe_hw *hw) reg_val |=IXGBE_KRM_AN_CNTL_1_SYM_PAUSE ;if (asm_dir) reg_val |=IXGBE_KRM_AN_CNTL_1_ASM_PAUSE ; - rc =ixgbe_write_iosf_sb_reg_x550 (hw, -IXGBE_KRM_AN_CNTL_1 (hw->bus.lan_id), -IXGBE_SB_IOSF_TARGET_KR_PHY , reg_val); + rc = hw->mac.ops.write_iosf_sb_reg (hw, +IXGBE_KRM_AN_CNTL_1 (hw->bus.lan_id), +IXGBE_SB_IOSF_TARGET_KR_PHY , + reg_val);/* This device does not fully support AN. */ hw->fc.disable_fc_autoneg = true;
@@ -2449,6 +2451,8 @@ static const struct ixgbe_mac_operations mac_ops_X550EM_x = { .release_swfw_sync = &ixgbe_release_swfw_sync_X550em, .init_swfw_sync = &ixgbe_init_swfw_sync_X540, .setup_fc = NULL, /* defined later */ + .read_iosf_sb_reg = ixgbe_read_iosf_sb_reg_x550, + .write_iosf_sb_reg = ixgbe_write_iosf_sb_reg_x550, };#define X550_COMMON_EEP \
PATCH v4 3/11 ixgbe: Add support for x550em_a 10G MAC type
In reply to Mark D RustadAdd support for x550em_a 10G MAC type to the ixgbe driver. The new MAC includes new firmware commands that need to be used to control PHY and IOSF access, so that support is also added. The interface supported is a native SFP+ interface.
---
Changes in V2:
- Correct endianness of firmware interface for iosf read/write data
--- drivers/net/ethernet/intel/ixgbe/ixgbe.h | 3 drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c | 1 drivers/net/ethernet/intel/ixgbe/ixgbe_common.c | 1 drivers/net/ethernet/intel/ixgbe/ixgbe_dcb.c | 6 + drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 9 + drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c | 3 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 43 ++++- drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.c | 2 drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c | 6 + drivers/net/ethernet/intel/ixgbe/ixgbe_type.h | 38 ++++ drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c | 208 ++++++++++++++++++++++ 11 files changed, 311 insertions(+), 9 deletions(-)
drivers/net/ethernet/intel/ixgbe/ixgbe.h +3 -0
@@ -817,6 +817,7 @@ static inline u8 ixgbe_max_rss_indices(struct ixgbe_adapter *adapter)return IXGBE_MAX_RSS_INDICES ;case ixgbe_mac_X550:case ixgbe_mac_X550EM_x: +case ixgbe_mac_x550em_a:return IXGBE_MAX_RSS_INDICES_X550 ;default :return 0 ;
@@ -860,6 +861,7 @@ enum ixgbe_boards { board_X540, board_X550, board_X550EM_x, + board_x550em_a, };extern const struct ixgbe_info ixgbe_82598_info;
@@ -867,6 +869,7 @@ extern const struct ixgbe_info ixgbe_82599_info;extern const struct ixgbe_info ixgbe_X540_info;extern const struct ixgbe_info ixgbe_X550_info;extern const struct ixgbe_info ixgbe_X550EM_x_info; +extern const struct ixgbe_info ixgbe_x550em_a_info;#ifdef CONFIG_IXGBE_DCB extern const struct dcbnl_rtnl_ops dcbnl_ops;#endif
drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c +1 -0
@@ -1633,6 +1633,7 @@ s32 ixgbe_fdir_set_input_mask_82599(struct ixgbe_hw *hw,switch (hw->mac.type) {case ixgbe_mac_X550:case ixgbe_mac_X550EM_x: +case ixgbe_mac_x550em_a:IXGBE_WRITE_REG (hw,IXGBE_FDIRSCTPM , ~fdirtcpm);break ;default :
drivers/net/ethernet/intel/ixgbe/ixgbe_common.c +1 -0
@@ -2854,6 +2854,7 @@ u16 ixgbe_get_pcie_msix_count_generic(struct ixgbe_hw *hw)case ixgbe_mac_X540:case ixgbe_mac_X550:case ixgbe_mac_X550EM_x: +case ixgbe_mac_x550em_a: pcie_offset =IXGBE_PCIE_MSIX_82599_CAPS ; max_msix_count =IXGBE_MAX_MSIX_VECTORS_82599 ;break ;
drivers/net/ethernet/intel/ixgbe/ixgbe_dcb.c +5 -1
@@ -1,7 +1,7 @@/******************************************************************************* Intel 10 Gigabit PCI Express Linux driver -Copyright(c) 1999 - 2014 Intel Corporation. +Copyright(c) 1999 - 2016 Intel Corporation. This program is free software; you can redistribute it and/or modify it under the terms and conditions of the GNU General Public License,
@@ -293,6 +293,7 @@ s32 ixgbe_dcb_hw_config(struct ixgbe_hw *hw,case ixgbe_mac_X540:case ixgbe_mac_X550:case ixgbe_mac_X550EM_x: +case ixgbe_mac_x550em_a:return ixgbe_dcb_hw_config_82599 (hw, pfc_en, refill, max, bwgid, ptype, prio_tc);default :
@@ -311,6 +312,7 @@ s32 ixgbe_dcb_hw_pfc_config(struct ixgbe_hw *hw, u8 pfc_en, u8 *prio_tc)case ixgbe_mac_X540:case ixgbe_mac_X550:case ixgbe_mac_X550EM_x: +case ixgbe_mac_x550em_a:return ixgbe_dcb_config_pfc_82599 (hw, pfc_en, prio_tc);default :break ;
@@ -368,6 +370,7 @@ s32 ixgbe_dcb_hw_ets_config(struct ixgbe_hw *hw,case ixgbe_mac_X540:case ixgbe_mac_X550:case ixgbe_mac_X550EM_x: +case ixgbe_mac_x550em_a:ixgbe_dcb_config_rx_arbiter_82599 (hw, refill, max, bwg_id, prio_type, prio_tc); ixgbe_dcb_config_tx_desc_arbiter_82599(hw, refill, max,
@@ -398,6 +401,7 @@ void ixgbe_dcb_read_rtrup2tc(struct ixgbe_hw *hw, u8 *map)case ixgbe_mac_X540:case ixgbe_mac_X550:case ixgbe_mac_X550EM_x: +case ixgbe_mac_x550em_a:ixgbe_dcb_read_rtrup2tc_82599 (hw, map);break ;default :
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c +8 -1
@@ -1,7 +1,7 @@/******************************************************************************* Intel 10 Gigabit PCI Express Linux driver -Copyright(c) 1999 - 2014 Intel Corporation. +Copyright(c) 1999 - 2016 Intel Corporation. This program is free software; you can redistribute it and/or modify it under the terms and conditions of the GNU General Public License,
@@ -549,6 +549,7 @@ static void ixgbe_get_regs(struct net_device *netdev,case ixgbe_mac_X540:case ixgbe_mac_X550:case ixgbe_mac_X550EM_x: +case ixgbe_mac_x550em_a: regs_buff[35 + i] =IXGBE_READ_REG (hw,IXGBE_FCRTL_82599 (i)); regs_buff[43 + i] =IXGBE_READ_REG (hw,IXGBE_FCRTH_82599 (i));break ;
@@ -662,6 +663,7 @@ static void ixgbe_get_regs(struct net_device *netdev,case ixgbe_mac_X540:case ixgbe_mac_X550:case ixgbe_mac_X550EM_x: +case ixgbe_mac_x550em_a: regs_buff[830 ] =IXGBE_READ_REG (hw,IXGBE_RTTDCS ); regs_buff[832 ] =IXGBE_READ_REG (hw,IXGBE_RTRPCS );for (i =0 ; i <8 ; i++)
@@ -1445,6 +1447,7 @@ static int ixgbe_reg_test(struct ixgbe_adapter *adapter, u64 *data)case ixgbe_mac_X540:case ixgbe_mac_X550:case ixgbe_mac_X550EM_x: +case ixgbe_mac_x550em_a: toggle =0x7FFFF30F ; test = reg_test_82599;break ;
@@ -1683,6 +1686,7 @@ static void ixgbe_free_desc_rings(struct ixgbe_adapter *adapter)case ixgbe_mac_X540:case ixgbe_mac_X550:case ixgbe_mac_X550EM_x: +case ixgbe_mac_x550em_a: reg_ctl =IXGBE_READ_REG (hw,IXGBE_DMATXCTL ); reg_ctl &= ~IXGBE_DMATXCTL_TE ;IXGBE_WRITE_REG (hw,IXGBE_DMATXCTL , reg_ctl);
@@ -1722,6 +1726,7 @@ static int ixgbe_setup_desc_rings(struct ixgbe_adapter *adapter)case ixgbe_mac_X540:case ixgbe_mac_X550:case ixgbe_mac_X550EM_x: +case ixgbe_mac_x550em_a: reg_data =IXGBE_READ_REG (&adapter->hw,IXGBE_DMATXCTL ); reg_data |=IXGBE_DMATXCTL_TE ;IXGBE_WRITE_REG (&adapter->hw,IXGBE_DMATXCTL , reg_data);
@@ -1782,6 +1787,7 @@ static int ixgbe_setup_loopback_test(struct ixgbe_adapter *adapter)case ixgbe_mac_X540:case ixgbe_mac_X550:case ixgbe_mac_X550EM_x: +case ixgbe_mac_x550em_a: reg_data =IXGBE_READ_REG (hw,IXGBE_MACC ); reg_data |=IXGBE_MACC_FLU ;IXGBE_WRITE_REG (hw,IXGBE_MACC , reg_data);
@@ -2993,6 +2999,7 @@ static int ixgbe_get_ts_info(struct net_device *dev,switch (adapter->hw.mac.type) {case ixgbe_mac_X550:case ixgbe_mac_X550EM_x: +case ixgbe_mac_x550em_a:case ixgbe_mac_X540:case ixgbe_mac_82599EB: info->so_timestamping =
drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c +2 -1
@@ -1,7 +1,7 @@/******************************************************************************* Intel 10 Gigabit PCI Express Linux driver -Copyright(c) 1999 - 2013 Intel Corporation. +Copyright(c) 1999 - 2016 Intel Corporation. This program is free software; you can redistribute it and/or modify it under the terms and conditions of the GNU General Public License,
@@ -128,6 +128,7 @@ static void ixgbe_get_first_reg_idx(struct ixgbe_adapter *adapter, u8 tc,case ixgbe_mac_X540:case ixgbe_mac_X550:case ixgbe_mac_X550EM_x: +case ixgbe_mac_x550em_a:if (num_tcs >4 ) {/* * TCs : TC0/1 TC2/3 TC4-7
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +40 -3
253 lines not on this page · raw message
drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.c +2 -0
@@ -307,6 +307,7 @@ static s32 ixgbe_check_for_rst_pf(struct ixgbe_hw *hw, u16 vf_number)case ixgbe_mac_X540:case ixgbe_mac_X550:case ixgbe_mac_X550EM_x: +case ixgbe_mac_x550em_a: vflre =IXGBE_READ_REG (hw,IXGBE_VFLREC (reg_offset));break ;default :
@@ -430,6 +431,7 @@ void ixgbe_init_mbx_params_pf(struct ixgbe_hw *hw)if (hw->mac.type != ixgbe_mac_82599EB && hw->mac.type != ixgbe_mac_X550 && hw->mac.type != ixgbe_mac_X550EM_x && + hw->mac.type != ixgbe_mac_x550em_a && hw->mac.type != ixgbe_mac_X540)return ;
drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c +5 -1
@@ -1,7 +1,7 @@/******************************************************************************* Intel 10 Gigabit PCI Express Linux driver -Copyright(c) 1999 - 2015 Intel Corporation. +Copyright(c) 1999 - 2016 Intel Corporation. This program is free software; you can redistribute it and/or modify it under the terms and conditions of the GNU General Public License,
@@ -333,6 +333,7 @@ static void ixgbe_ptp_convert_to_hwtstamp(struct ixgbe_adapter *adapter,*/ case ixgbe_mac_X550:case ixgbe_mac_X550EM_x: +case ixgbe_mac_x550em_a:/* Upper 32 bits represent billions of cycles, lower 32 bits * represent cycles. However, we use timespec64_to_ns for the * correct math even though the units haven't been corrected
@@ -921,6 +922,7 @@ static int ixgbe_ptp_set_timestamp_mode(struct ixgbe_adapter *adapter,switch (hw->mac.type) {case ixgbe_mac_X550:case ixgbe_mac_X550EM_x: +case ixgbe_mac_x550em_a:/* enable timestamping all packets only if at least some * packets were requested. Otherwise, play nice and disable * timestamping
@@ -1083,6 +1085,7 @@ void ixgbe_ptp_start_cyclecounter(struct ixgbe_adapter *adapter) cc.shift =2 ; }/* fallthrough */ +case ixgbe_mac_x550em_a:case ixgbe_mac_X550: cc.read = ixgbe_ptp_read_X550;
@@ -1223,6 +1226,7 @@ static long ixgbe_ptp_create_clock(struct ixgbe_adapter *adapter)break ;case ixgbe_mac_X550:case ixgbe_mac_X550EM_x: +case ixgbe_mac_x550em_a:snprintf (adapter->ptp_caps.name,16 ,"%s" , netdev->name); adapter->ptp_caps.owner =THIS_MODULE ; adapter->ptp_caps.max_adj =30000000 ;
drivers/net/ethernet/intel/ixgbe/ixgbe_type.h +38 -0
@@ -2626,6 +2626,20 @@ enum ixgbe_fdir_pballoc_type {#define FW_MAX_READ_BUFFER_SIZE 1024#define FW_DISABLE_RXEN_CMD 0xDE#define FW_DISABLE_RXEN_LEN 0x1 +#define FW_PHY_MGMT_REQ_CMD 0x20 +#define FW_PHY_TOKEN_REQ_CMD 0x0A +#define FW_PHY_TOKEN_REQ_LEN 2 +#define FW_PHY_TOKEN_REQ 0 +#define FW_PHY_TOKEN_REL 1 +#define FW_PHY_TOKEN_OK 1 +#define FW_PHY_TOKEN_RETRY 0x80 +#define FW_PHY_TOKEN_DELAY 5/* milliseconds */ +#define FW_PHY_TOKEN_WAIT 5/* seconds */ +#define FW_PHY_TOKEN_RETRIES ((FW_PHY_TOKEN_WAIT * 1000) / FW_PHY_TOKEN_DELAY) +#define FW_INT_PHY_REQ_CMD 0xB +#define FW_INT_PHY_REQ_LEN 10 +#define FW_INT_PHY_REQ_READ 0 +#define FW_INT_PHY_REQ_WRITE 1/* Host Interface Command Structures */ struct ixgbe_hic_hdr {
@@ -2694,6 +2708,28 @@ struct ixgbe_hic_disable_rxen {u16 pad3; }; +struct ixgbe_hic_phy_token_req { +struct ixgbe_hic_hdr hdr; +u8 port_number; +u8 command_type; +u16 pad; +}; + +struct ixgbe_hic_internal_phy_req { +struct ixgbe_hic_hdr hdr; +u8 port_number; +u8 command_type; +__be16 address; +u16 rsv1; +__le32 write_data; +u16 pad; +} __packed; + +struct ixgbe_hic_internal_phy_resp { +struct ixgbe_hic_hdr hdr; +__le32 read_data; +}; +/* Transmit Descriptor - Advanced */ union ixgbe_adv_tx_desc { struct {
@@ -3527,6 +3563,8 @@ struct ixgbe_info {#define IXGBE_ERR_INVALID_ARGUMENT -32#define IXGBE_ERR_HOST_INTERFACE_COMMAND -33#define IXGBE_ERR_FDIR_CMD_INCOMPLETE -38 +#define IXGBE_ERR_FW_RESP_INVALID -39 +#define IXGBE_ERR_TOKEN_RETRY -40#define IXGBE_NOT_IMPLEMENTED 0x7FFFFFFF#define IXGBE_FUSES0_GROUP (_i) (0x11158 + ((_i) * 4))
drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c +206 -2
265 lines not on this page · raw message
PATCH v4 4/11 ixgbe: Use new methods for PHY access
In reply to Mark D RustadNow x550em_a devices will use a new method for PHY access that will get the firmware token for each access.
---
Changes in V4:
- This is a complete replacement of what was the 4th patch in the series
- x550em_a requires a new phy access method, so this patch implements it
--- drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c | 67 ++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 3 deletions(-)
drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c +64 -3
@@ -2548,6 +2548,57 @@ static void ixgbe_release_swfw_sync_x550em_a(struct ixgbe_hw *hw, u32 mask)ixgbe_release_swfw_sync_X540 (hw, hmask); } +/** +* ixgbe_read_phy_reg_x550a - Reads specified PHY register +* @hw: pointer to hardware structure +* @reg_addr: 32 bit address of PHY register to read +* @phy_data: Pointer to read data from PHY register +* +* Reads a value from a specified PHY register using the SWFW lock and PHY +* Token. The PHY Token is needed since the MDIO is shared between to MAC +* instances. +*/ +static s32 ixgbe_read_phy_reg_x550a (struct ixgbe_hw *hw,u32 reg_addr, +u32 device_type,u16 *phy_data) +{ +u32 mask = hw->phy.phy_semaphore_mask |IXGBE_GSSR_TOKEN_SM ; +s32 status; + +if (hw->mac.ops.acquire_swfw_sync (hw, mask)) +return IXGBE_ERR_SWFW_SYNC ; + + status = hw->phy.ops.read_reg_mdi (hw, reg_addr, device_type, phy_data); + + hw->mac.ops.release_swfw_sync (hw, mask); + +return status; +} + +/** +* ixgbe_write_phy_reg_x550a - Writes specified PHY register +* @hw: pointer to hardware structure +* @reg_addr: 32 bit PHY register to write +* @device_type: 5 bit device type +* @phy_data: Data to write to the PHY register +* +* Writes a value to specified PHY register using the SWFW lock and PHY Token. +* The PHY Token is needed since the MDIO is shared between to MAC instances. +*/ +static s32 ixgbe_write_phy_reg_x550a (struct ixgbe_hw *hw,u32 reg_addr, +u32 device_type,u16 phy_data) +{ +u32 mask = hw->phy.phy_semaphore_mask |IXGBE_GSSR_TOKEN_SM ; +s32 status; + +if (hw->mac.ops.acquire_swfw_sync (hw, mask)) +return IXGBE_ERR_SWFW_SYNC ; + + status =ixgbe_write_phy_reg_mdi (hw, reg_addr, device_type, phy_data); + hw->mac.ops.release_swfw_sync (hw, mask); + +return status; +} +#define X550_COMMON_MAC \ .init_hw = &ixgbe_init_hw_generic, \ .start_hw = &ixgbe_start_hw_X540, \
@@ -2673,8 +2724,6 @@ static const struct ixgbe_eeprom_operations eeprom_ops_X550EM_x = { .read_i2c_sff8472 = &ixgbe_read_i2c_sff8472_generic, \ .read_i2c_eeprom = &ixgbe_read_i2c_eeprom_generic, \ .write_i2c_eeprom = &ixgbe_write_i2c_eeprom_generic, \ - .read_reg = &ixgbe_read_phy_reg_generic, \ - .write_reg = &ixgbe_write_phy_reg_generic, \ .setup_link = &ixgbe_setup_phy_link_generic, \ .set_phy_power = NULL, \ .check_overtemp = &ixgbe_tn_check_overtemp, \
@@ -2684,12 +2733,16 @@ static const struct ixgbe_phy_operations phy_ops_X550 = {X550_COMMON_PHY .init = NULL, .identify = &ixgbe_identify_phy_generic, + .read_reg = &ixgbe_read_phy_reg_generic, + .write_reg = &ixgbe_write_phy_reg_generic, };static const struct ixgbe_phy_operations phy_ops_X550EM_x = {X550_COMMON_PHY .init = &ixgbe_init_phy_ops_X550em, .identify = &ixgbe_identify_phy_x550em, + .read_reg = &ixgbe_read_phy_reg_generic, + .write_reg = &ixgbe_write_phy_reg_generic, .read_i2c_combined = &ixgbe_read_i2c_combined_generic, .write_i2c_combined = &ixgbe_write_i2c_combined_generic, .read_i2c_combined_unlocked = &ixgbe_read_i2c_combined_generic_unlocked,
@@ -2697,6 +2750,14 @@ static const struct ixgbe_phy_operations phy_ops_X550EM_x = { &ixgbe_write_i2c_combined_generic_unlocked, }; +static const struct ixgbe_phy_operations phy_ops_x550em_a = { +X550_COMMON_PHY + .init = &ixgbe_init_phy_ops_X550em, + .identify = &ixgbe_identify_phy_x550em, + .read_reg = &ixgbe_read_phy_reg_x550a, + .write_reg = &ixgbe_write_phy_reg_x550a, +}; +static const u32 ixgbe_mvals_X550[IXGBE_MVALS_IDX_LIMIT ] = {IXGBE_MVALS_INIT (X550 ) };
@@ -2734,7 +2795,7 @@ const struct ixgbe_info ixgbe_x550em_a_info = { .get_invariants = &ixgbe_get_invariants_X550_x, .mac_ops = &mac_ops_x550em_a, .eeprom_ops = &eeprom_ops_X550EM_x, - .phy_ops = &phy_ops_X550EM_x, + .phy_ops = &phy_ops_x550em_a, .mbx_ops = &mbx_ops_generic, .mvals = ixgbe_mvals_x550em_a, };
PATCH v4 5/11 ixgbe: Read and set instance id
In reply to Mark D RustadRead the instance number from EEPROM and save it for later use.
--- drivers/net/ethernet/intel/ixgbe/ixgbe_common.c | 8 ++++++++ drivers/net/ethernet/intel/ixgbe/ixgbe_type.h | 5 +++++ 2 files changed, 13 insertions(+)
drivers/net/ethernet/intel/ixgbe/ixgbe_common.c +8 -0
@@ -681,6 +681,7 @@ s32 ixgbe_get_bus_info_generic(struct ixgbe_hw *hw)void ixgbe_set_lan_id_multi_port_pcie (struct ixgbe_hw *hw) {struct ixgbe_bus_info *bus = &hw->bus; +u16 ee_ctrl_4;u32 reg; reg =IXGBE_READ_REG (hw,IXGBE_STATUS );
@@ -691,6 +692,13 @@ void ixgbe_set_lan_id_multi_port_pcie(struct ixgbe_hw *hw) reg =IXGBE_READ_REG (hw,IXGBE_FACTPS (hw));if (reg &IXGBE_FACTPS_LFS ) bus->func ^=0x1 ; + +/* Get MAC instance from EEPROM for configuring CS4227 */ +if (hw->device_id ==IXGBE_DEV_ID_X550EM_A_SFP ) { + hw->eeprom.ops.read (hw,IXGBE_EEPROM_CTRL_4 , &ee_ctrl_4); + bus->instance_id = (ee_ctrl_4 &IXGBE_EE_CTRL_4_INST_ID ) >> +IXGBE_EE_CTRL_4_INST_ID_SHIFT ; + } }/**
drivers/net/ethernet/intel/ixgbe/ixgbe_type.h +5 -0
@@ -81,6 +81,7 @@#define IXGBE_DEV_ID_X550EM_X_10G_T 0x15AD#define IXGBE_DEV_ID_X550EM_X_1G_T 0x15AE#define IXGBE_DEV_ID_X550EM_A_SFP_N 0x15C4 +#define IXGBE_DEV_ID_X550EM_A_SFP 0x15CE/* VF Device IDs */ #define IXGBE_DEV_ID_X550_VF_HV 0x1564
@@ -1999,6 +2000,9 @@ enum {#define IXGBE_PBANUM_PTR_GUARD 0xFAFA#define IXGBE_EEPROM_CHECKSUM 0x3F#define IXGBE_EEPROM_SUM 0xBABA +#define IXGBE_EEPROM_CTRL_4 0x45 +#define IXGBE_EE_CTRL_4_INST_ID 0x10 +#define IXGBE_EE_CTRL_4_INST_ID_SHIFT 4#define IXGBE_PCIE_ANALOG_PTR 0x03#define IXGBE_ATLAS0_CONFIG_PTR 0x04#define IXGBE_PHY_PTR 0x04
@@ -3174,6 +3178,7 @@ struct ixgbe_bus_info {u8 func;u8 lan_id; +u8 instance_id; };/* Flow control parameters */
PATCH v4 6/11 ixgbe: Read and parse NW_MNG_IF_SEL register
In reply to Mark D RustadRead the IXGBE_NW_MNG_IF_SEL register and use it to set interface attributes.
--- drivers/net/ethernet/intel/ixgbe/ixgbe_type.h | 5 +++ drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c | 37 ++++++++++++++++++++++--- 2 files changed, 37 insertions(+), 5 deletions(-)
drivers/net/ethernet/intel/ixgbe/ixgbe_type.h +5 -0
@@ -3648,5 +3648,10 @@ struct ixgbe_info {#define IXGBE_SB_IOSF_TARGET_KX4_PCS1 3#define IXGBE_NW_MNG_IF_SEL 0x00011178 +#define IXGBE_NW_MNG_IF_SEL_MDIO_ACT BIT(1) +#define IXGBE_NW_MNG_IF_SEL_ENABLE_10_100M BIT(23)#define IXGBE_NW_MNG_IF_SEL_INT_PHY_MODE BIT(24) +#define IXGBE_NW_MNG_IF_SEL_MDIO_PHY_ADD_SHIFT 3 +#define IXGBE_NW_MNG_IF_SEL_MDIO_PHY_ADD \ + (0x1F << IXGBE_NW_MNG_IF_SEL_MDIO_PHY_ADD_SHIFT)#endif /* _IXGBE_TYPE_H_ */
drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c +32 -5
@@ -2137,6 +2137,36 @@ static s32 ixgbe_enter_lplu_t_x550em(struct ixgbe_hw *hw)return status; } +/** +* ixgbe_read_mng_if_sel_x550em - Read NW_MNG_IF_SEL register +* @hw: pointer to hardware structure +* +* Read NW_MNG_IF_SEL register and save field values. +*/ +static void ixgbe_read_mng_if_sel_x550em (struct ixgbe_hw *hw) +{ +/* Save NW management interface connected on board. This is used +* to determine internal PHY mode. +*/ + hw->phy.nw_mng_if_sel =IXGBE_READ_REG (hw,IXGBE_NW_MNG_IF_SEL ); + +/* If X552 (X550EM_a) and MDIO is connected to external PHY, then set +* PHY address. This register field was has only been used for X552. +*/ +if (!hw->phy.nw_mng_if_sel) { +if (hw->mac.type == ixgbe_mac_x550em_a) { +struct ixgbe_adapter *adapter = hw->back; + +e_warn (drv,"nw_mng_if_sel not set\n" ); + } +return ; + } + + hw->phy.mdio.prtad = (hw->phy.nw_mng_if_sel & +IXGBE_NW_MNG_IF_SEL_MDIO_PHY_ADD ) >> +IXGBE_NW_MNG_IF_SEL_MDIO_PHY_ADD_SHIFT ; +} +/** ixgbe_init_phy_ops_X550em - PHY/SFP specific init * @hw: pointer to hardware structure *
@@ -2151,14 +2181,11 @@ static s32 ixgbe_init_phy_ops_X550em(struct ixgbe_hw *hw) hw->mac.ops.set_lan_id (hw); +ixgbe_read_mng_if_sel_x550em (hw); +if (hw->mac.ops.get_media_type (hw) == ixgbe_media_type_fiber) { phy->phy_semaphore_mask =IXGBE_GSSR_SHARED_I2C_SM ;ixgbe_setup_mux_ctl (hw); - -/* Save NW management interface connected on board. This is used -* to determine internal PHY mode. -*/ - phy->nw_mng_if_sel =IXGBE_READ_REG (hw,IXGBE_NW_MNG_IF_SEL ); }/* Identify the PHY or SFP module */
PATCH v4 7/11 ixgbe: Introduce function to control MDIO speed
In reply to Mark D RustadMove code that controls MDIO speed into a new function because there will be more MACs that need the control.
--- drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c | 27 +++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-)
drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c +21 -6
@@ -2306,6 +2306,26 @@ static s32 ixgbe_init_ext_t_x550em(struct ixgbe_hw *hw)return status; } +/** +* ixgbe_set_mdio_speed - Set MDIO clock speed +* @hw: pointer to hardware structure +*/ +static void ixgbe_set_mdio_speed (struct ixgbe_hw *hw) +{ +u32 hlreg0; + +switch (hw->device_id) { +case IXGBE_DEV_ID_X550EM_X_10G_T : +/* Config MDIO clock speed before the first MDIO PHY access */ + hlreg0 =IXGBE_READ_REG (hw,IXGBE_HLREG0 ); + hlreg0 &= ~IXGBE_HLREG0_MDCSPD ; +IXGBE_WRITE_REG (hw,IXGBE_HLREG0 , hlreg0); +break ; +default : +break ; + } +} +/** ixgbe_reset_hw_X550em - Perform hardware reset ** @hw: pointer to hardware structure **
@@ -2319,7 +2339,6 @@ static s32 ixgbe_reset_hw_X550em(struct ixgbe_hw *hw)s32 status;u32 ctrl =0 ;u32 i; -u32 hlreg0;bool link_up = false;/* Call adapter stop to disable Tx/Rx and clear interrupts */
@@ -2405,11 +2424,7 @@ mac_reset_top: hw->mac.num_rar_entries =128 ; hw->mac.ops.init_rx_addrs (hw); -if (hw->device_id ==IXGBE_DEV_ID_X550EM_X_10G_T ) { - hlreg0 =IXGBE_READ_REG (hw,IXGBE_HLREG0 ); - hlreg0 &= ~IXGBE_HLREG0_MDCSPD ; -IXGBE_WRITE_REG (hw,IXGBE_HLREG0 , hlreg0); - } +ixgbe_set_mdio_speed (hw);if (hw->device_id ==IXGBE_DEV_ID_X550EM_X_SFP )ixgbe_setup_mux_ctl (hw);
PATCH v4 8/11 ixgbe: Add support for SFPs with retimer
In reply to Mark D RustadAdd support for SFPs with an external retimer.
--- drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 2 drivers/net/ethernet/intel/ixgbe/ixgbe_phy.h | 6 + drivers/net/ethernet/intel/ixgbe/ixgbe_type.h | 5 + drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c | 133 +++++++++++++++++++++++++ 4 files changed, 144 insertions(+), 2 deletions(-)
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +2 -0
@@ -131,6 +131,7 @@ static const struct pci_device_id ixgbe_pci_tbl[] = { {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_X550EM_X_10G_T), board_X550EM_x}, {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_X550EM_X_SFP), board_X550EM_x}, {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_X550EM_A_SFP_N), board_x550em_a }, + {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_X550EM_A_SFP), board_x550em_a },/* required last entry */ {0, } };
@@ -2680,6 +2681,7 @@ static inline void ixgbe_irq_enable(struct ixgbe_adapter *adapter, bool queues,case ixgbe_mac_X550EM_x:case ixgbe_mac_x550em_a:if (adapter->hw.device_id ==IXGBE_DEV_ID_X550EM_X_SFP || + adapter->hw.device_id ==IXGBE_DEV_ID_X550EM_A_SFP || adapter->hw.device_id ==IXGBE_DEV_ID_X550EM_A_SFP_N ) mask |=IXGBE_EIMS_GPI_SDP0 (&adapter->hw);if (adapter->hw.phy.type == ixgbe_phy_x550em_ext_t)
drivers/net/ethernet/intel/ixgbe/ixgbe_phy.h +5 -1
@@ -1,7 +1,7 @@/******************************************************************************* Intel 10 Gigabit PCI Express Linux driver -Copyright(c) 1999 - 2014 Intel Corporation. +Copyright(c) 1999 - 2016 Intel Corporation. This program is free software; you can redistribute it and/or modify it under the terms and conditions of the GNU General Public License,
@@ -81,7 +81,11 @@#define IXGBE_I2C_EEPROM_STATUS_FAIL 0x2#define IXGBE_I2C_EEPROM_STATUS_IN_PROGRESS 0x3#define IXGBE_CS4227 0xBE/* CS4227 address */ +#define IXGBE_CS4227_GLOBAL_ID_LSB 0 +#define IXGBE_CS4227_GLOBAL_ID_MSB 1#define IXGBE_CS4227_SCRATCH 2 +#define IXGBE_CS4223_PHY_ID 0x7003/* Quad port */ +#define IXGBE_CS4227_PHY_ID 0x3003/* Dual port */ #define IXGBE_CS4227_RESET_PENDING 0x1357#define IXGBE_CS4227_RESET_COMPLETE 0x5AA5#define IXGBE_CS4227_RETRIES 15
drivers/net/ethernet/intel/ixgbe/ixgbe_type.h +5 -0
@@ -1310,6 +1310,7 @@ struct ixgbe_thermal_sensor_data {/* MDIO definitions */ +#define IXGBE_MDIO_ZERO_DEV_TYPE 0x0#define IXGBE_MDIO_PMA_PMD_DEV_TYPE 0x1#define IXGBE_MDIO_PCS_DEV_TYPE 0x3#define IXGBE_MDIO_PHY_XS_DEV_TYPE 0x4
@@ -3579,6 +3580,7 @@ struct ixgbe_info {#define IXGBE_KRM_PORT_CAR_GEN_CTRL (P ) ((P) ? 0x8010 : 0x4010)#define IXGBE_KRM_LINK_CTRL_1 (P ) ((P) ? 0x820C : 0x420C)#define IXGBE_KRM_AN_CNTL_1 (P ) ((P) ? 0x822C : 0x422C) +#define IXGBE_KRM_AN_CNTL_8 (P ) ((P) ? 0x8248 : 0x4248)#define IXGBE_KRM_DSP_TXFFE_STATE_4 (P ) ((P) ? 0x8634 : 0x4634)#define IXGBE_KRM_DSP_TXFFE_STATE_5 (P ) ((P) ? 0x8638 : 0x4638)#define IXGBE_KRM_RX_TRN_LINKUP_CTRL (P ) ((P) ? 0x8B00 : 0x4B00)
@@ -3604,6 +3606,9 @@ struct ixgbe_info {#define IXGBE_KRM_AN_CNTL_1_SYM_PAUSE (1 << 28)#define IXGBE_KRM_AN_CNTL_1_ASM_PAUSE (1 << 29) +#define IXGBE_KRM_AN_CNTL_8_LINEAR BIT(0) +#define IXGBE_KRM_AN_CNTL_8_LIMITING BIT(1) +#define IXGBE_KRM_DSP_TXFFE_STATE_C0_EN (1 << 6)#define IXGBE_KRM_DSP_TXFFE_STATE_CP1_CN1_EN (1 << 15)#define IXGBE_KRM_DSP_TXFFE_STATE_CO_ADAPT_EN (1 << 16)
drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c +132 -1
165 lines not on this page · raw message
PATCH v4 9/11 ixgbe: Add support for SGMII backplane interface
In reply to Mark D RustadAdd support for an SGMII backplane interface.
--- drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 2 + drivers/net/ethernet/intel/ixgbe/ixgbe_type.h | 9 ++++ drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c | 58 +++++++++++++++++++++++++ 3 files changed, 69 insertions(+)
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +2 -0
@@ -131,6 +131,8 @@ static const struct pci_device_id ixgbe_pci_tbl[] = { {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_X550EM_X_10G_T), board_X550EM_x}, {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_X550EM_X_SFP), board_X550EM_x}, {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_X550EM_A_SFP_N), board_x550em_a }, + {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_X550EM_A_SGMII), board_x550em_a }, + {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_X550EM_A_SGMII_L), board_x550em_a }, {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_X550EM_A_SFP), board_x550em_a },/* required last entry */ {0, }
drivers/net/ethernet/intel/ixgbe/ixgbe_type.h +9 -0
@@ -81,6 +81,8 @@#define IXGBE_DEV_ID_X550EM_X_10G_T 0x15AD#define IXGBE_DEV_ID_X550EM_X_1G_T 0x15AE#define IXGBE_DEV_ID_X550EM_A_SFP_N 0x15C4 +#define IXGBE_DEV_ID_X550EM_A_SGMII 0x15C6 +#define IXGBE_DEV_ID_X550EM_A_SGMII_L 0x15C7#define IXGBE_DEV_ID_X550EM_A_SFP 0x15CE/* VF Device IDs */
@@ -3064,6 +3066,7 @@ enum ixgbe_phy_type { ixgbe_phy_qsfp_intel, ixgbe_phy_qsfp_unknown, ixgbe_phy_sfp_unsupported, + ixgbe_phy_sgmii, ixgbe_phy_generic };
@@ -3581,6 +3584,7 @@ struct ixgbe_info {#define IXGBE_KRM_LINK_CTRL_1 (P ) ((P) ? 0x820C : 0x420C)#define IXGBE_KRM_AN_CNTL_1 (P ) ((P) ? 0x822C : 0x422C)#define IXGBE_KRM_AN_CNTL_8 (P ) ((P) ? 0x8248 : 0x4248) +#define IXGBE_KRM_SGMII_CTRL (P ) ((P) ? 0x82A0 : 0x42A0)#define IXGBE_KRM_DSP_TXFFE_STATE_4 (P ) ((P) ? 0x8634 : 0x4634)#define IXGBE_KRM_DSP_TXFFE_STATE_5 (P ) ((P) ? 0x8638 : 0x4638)#define IXGBE_KRM_RX_TRN_LINKUP_CTRL (P ) ((P) ? 0x8B00 : 0x4B00)
@@ -3594,6 +3598,8 @@ struct ixgbe_info {#define IXGBE_KRM_LINK_CTRL_1_TETH_FORCE_SPEED_MASK (0x7 << 8)#define IXGBE_KRM_LINK_CTRL_1_TETH_FORCE_SPEED_1G (2 << 8)#define IXGBE_KRM_LINK_CTRL_1_TETH_FORCE_SPEED_10G (4 << 8) +#define IXGBE_KRM_LINK_CTRL_1_TETH_AN_SGMII_EN (1 << 12) +#define IXGBE_KRM_LINK_CTRL_1_TETH_AN_CLAUSE_37_EN (1 << 13)#define IXGBE_KRM_LINK_CTRL_1_TETH_AN_FEC_REQ (1 << 14)#define IXGBE_KRM_LINK_CTRL_1_TETH_AN_CAP_FEC (1 << 15)#define IXGBE_KRM_LINK_CTRL_1_TETH_AN_CAP_KX (1 << 16)
@@ -3609,6 +3615,9 @@ struct ixgbe_info {#define IXGBE_KRM_AN_CNTL_8_LINEAR BIT(0)#define IXGBE_KRM_AN_CNTL_8_LIMITING BIT(1) +#define IXGBE_KRM_SGMII_CTRL_MAC_TAR_FORCE_100_D (1 << 12) +#define IXGBE_KRM_SGMII_CTRL_MAC_TAR_FORCE_10_D (1 << 19) +#define IXGBE_KRM_DSP_TXFFE_STATE_C0_EN (1 << 6)#define IXGBE_KRM_DSP_TXFFE_STATE_CP1_CN1_EN (1 << 15)#define IXGBE_KRM_DSP_TXFFE_STATE_CO_ADAPT_EN (1 << 16)
drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c +58 -0
76 lines not on this page · raw message
PATCH v4 9/11 ixgbe: Add support for SGMII backplane interface
Quoted 10 lines · Mark D Rustad
Add support for an SGMII backplane interface.
Signed-off-by Mark Rustad <[email protected]>---
?drivers/net/ethernet/intel/ixgbe/ixgbe_main.c |??? 2 + ?drivers/net/ethernet/intel/ixgbe/ixgbe_type.h |??? 9 ++++ ?drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c |?? 58+++++++++++++++++++++++++
?3 files changed, 69 insertions(+)
...
Please use the BIT() macro for the added defines below. ?Eventually we should probably convert all of the defines to BIT(), but that is for a later discussion.
Quoted 15 lines
(quoted diff) +2
-0@@ -3594,6 +3598,8 @@ struct ixgbe_info { ?#define IXGBE_KRM_LINK_CTRL_1_TETH_FORCE_SPEED_MASK????(0x7 << 8) ?#define IXGBE_KRM_LINK_CTRL_1_TETH_FORCE_SPEED_1G??????(2 << 8) ?#define IXGBE_KRM_LINK_CTRL_1_TETH_FORCE_SPEED_10G?????(4 << 8) +#define IXGBE_KRM_LINK_CTRL_1_TETH_AN_SGMII_EN?????????(1 << 12) +#define IXGBE_KRM_LINK_CTRL_1_TETH_AN_CLAUSE_37_EN?????(1 << 13) ?#define IXGBE_KRM_LINK_CTRL_1_TETH_AN_FEC_REQ??????????(1 << 14) ?#define IXGBE_KRM_LINK_CTRL_1_TETH_AN_CAP_FEC??????????(1 << 15) ?#define IXGBE_KRM_LINK_CTRL_1_TETH_AN_CAP_KX???????????(1 << 16)@@ -3609,6 +3615,9 @@ struct ixgbe_info { ?#define IXGBE_KRM_AN_CNTL_8_LINEAR?????????????????????BIT(0) ?#define IXGBE_KRM_AN_CNTL_8_LIMITING???????????????????BIT(1)?
(quoted diff) +2
-0+#define IXGBE_KRM_SGMII_CTRL_MAC_TAR_FORCE_100_D???????(1 << 12) +#define IXGBE_KRM_SGMII_CTRL_MAC_TAR_FORCE_10_D????????????????(1 <<
Quoted 6 lines
19)
+
?#define IXGBE_KRM_DSP_TXFFE_STATE_C0_EN????????????????????????(1 <<
6)
?#define IXGBE_KRM_DSP_TXFFE_STATE_CP1_CN1_EN???????????(1 << 15) ?#define IXGBE_KRM_DSP_TXFFE_STATE_CO_ADAPT_EN??????????(1 << 16)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part
URL: <http://lists.osuosl.org/pipermail/intel-wired-lan/attachments/20160330/696a864e/attachment-0001.asc>
PATCH v4 10/11 ixgbe: Add KR backplane support for x550em_a
In reply to Mark D RustadAdd support for x550em_a-based KR backplane devices.
---
Changes in V3:
- Move mac type check into ixgbe_setup_kr_x550em
--- drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 2 ++ drivers/net/ethernet/intel/ixgbe/ixgbe_type.h | 2 ++ drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c | 18 ++++++++++++++---- 3 files changed, 18 insertions(+), 4 deletions(-)
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +2 -0
@@ -130,6 +130,8 @@ static const struct pci_device_id ixgbe_pci_tbl[] = { {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_X550EM_X_KR), board_X550EM_x}, {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_X550EM_X_10G_T), board_X550EM_x}, {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_X550EM_X_SFP), board_X550EM_x}, + {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_X550EM_A_KR), board_x550em_a }, + {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_X550EM_A_KR_L), board_x550em_a }, {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_X550EM_A_SFP_N), board_x550em_a }, {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_X550EM_A_SGMII), board_x550em_a }, {PCI_VDEVICE(INTEL, IXGBE_DEV_ID_X550EM_A_SGMII_L), board_x550em_a },
drivers/net/ethernet/intel/ixgbe/ixgbe_type.h +2 -0
@@ -80,6 +80,8 @@#define IXGBE_DEV_ID_X550EM_X_SFP 0x15AC#define IXGBE_DEV_ID_X550EM_X_10G_T 0x15AD#define IXGBE_DEV_ID_X550EM_X_1G_T 0x15AE +#define IXGBE_DEV_ID_X550EM_A_KR 0x15C2 +#define IXGBE_DEV_ID_X550EM_A_KR_L 0x15C3#define IXGBE_DEV_ID_X550EM_A_SFP_N 0x15C4#define IXGBE_DEV_ID_X550EM_A_SGMII 0x15C6#define IXGBE_DEV_ID_X550EM_A_SGMII_L 0x15C7
drivers/net/ethernet/intel/ixgbe/ixgbe_x550.c +14 -4
@@ -291,6 +291,8 @@ static s32 ixgbe_identify_phy_x550em(struct ixgbe_hw *hw) hw->phy.type = ixgbe_phy_x550em_kx4;break ;case IXGBE_DEV_ID_X550EM_X_KR : +case IXGBE_DEV_ID_X550EM_A_KR : +case IXGBE_DEV_ID_X550EM_A_KR_L : hw->phy.type = ixgbe_phy_x550em_kr;break ;case IXGBE_DEV_ID_X550EM_X_1G_T :
@@ -1984,13 +1986,17 @@ static s32 ixgbe_setup_kx4_x550em(struct ixgbe_hw *hw)return status; } -/** ixgbe_setup_kr_x550em - Configure the KR PHY. -* @hw: pointer to hardware structure +/** +* ixgbe_setup_kr_x550em - Configure the KR PHY +* @hw: pointer to hardware structure * -* Configures the integrated KR PHY. +* Configures the integrated KR PHY for X550EM_x. **/ static s32 ixgbe_setup_kr_x550em (struct ixgbe_hw *hw) { +if (hw->mac.type != ixgbe_mac_X550EM_x) +return 0 ; +return ixgbe_setup_kr_speed_x550em (hw, hw->phy.autoneg_advertised); }
@@ -2196,7 +2202,9 @@ static s32 ixgbe_setup_fc_x550em(struct ixgbe_hw *hw)return IXGBE_ERR_CONFIG ; } -if (hw->device_id !=IXGBE_DEV_ID_X550EM_X_KR ) +if (hw->device_id !=IXGBE_DEV_ID_X550EM_X_KR && + hw->device_id !=IXGBE_DEV_ID_X550EM_A_KR && + hw->device_id !=IXGBE_DEV_ID_X550EM_A_KR_L )return 0 ; rc = hw->mac.ops.read_iosf_sb_reg(hw,
@@ -2437,6 +2445,8 @@ static enum ixgbe_media_type ixgbe_get_media_type_X550em(struct ixgbe_hw *hw)/* Fallthrough */ case IXGBE_DEV_ID_X550EM_X_KR :case IXGBE_DEV_ID_X550EM_X_KX4 : +case IXGBE_DEV_ID_X550EM_A_KR : +case IXGBE_DEV_ID_X550EM_A_KR_L : media_type = ixgbe_media_type_backplane;break ;case IXGBE_DEV_ID_X550EM_X_SFP :
PATCH v4 11/11 ixgbe: Bump version number
In reply to Mark D RustadUpdate ixgbe version number.
--- drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +1 -1
@@ -70,7 +70,7 @@ char ixgbe_default_device_descr[] =static char ixgbe_default_device_descr[] ="Intel(R) 10 Gigabit Network Connection" ;#endif -#define DRV_VERSION "4.2.1-k" +#define DRV_VERSION "4.4.0-k"const char ixgbe_driver_version[] =DRV_VERSION ;static const char ixgbe_copyright[] ="Copyright (c) 1999-2016 Intel Corporation." ;
Bowers
PATCH v4 11/11 ixgbe: Bump version number
Quoted 7 lines
-----Original Message-----
From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On Behalf Of Mark D Rustad
Sent: Tuesday, March 29, 2016 4:58 PM
To: intel-wired-lan at lists.osuosl.org
Subject: [Intel-wired-lan] [PATCH V4 11/11] ixgbe: Bump version number
Quoted 6 lines
Update ixgbe version number.
Signed-off-by Mark Rustad <[email protected]>--- drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Driver reports correct version number