From: Maher Sanalla <msanalla@nvidia.com>
Add a check for 1600G_8X link speed when querying PTYS and report it
back correctly when needed.
While at it, adjust mlx5 function which maps the speed rate from IB
spec values to internal driver values to be able to handle speeds
up to 1600Gbps.
Reviewed-by: Michael Guralnik <michaelgur@nvidia.com>
Signed-off-by: Maher Sanalla <msanalla@nvidia.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
---
drivers/infiniband/hw/mlx5/main.c | 4 ++++
drivers/infiniband/hw/mlx5/qp.c | 5 +++--
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
index 90daa58126f4..40284bbb45d6 100644
--- a/drivers/infiniband/hw/mlx5/main.c
+++ b/drivers/infiniband/hw/mlx5/main.c
@@ -511,6 +511,10 @@ static int translate_eth_ext_proto_oper(u32 eth_proto_oper, u16 *active_speed,
*active_width = IB_WIDTH_4X;
*active_speed = IB_SPEED_XDR;
break;
+ case MLX5E_PROT_MASK(MLX5E_1600TAUI_8_1600TBASE_CR8_KR8):
+ *active_width = IB_WIDTH_8X;
+ *active_speed = IB_SPEED_XDR;
+ break;
default:
return -EINVAL;
}
diff --git a/drivers/infiniband/hw/mlx5/qp.c b/drivers/infiniband/hw/mlx5/qp.c
index 88724d15705d..69af20790481 100644
--- a/drivers/infiniband/hw/mlx5/qp.c
+++ b/drivers/infiniband/hw/mlx5/qp.c
@@ -3451,10 +3451,11 @@ int mlx5r_ib_rate(struct mlx5_ib_dev *dev, u8 rate)
{
u32 stat_rate_support;
- if (rate == IB_RATE_PORT_CURRENT || rate == IB_RATE_800_GBPS)
+ if (rate == IB_RATE_PORT_CURRENT || rate == IB_RATE_800_GBPS ||
+ rate == IB_RATE_1600_GBPS)
return 0;
- if (rate < IB_RATE_2_5_GBPS || rate > IB_RATE_800_GBPS)
+ if (rate < IB_RATE_2_5_GBPS || rate > IB_RATE_1600_GBPS)
return -EINVAL;
stat_rate_support = MLX5_CAP_GEN(dev->mdev, stat_rate_support);
--
2.51.1
On Thu, Nov 20, 2025 at 9:02 PM Leon Romanovsky <leon@kernel.org> wrote: > > From: Maher Sanalla <msanalla@nvidia.com> > > Add a check for 1600G_8X link speed when querying PTYS and report it > back correctly when needed. > > While at it, adjust mlx5 function which maps the speed rate from IB > spec values to internal driver values to be able to handle speeds > up to 1600Gbps. > > Reviewed-by: Michael Guralnik <michaelgur@nvidia.com> > Signed-off-by: Maher Sanalla <msanalla@nvidia.com> > Signed-off-by: Leon Romanovsky <leonro@nvidia.com> Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com> -- Regards, Kalesh AP
On 11/20/25 7:15 AM, Leon Romanovsky wrote:
> From: Maher Sanalla <msanalla@nvidia.com>
>
> Add a check for 1600G_8X link speed when querying PTYS and report it
> back correctly when needed.
Amazing — 1600G is supported. I’m not sure whether this rate is
supported only for InfiniBand or if it’s also available for RoCEv2. In
any case, having such a high data rate is truly impressive.
Reviewed-by: Zhu Yanjun <yanjun.zhu@linux.dev>
Zhu Yanjun
>
> While at it, adjust mlx5 function which maps the speed rate from IB
> spec values to internal driver values to be able to handle speeds
> up to 1600Gbps.
>
> Reviewed-by: Michael Guralnik <michaelgur@nvidia.com>
> Signed-off-by: Maher Sanalla <msanalla@nvidia.com>
> Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
> ---
> drivers/infiniband/hw/mlx5/main.c | 4 ++++
> drivers/infiniband/hw/mlx5/qp.c | 5 +++--
> 2 files changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
> index 90daa58126f4..40284bbb45d6 100644
> --- a/drivers/infiniband/hw/mlx5/main.c
> +++ b/drivers/infiniband/hw/mlx5/main.c
> @@ -511,6 +511,10 @@ static int translate_eth_ext_proto_oper(u32 eth_proto_oper, u16 *active_speed,
> *active_width = IB_WIDTH_4X;
> *active_speed = IB_SPEED_XDR;
> break;
> + case MLX5E_PROT_MASK(MLX5E_1600TAUI_8_1600TBASE_CR8_KR8):
> + *active_width = IB_WIDTH_8X;
> + *active_speed = IB_SPEED_XDR;
> + break;
> default:
> return -EINVAL;
> }
> diff --git a/drivers/infiniband/hw/mlx5/qp.c b/drivers/infiniband/hw/mlx5/qp.c
> index 88724d15705d..69af20790481 100644
> --- a/drivers/infiniband/hw/mlx5/qp.c
> +++ b/drivers/infiniband/hw/mlx5/qp.c
> @@ -3451,10 +3451,11 @@ int mlx5r_ib_rate(struct mlx5_ib_dev *dev, u8 rate)
> {
> u32 stat_rate_support;
>
> - if (rate == IB_RATE_PORT_CURRENT || rate == IB_RATE_800_GBPS)
> + if (rate == IB_RATE_PORT_CURRENT || rate == IB_RATE_800_GBPS ||
> + rate == IB_RATE_1600_GBPS)
> return 0;
>
> - if (rate < IB_RATE_2_5_GBPS || rate > IB_RATE_800_GBPS)
> + if (rate < IB_RATE_2_5_GBPS || rate > IB_RATE_1600_GBPS)
> return -EINVAL;
>
> stat_rate_support = MLX5_CAP_GEN(dev->mdev, stat_rate_support);
>
On Thu, Nov 20, 2025 at 02:44:20PM -0800, yanjun.zhu wrote:
> On 11/20/25 7:15 AM, Leon Romanovsky wrote:
> > From: Maher Sanalla <msanalla@nvidia.com>
> >
> > Add a check for 1600G_8X link speed when querying PTYS and report it
> > back correctly when needed.
>
> Amazing — 1600G is supported. I’m not sure whether this rate is supported
> only for InfiniBand or if it’s also available for RoCEv2. In any case,
> having such a high data rate is truly impressive.
It is both for InfiniBand and RoCE.
>
> Reviewed-by: Zhu Yanjun <yanjun.zhu@linux.dev>
Thanks
>
> Zhu Yanjun
>
> >
> > While at it, adjust mlx5 function which maps the speed rate from IB
> > spec values to internal driver values to be able to handle speeds
> > up to 1600Gbps.
> >
> > Reviewed-by: Michael Guralnik <michaelgur@nvidia.com>
> > Signed-off-by: Maher Sanalla <msanalla@nvidia.com>
> > Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
> > ---
> > drivers/infiniband/hw/mlx5/main.c | 4 ++++
> > drivers/infiniband/hw/mlx5/qp.c | 5 +++--
> > 2 files changed, 7 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
> > index 90daa58126f4..40284bbb45d6 100644
> > --- a/drivers/infiniband/hw/mlx5/main.c
> > +++ b/drivers/infiniband/hw/mlx5/main.c
> > @@ -511,6 +511,10 @@ static int translate_eth_ext_proto_oper(u32 eth_proto_oper, u16 *active_speed,
> > *active_width = IB_WIDTH_4X;
> > *active_speed = IB_SPEED_XDR;
> > break;
> > + case MLX5E_PROT_MASK(MLX5E_1600TAUI_8_1600TBASE_CR8_KR8):
> > + *active_width = IB_WIDTH_8X;
> > + *active_speed = IB_SPEED_XDR;
> > + break;
> > default:
> > return -EINVAL;
> > }
> > diff --git a/drivers/infiniband/hw/mlx5/qp.c b/drivers/infiniband/hw/mlx5/qp.c
> > index 88724d15705d..69af20790481 100644
> > --- a/drivers/infiniband/hw/mlx5/qp.c
> > +++ b/drivers/infiniband/hw/mlx5/qp.c
> > @@ -3451,10 +3451,11 @@ int mlx5r_ib_rate(struct mlx5_ib_dev *dev, u8 rate)
> > {
> > u32 stat_rate_support;
> > - if (rate == IB_RATE_PORT_CURRENT || rate == IB_RATE_800_GBPS)
> > + if (rate == IB_RATE_PORT_CURRENT || rate == IB_RATE_800_GBPS ||
> > + rate == IB_RATE_1600_GBPS)
> > return 0;
> > - if (rate < IB_RATE_2_5_GBPS || rate > IB_RATE_800_GBPS)
> > + if (rate < IB_RATE_2_5_GBPS || rate > IB_RATE_1600_GBPS)
> > return -EINVAL;
> > stat_rate_support = MLX5_CAP_GEN(dev->mdev, stat_rate_support);
> >
>
>
© 2016 - 2025 Red Hat, Inc.