RDMA/irdma: Report the correct link speed
authorShiraz Saleem <shiraz.saleem@intel.com>
Fri, 4 Nov 2022 23:49:57 +0000 (18:49 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 31 Dec 2022 12:32:31 +0000 (13:32 +0100)
[ Upstream commit 4eace75e0853273755b878ffa9cce6de84df975a ]

The active link speed is currently hard-coded in irdma_query_port due
to which the port rate in ibstatus does reflect the active link speed.

Call ib_get_eth_speed in irdma_query_port to get the active link speed.

Fixes: b48c24c2d710 ("RDMA/irdma: Implement device supported verb APIs")
Reported-by: Kamal Heib <kamalheib1@gmail.com>
Signed-off-by: Shiraz Saleem <shiraz.saleem@intel.com>
Link: https://lore.kernel.org/r/20221104234957.1135-1-shiraz.saleem@intel.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/infiniband/hw/irdma/verbs.c

index a22afbb..4342417 100644 (file)
@@ -64,36 +64,6 @@ static int irdma_query_device(struct ib_device *ibdev,
 }
 
 /**
- * irdma_get_eth_speed_and_width - Get IB port speed and width from netdev speed
- * @link_speed: netdev phy link speed
- * @active_speed: IB port speed
- * @active_width: IB port width
- */
-static void irdma_get_eth_speed_and_width(u32 link_speed, u16 *active_speed,
-                                         u8 *active_width)
-{
-       if (link_speed <= SPEED_1000) {
-               *active_width = IB_WIDTH_1X;
-               *active_speed = IB_SPEED_SDR;
-       } else if (link_speed <= SPEED_10000) {
-               *active_width = IB_WIDTH_1X;
-               *active_speed = IB_SPEED_FDR10;
-       } else if (link_speed <= SPEED_20000) {
-               *active_width = IB_WIDTH_4X;
-               *active_speed = IB_SPEED_DDR;
-       } else if (link_speed <= SPEED_25000) {
-               *active_width = IB_WIDTH_1X;
-               *active_speed = IB_SPEED_EDR;
-       } else if (link_speed <= SPEED_40000) {
-               *active_width = IB_WIDTH_4X;
-               *active_speed = IB_SPEED_FDR10;
-       } else {
-               *active_width = IB_WIDTH_4X;
-               *active_speed = IB_SPEED_EDR;
-       }
-}
-
-/**
  * irdma_query_port - get port attributes
  * @ibdev: device pointer from stack
  * @port: port number for query
@@ -120,8 +90,9 @@ static int irdma_query_port(struct ib_device *ibdev, u32 port,
                props->state = IB_PORT_DOWN;
                props->phys_state = IB_PORT_PHYS_STATE_DISABLED;
        }
-       irdma_get_eth_speed_and_width(SPEED_100000, &props->active_speed,
-                                     &props->active_width);
+
+       ib_get_eth_speed(ibdev, port, &props->active_speed,
+                        &props->active_width);
 
        if (rdma_protocol_roce(ibdev, 1)) {
                props->gid_tbl_len = 32;