>-----Original Message----- >From: Burakov, Anatoly <[email protected]> >Sent: Wednesday, February 11, 2026 2:49 PM >To: [email protected]; Medvedkin, Vladimir <[email protected]>; >Kwapulinski, Piotr <[email protected]>; Jagielski, Jedrzej ><[email protected]>; Carolyn Wyborny <[email protected]> >Subject: [PATCH v4 1/9] net/ixgbe: add missing E610 MAC type checks > >A few E610 MAC type checks were missing (verified using E610 datasheet). > >Fixes: 316637762a5f ("net/ixgbe/base: enable E610 device") >Cc: [email protected] > >Signed-off-by: Anatoly Burakov <[email protected]> >--- > drivers/net/intel/ixgbe/ixgbe_bypass_api.h | 8 +----- > drivers/net/intel/ixgbe/ixgbe_ethdev.c | 29 ++++++++++++++-------- > drivers/net/intel/ixgbe/ixgbe_fdir.c | 8 +++--- > drivers/net/intel/ixgbe/ixgbe_flow.c | 3 ++- > drivers/net/intel/ixgbe/ixgbe_pf.c | 5 ++-- > drivers/net/intel/ixgbe/ixgbe_rxtx.c | 14 +++++++---- > 6 files changed, 39 insertions(+), 28 deletions(-) > >diff --git a/drivers/net/intel/ixgbe/ixgbe_bypass_api.h >b/drivers/net/intel/ixgbe/ixgbe_bypass_api.h >index 6ef965dbb6..eb73bc8b17 100644 >--- a/drivers/net/intel/ixgbe/ixgbe_bypass_api.h >+++ b/drivers/net/intel/ixgbe/ixgbe_bypass_api.h >@@ -40,16 +40,10 @@ static s32 ixgbe_bypass_rw_generic(struct ixgbe_hw *hw, >u32 cmd, u32 *status) > dir_sdo = IXGBE_ESDP_SDP6_DIR; > break; > case ixgbe_mac_X540: >- sck = IXGBE_ESDP_SDP2; >- sdi = IXGBE_ESDP_SDP0; >- sdo = IXGBE_ESDP_SDP1; >- dir_sck = IXGBE_ESDP_SDP2_DIR; >- dir_sdi = IXGBE_ESDP_SDP0_DIR; >- dir_sdo = IXGBE_ESDP_SDP1_DIR; >- break; > case ixgbe_mac_X550: > case ixgbe_mac_X550EM_x: > case ixgbe_mac_X550EM_a: >+ case ixgbe_mac_E610: > sck = IXGBE_ESDP_SDP2; > sdi = IXGBE_ESDP_SDP0; > sdo = IXGBE_ESDP_SDP1; >diff --git a/drivers/net/intel/ixgbe/ixgbe_ethdev.c >b/drivers/net/intel/ixgbe/ixgbe_ethdev.c >index 89a799762f..11500a923c 100644 >--- a/drivers/net/intel/ixgbe/ixgbe_ethdev.c >+++ b/drivers/net/intel/ixgbe/ixgbe_ethdev.c >@@ -911,7 +911,8 @@ ixgbe_dev_queue_stats_mapping_set(struct rte_eth_dev >*eth_dev, > (hw->mac.type != ixgbe_mac_X540) && > (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_X550EM_a) && >+ (hw->mac.type != ixgbe_mac_E610)) > return -ENOSYS; > > PMD_INIT_LOG(DEBUG, "Setting port %d, %s queue_id %d to stat index %d", > @@ -2134,10 +2135,11 @@ ixgbe_vlan_hw_extend_enable(struct rte_eth_dev *dev) > ctrl |= IXGBE_EXTENDED_VLAN; > IXGBE_WRITE_REG(hw, IXGBE_CTRL_EXT, ctrl); > >- /* Clear pooling mode of PFVTCTL. It's required by X550. */ >+ /* Clear pooling mode of PFVTCTL. It's required by X550 and E610. */ > if (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_X550EM_a || >+ hw->mac.type == ixgbe_mac_E610) { > ctrl = IXGBE_READ_REG(hw, IXGBE_VT_CTL); > ctrl &= ~IXGBE_VT_CTL_POOLING_MODE_MASK; > IXGBE_WRITE_REG(hw, IXGBE_VT_CTL, ctrl); @@ -2830,6 +2832,7 @@ > ixgbe_dev_start(struct rte_eth_dev *dev) > case ixgbe_mac_X550: > case ixgbe_mac_X550EM_x: > case ixgbe_mac_X550EM_a: >+ case ixgbe_mac_E610: > speed = IXGBE_LINK_SPEED_X550_AUTONEG; > break; > default: >@@ -4046,10 +4049,11 @@ ixgbe_dev_info_get(struct rte_eth_dev *dev, struct >rte_eth_dev_info *dev_info) > if (hw->mac.type == ixgbe_mac_X540 || > hw->mac.type == ixgbe_mac_X540_vf || > hw->mac.type == ixgbe_mac_X550 || >- hw->mac.type == ixgbe_mac_X550_vf) { >+ hw->mac.type == ixgbe_mac_X550_vf || >+ hw->mac.type == ixgbe_mac_E610) { > dev_info->speed_capa |= RTE_ETH_LINK_SPEED_100M; > } >- if (hw->mac.type == ixgbe_mac_X550) { >+ if (hw->mac.type == ixgbe_mac_X550 || hw->mac.type == ixgbe_mac_E610) >+{ > dev_info->speed_capa |= RTE_ETH_LINK_SPEED_2_5G; > dev_info->speed_capa |= RTE_ETH_LINK_SPEED_5G; > } >@@ -7665,7 +7669,8 @@ ixgbe_update_e_tag_eth_type(struct ixgbe_hw *hw, > > if (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_X550EM_a && >+ hw->mac.type != ixgbe_mac_E610) { > return -ENOTSUP; > } > >@@ -7686,7 +7691,8 @@ ixgbe_e_tag_enable(struct ixgbe_hw *hw) > > if (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_X550EM_a && >+ hw->mac.type != ixgbe_mac_E610) { > return -ENOTSUP; > } > >@@ -7709,7 +7715,8 @@ ixgbe_e_tag_filter_del(struct rte_eth_dev *dev, > > if (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_X550EM_a && >+ hw->mac.type != ixgbe_mac_E610) { > return -ENOTSUP; > } > >@@ -7745,7 +7752,8 @@ ixgbe_e_tag_filter_add(struct rte_eth_dev *dev, > > if (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_X550EM_a && >+ hw->mac.type != ixgbe_mac_E610) { > return -ENOTSUP; > } > >@@ -7932,7 +7940,8 @@ ixgbe_e_tag_forwarding_en_dis(struct rte_eth_dev *dev, >bool en) > > if (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_X550EM_a && >+ hw->mac.type != ixgbe_mac_E610) { > return -ENOTSUP; > } > >diff --git a/drivers/net/intel/ixgbe/ixgbe_fdir.c >b/drivers/net/intel/ixgbe/ixgbe_fdir.c >index 97ef185583..0bdfbd411a 100644 >--- a/drivers/net/intel/ixgbe/ixgbe_fdir.c >+++ b/drivers/net/intel/ixgbe/ixgbe_fdir.c >@@ -650,10 +650,11 @@ ixgbe_fdir_configure(struct rte_eth_dev *dev) > hw->mac.type != ixgbe_mac_E610) > return -ENOSYS; > >- /* x550 supports mac-vlan and tunnel mode but other NICs not */ >+ /* x550 and E610 supports mac-vlan and tunnel mode but other NICs not >+*/ > if (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_E610 && > mode != RTE_FDIR_MODE_SIGNATURE && > mode != RTE_FDIR_MODE_PERFECT) > return -ENOSYS; >@@ -1130,7 +1131,7 @@ ixgbe_fdir_filter_program(struct rte_eth_dev *dev, > return -ENOTSUP; > > /* >- * Sanity check for x550. >+ * Sanity check for x550 and E610. > * When adding a new filter with flow type set to IPv4, > * the flow director mask should be configed before, > * and the L4 protocol and ports are masked. >@@ -1138,7 +1139,8 @@ ixgbe_fdir_filter_program(struct rte_eth_dev *dev, > if ((!del) && > (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_X550EM_a || >+ hw->mac.type == ixgbe_mac_E610) && > (rule->ixgbe_fdir.formatted.flow_type == > IXGBE_ATR_FLOW_TYPE_IPV4 || > rule->ixgbe_fdir.formatted.flow_type == diff --git > a/drivers/net/intel/ixgbe/ixgbe_flow.c b/drivers/net/intel/ixgbe/ixgbe_flow.c >index 3b68d820ca..27d2ba1132 100644 >--- a/drivers/net/intel/ixgbe/ixgbe_flow.c >+++ b/drivers/net/intel/ixgbe/ixgbe_flow.c >@@ -1361,7 +1361,8 @@ ixgbe_parse_l2_tn_filter(struct rte_eth_dev *dev, > > if (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_X550EM_a && >+ hw->mac.type != ixgbe_mac_E610) { > memset(l2_tn_filter, 0, sizeof(struct ixgbe_l2_tunnel_conf)); > rte_flow_error_set(error, EINVAL, > RTE_FLOW_ERROR_TYPE_ITEM, >diff --git a/drivers/net/intel/ixgbe/ixgbe_pf.c >b/drivers/net/intel/ixgbe/ixgbe_pf.c >index e967fe5e48..d9a775f99a 100644 >--- a/drivers/net/intel/ixgbe/ixgbe_pf.c >+++ b/drivers/net/intel/ixgbe/ixgbe_pf.c >@@ -558,11 +558,12 @@ ixgbe_set_vf_lpe(struct rte_eth_dev *dev, uint32_t vf, >uint32_t *msgbuf) > uint32_t max_frs; > uint32_t hlreg0; > >- /* X540 and X550 support jumbo frames in IOV mode */ >+ /* X540, X550, and E610 support jumbo frames in IOV mode */ > if (hw->mac.type != ixgbe_mac_X540 && > 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_X550EM_a && >+ hw->mac.type != ixgbe_mac_E610) { > struct ixgbe_vf_info *vfinfo = > *IXGBE_DEV_PRIVATE_TO_P_VFDATA(dev->data->dev_private); > >diff --git a/drivers/net/intel/ixgbe/ixgbe_rxtx.c >b/drivers/net/intel/ixgbe/ixgbe_rxtx.c >index 0af04c9b0d..2857c19355 100644 >--- a/drivers/net/intel/ixgbe/ixgbe_rxtx.c >+++ b/drivers/net/intel/ixgbe/ixgbe_rxtx.c >@@ -2707,7 +2707,8 @@ ixgbe_get_tx_port_offloads(struct rte_eth_dev *dev) > > if (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_X550EM_a || >+ hw->mac.type == ixgbe_mac_E610) > tx_offload_capa |= RTE_ETH_TX_OFFLOAD_OUTER_IPV4_CKSUM; > > #ifdef RTE_LIB_SECURITY >@@ -3166,7 +3167,8 @@ ixgbe_get_rx_port_offloads(struct rte_eth_dev *dev) > > if (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_X550EM_a || >+ hw->mac.type == ixgbe_mac_E610) > offloads |= RTE_ETH_RX_OFFLOAD_OUTER_IPV4_CKSUM; > > #ifdef RTE_LIB_SECURITY >@@ -3246,7 +3248,7 @@ ixgbe_dev_rx_queue_setup(struct rte_eth_dev *dev, > > /* > * The packet type in RX descriptor is different for different NICs. >- * Some bits are used for x550 but reserved for other NICS. >+ * Some bits are used for x550 and E610 but reserved for other NICS. > * So set different masks for different NICs. > */ > if (hw->mac.type == ixgbe_mac_X550 || >@@ -3254,7 +3256,8 @@ ixgbe_dev_rx_queue_setup(struct rte_eth_dev *dev, > hw->mac.type == ixgbe_mac_X550EM_a || > hw->mac.type == ixgbe_mac_X550_vf || > hw->mac.type == ixgbe_mac_X550EM_x_vf || >- hw->mac.type == ixgbe_mac_X550EM_a_vf) >+ hw->mac.type == ixgbe_mac_X550EM_a_vf || >+ hw->mac.type == ixgbe_mac_E610) > rxq->pkt_type_mask = IXGBE_PACKET_TYPE_MASK_X550; > else > rxq->pkt_type_mask = IXGBE_PACKET_TYPE_MASK_82599; @@ -3506,7 > +3509,8 @@ ixgbe_dev_clear_queues(struct rte_eth_dev *dev) > if (hw->mac.type == ixgbe_mac_X540 || > 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_X550EM_a || >+ hw->mac.type == ixgbe_mac_E610) > ixgbe_setup_loopback_link_x540_x550(hw, false); > } > }
Reviewed-by: Piotr Kwapulinski <[email protected]>

