New adaptors (for instance, Medford4) can support 200G speed. Signed-off-by: Ivan Malov <ivan.ma...@arknetworks.am> Reviewed-by: Andy Moreton <andy.more...@amd.com> Reviewed-by: Pieter Jansen Van Vuuren <pieter.jansen-van-vuu...@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