[PATCH v2 42/45] net/sfc: offer support for 200G link ability on new adaptors
Ivan Malov
ivan.malov at arknetworks.am
Wed Apr 23 17:59:59 CEST 2025
New adaptors (for instance, Medford4) can support 200G speed.
Signed-off-by: Ivan Malov <ivan.malov at arknetworks.am>
Reviewed-by: Andy Moreton <andy.moreton at amd.com>
Reviewed-by: Pieter Jansen Van Vuuren <pieter.jansen-van-vuuren at amd.com>
---
drivers/net/sfc/sfc.c | 5 ++++-
drivers/net/sfc/sfc_ethdev.c | 15 +++++++++++++++
drivers/net/sfc/sfc_port.c | 6 ++++++
3 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/drivers/net/sfc/sfc.c b/drivers/net/sfc/sfc.c
index 938c967430..69747e49ae 100644
--- a/drivers/net/sfc/sfc.c
+++ b/drivers/net/sfc/sfc.c
@@ -126,7 +126,8 @@ sfc_phy_cap_from_link_speeds(uint32_t speeds)
(1 << EFX_PHY_CAP_25000FDX) |
(1 << EFX_PHY_CAP_40000FDX) |
(1 << EFX_PHY_CAP_50000FDX) |
- (1 << EFX_PHY_CAP_100000FDX);
+ (1 << EFX_PHY_CAP_100000FDX) |
+ (1 << EFX_PHY_CAP_200000FDX);
}
if (speeds & RTE_ETH_LINK_SPEED_1G)
phy_caps |= (1 << EFX_PHY_CAP_1000FDX);
@@ -140,6 +141,8 @@ sfc_phy_cap_from_link_speeds(uint32_t speeds)
phy_caps |= (1 << EFX_PHY_CAP_50000FDX);
if (speeds & RTE_ETH_LINK_SPEED_100G)
phy_caps |= (1 << EFX_PHY_CAP_100000FDX);
+ if (speeds & RTE_ETH_LINK_SPEED_200G)
+ phy_caps |= (1 << EFX_PHY_CAP_200000FDX);
return phy_caps;
}
diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c
index 05933b1d39..80eb39e58d 100644
--- a/drivers/net/sfc/sfc_ethdev.c
+++ b/drivers/net/sfc/sfc_ethdev.c
@@ -117,6 +117,8 @@ sfc_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
dev_info->speed_capa |= RTE_ETH_LINK_SPEED_50G;
if (sa->port.phy_adv_cap_mask & (1u << EFX_PHY_CAP_100000FDX))
dev_info->speed_capa |= RTE_ETH_LINK_SPEED_100G;
+ if (sa->port.phy_adv_cap_mask & (1u << EFX_PHY_CAP_200000FDX))
+ dev_info->speed_capa |= RTE_ETH_LINK_SPEED_200G;
dev_info->max_rx_queues = sa->rxq_max;
dev_info->max_tx_queues = sa->txq_max;
@@ -2442,6 +2444,19 @@ sfc_fec_get_capa_speed_to_fec(uint32_t supported_caps,
}
num++;
}
+ if (supported_caps & (1u << EFX_PHY_CAP_200000FDX)) {
+ if (speed_fec_capa != NULL) {
+ speed_fec_capa[num].speed = RTE_ETH_SPEED_NUM_200G;
+ speed_fec_capa[num].capa =
+ RTE_ETH_FEC_MODE_CAPA_MASK(NOFEC) |
+ RTE_ETH_FEC_MODE_CAPA_MASK(AUTO);
+ if (rs) {
+ speed_fec_capa[num].capa |=
+ RTE_ETH_FEC_MODE_CAPA_MASK(RS);
+ }
+ }
+ num++;
+ }
return num;
}
diff --git a/drivers/net/sfc/sfc_port.c b/drivers/net/sfc/sfc_port.c
index 5e80003ca1..0a31a394d5 100644
--- a/drivers/net/sfc/sfc_port.c
+++ b/drivers/net/sfc/sfc_port.c
@@ -144,6 +144,8 @@ sfc_port_init_dev_link(struct sfc_adapter *sa)
static efx_link_mode_t
sfc_port_phy_caps_to_max_link_speed(uint32_t phy_caps)
{
+ if (phy_caps & (1u << EFX_PHY_CAP_200000FDX))
+ return EFX_LINK_200000FDX;
if (phy_caps & (1u << EFX_PHY_CAP_100000FDX))
return EFX_LINK_100000FDX;
if (phy_caps & (1u << EFX_PHY_CAP_50000FDX))
@@ -649,6 +651,10 @@ sfc_port_link_mode_to_info(efx_link_mode_t link_mode,
link_info->link_speed = RTE_ETH_SPEED_NUM_100G;
link_info->link_duplex = RTE_ETH_LINK_FULL_DUPLEX;
break;
+ case EFX_LINK_200000FDX:
+ link_info->link_speed = RTE_ETH_SPEED_NUM_200G;
+ link_info->link_duplex = RTE_ETH_LINK_FULL_DUPLEX;
+ break;
default:
SFC_ASSERT(B_FALSE);
/* FALLTHROUGH */
--
2.39.5
More information about the dev
mailing list