]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
RDMA/mlx5: Enable multiplane mode only when it is supported
authorMark Zhang <markzhang@nvidia.com>
Thu, 19 Dec 2024 12:23:36 +0000 (14:23 +0200)
committerJason Gunthorpe <jgg@nvidia.com>
Fri, 3 Jan 2025 13:17:19 +0000 (09:17 -0400)
Driver queries vport_cxt.num_plane and enables multiplane when it is
greater then 0, but some old FWs (versions from x.40.1000 till x.42.1000),
report vport_cxt.num_plane = 1 unexpectedly.

Fix it by querying num_plane only when HCA_CAP2.multiplane bit is set.

Fixes: 2a5db20fa532 ("RDMA/mlx5: Add support to multi-plane device and port")
Link: https://patch.msgid.link/r/1ef901acdf564716fcf550453cf5e94f343777ec.1734610916.git.leon@kernel.org
Cc: stable@vger.kernel.org
Reported-by: Francesco Poli <invernomuto@paranoici.org>
Closes: https://lore.kernel.org/all/nvs4i2v7o6vn6zhmtq4sgazy2hu5kiulukxcntdelggmznnl7h@so3oul6uwgbl/
Signed-off-by: Mark Zhang <markzhang@nvidia.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Reviewed-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/hw/mlx5/main.c
include/linux/mlx5/mlx5_ifc.h

index c2314797afc9b274bc0ec23cf54fb59ce2e68c29..f5b59d02f4d3a8d7e15b52a2050563f34fe8ee40 100644 (file)
@@ -2839,7 +2839,7 @@ static int mlx5_ib_get_plane_num(struct mlx5_core_dev *mdev, u8 *num_plane)
        int err;
 
        *num_plane = 0;
-       if (!MLX5_CAP_GEN(mdev, ib_virt))
+       if (!MLX5_CAP_GEN(mdev, ib_virt) || !MLX5_CAP_GEN_2(mdev, multiplane))
                return 0;
 
        err = mlx5_query_hca_vport_context(mdev, 0, 1, 0, &vport_ctx);
index 4fbbcf35498bbc98171de6802ace8d9f136f4ae9..48d47181c7cd187ffdafae54215acd1280af980d 100644 (file)
@@ -2119,7 +2119,9 @@ struct mlx5_ifc_cmd_hca_cap_2_bits {
        u8         migration_in_chunks[0x1];
        u8         reserved_at_d1[0x1];
        u8         sf_eq_usage[0x1];
-       u8         reserved_at_d3[0xd];
+       u8         reserved_at_d3[0x5];
+       u8         multiplane[0x1];
+       u8         reserved_at_d9[0x7];
 
        u8         cross_vhca_object_to_object_supported[0x20];