ethdev: add link speed 400G
Checks
Commit Message
There are some devices supporting 400G speed,
and it is well standardized in IEEE.
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
app/test-pmd/cmdline.c | 2 ++
app/test-pmd/config.c | 2 ++
app/test-pmd/parameters.c | 3 +++
app/test/test_ethdev_link.c | 3 ++-
drivers/net/virtio/virtio_ethdev.c | 2 ++
lib/ethdev/rte_ethdev.c | 6 ++++++
lib/ethdev/rte_ethdev.h | 2 ++
7 files changed, 19 insertions(+), 1 deletion(-)
Comments
> From: Thomas Monjalon [mailto:thomas@monjalon.net]
> Sent: Thursday, 16 February 2023 11.44
>
> There are some devices supporting 400G speed,
> and it is well standardized in IEEE.
>
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> ---
Plain and simple, easy to...
Reviewed-by: Morten Brørup <mb@smartsharesystems.com>
On 2/16/23 13:43, Thomas Monjalon wrote:
> There are some devices supporting 400G speed,
> and it is well standardized in IEEE.
>
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Acked-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
Hi Thomas,
Higher rates are generally implemented with multiple lanes. The lane configuration is
critical to link negotiation success. The number of lanes configured using the ethtool
is provided [1].
Currently, the community uses only one u32 bit (link_speed) to indicate a rate, which
is not enough.
It is recommended that the rate be extended to support the configuration of the number
of lanes. Our team plan to develop it target 23.07 version (have not yet been designed).
Maybe other team already developping it (if have please let me know so that we can reduce
invest).
Beside, as for this patch, I think we could upstream first.
[1] https://lore.kernel.org/netdev/20201010154119.3537085-1-idosch@idosch.org/T/
On 2023/2/16 18:43, Thomas Monjalon wrote:
> There are some devices supporting 400G speed,
> and it is well standardized in IEEE.
>
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Acked-by: Chengwen Feng <fengchengwen@huawei.com>
On 2/16/2023 10:43 AM, Thomas Monjalon wrote:
> There are some devices supporting 400G speed,
> and it is well standardized in IEEE.
>
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> ---
> app/test-pmd/cmdline.c | 2 ++
> app/test-pmd/config.c | 2 ++
> app/test-pmd/parameters.c | 3 +++
> app/test/test_ethdev_link.c | 3 ++-
> drivers/net/virtio/virtio_ethdev.c | 2 ++
> lib/ethdev/rte_ethdev.c | 6 ++++++
> lib/ethdev/rte_ethdev.h | 2 ++
> 7 files changed, 19 insertions(+), 1 deletion(-)
It looks like some testpmd help strings and documentation missed, please
check previous commit as reference:
Commit f6eb39384933 ("ethdev: add 200G link speed")
Also last time release notes also updated for new speed, what about
doing same?
16/02/2023 13:30, Ferruh Yigit:
> On 2/16/2023 10:43 AM, Thomas Monjalon wrote:
> > There are some devices supporting 400G speed,
> > and it is well standardized in IEEE.
> >
> > Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> > ---
> > app/test-pmd/cmdline.c | 2 ++
> > app/test-pmd/config.c | 2 ++
> > app/test-pmd/parameters.c | 3 +++
> > app/test/test_ethdev_link.c | 3 ++-
> > drivers/net/virtio/virtio_ethdev.c | 2 ++
> > lib/ethdev/rte_ethdev.c | 6 ++++++
> > lib/ethdev/rte_ethdev.h | 2 ++
> > 7 files changed, 19 insertions(+), 1 deletion(-)
>
> It looks like some testpmd help strings and documentation missed, please
> check previous commit as reference:
> Commit f6eb39384933 ("ethdev: add 200G link speed")
>
>
> Also last time release notes also updated for new speed, what about
> doing same?
Yes you're right, I will do the same, thanks.
@@ -1352,6 +1352,8 @@ parse_and_check_speed_duplex(char *speedstr, char *duplexstr, uint32_t *speed)
*speed = RTE_ETH_LINK_SPEED_100G;
} else if (!strcmp(speedstr, "200000")) {
*speed = RTE_ETH_LINK_SPEED_200G;
+ } else if (!strcmp(speedstr, "400000")) {
+ *speed = RTE_ETH_LINK_SPEED_400G;
} else if (!strcmp(speedstr, "auto")) {
*speed = RTE_ETH_LINK_SPEED_AUTONEG;
} else {
@@ -612,6 +612,8 @@ device_infos_display_speeds(uint32_t speed_capa)
printf(" 100 Gbps ");
if (speed_capa & RTE_ETH_LINK_SPEED_200G)
printf(" 200 Gbps ");
+ if (speed_capa & RTE_ETH_LINK_SPEED_400G)
+ printf(" 400 Gbps ");
}
void
@@ -568,6 +568,9 @@ parse_link_speed(int n)
case 200000:
speed |= RTE_ETH_LINK_SPEED_200G;
break;
+ case 400000:
+ speed |= RTE_ETH_LINK_SPEED_400G;
+ break;
case 100:
case 10:
default:
@@ -54,7 +54,7 @@ test_link_status_up_default(void)
"string with HDX");
/* test max str len */
- link_status.link_speed = RTE_ETH_SPEED_NUM_200G;
+ link_status.link_speed = RTE_ETH_SPEED_NUM_400G;
link_status.link_duplex = RTE_ETH_LINK_HALF_DUPLEX;
link_status.link_autoneg = RTE_ETH_LINK_AUTONEG;
ret = rte_eth_link_to_str(text, sizeof(text), &link_status);
@@ -130,6 +130,7 @@ test_link_speed_all_values(void)
{ "56 Gbps", RTE_ETH_SPEED_NUM_56G },
{ "100 Gbps", RTE_ETH_SPEED_NUM_100G },
{ "200 Gbps", RTE_ETH_SPEED_NUM_200G },
+ { "400 Gbps", RTE_ETH_SPEED_NUM_400G },
{ "Unknown", RTE_ETH_SPEED_NUM_UNKNOWN },
{ "Invalid", 50505 }
};
@@ -2046,6 +2046,8 @@ virtio_dev_speed_capa_get(uint32_t speed)
return RTE_ETH_LINK_SPEED_100G;
case RTE_ETH_SPEED_NUM_200G:
return RTE_ETH_LINK_SPEED_200G;
+ case RTE_ETH_SPEED_NUM_400G:
+ return RTE_ETH_LINK_SPEED_400G;
default:
return 0;
}
@@ -978,6 +978,9 @@ rte_eth_speed_bitflag(uint32_t speed, int duplex)
case RTE_ETH_SPEED_NUM_200G:
ret = RTE_ETH_LINK_SPEED_200G;
break;
+ case RTE_ETH_SPEED_NUM_400G:
+ ret = RTE_ETH_LINK_SPEED_400G;
+ break;
default:
ret = 0;
}
@@ -2882,6 +2885,9 @@ rte_eth_link_speed_to_str(uint32_t link_speed)
case RTE_ETH_SPEED_NUM_200G:
ret = "200 Gbps";
break;
+ case RTE_ETH_SPEED_NUM_400G:
+ ret = "400 Gbps";
+ break;
case RTE_ETH_SPEED_NUM_UNKNOWN:
ret = "Unknown";
break;
@@ -304,6 +304,7 @@ struct rte_eth_stats {
#define RTE_ETH_LINK_SPEED_56G RTE_BIT32(13) /**< 56 Gbps */
#define RTE_ETH_LINK_SPEED_100G RTE_BIT32(14) /**< 100 Gbps */
#define RTE_ETH_LINK_SPEED_200G RTE_BIT32(15) /**< 200 Gbps */
+#define RTE_ETH_LINK_SPEED_400G RTE_BIT32(16) /**< 400 Gbps */
/**@}*/
/**@{@name Link speed
@@ -323,6 +324,7 @@ struct rte_eth_stats {
#define RTE_ETH_SPEED_NUM_56G 56000 /**< 56 Gbps */
#define RTE_ETH_SPEED_NUM_100G 100000 /**< 100 Gbps */
#define RTE_ETH_SPEED_NUM_200G 200000 /**< 200 Gbps */
+#define RTE_ETH_SPEED_NUM_400G 400000 /**< 400 Gbps */
#define RTE_ETH_SPEED_NUM_UNKNOWN UINT32_MAX /**< Unknown */
/**@}*/