IB/core: Add more speed parsing in ib_get_width_and_speed()
authorKalesh AP <kalesh-anakkur.purayil@broadcom.com>
Wed, 2 Aug 2023 09:00:23 +0000 (02:00 -0700)
committerLeon Romanovsky <leon@kernel.org>
Sun, 13 Aug 2023 07:41:57 +0000 (10:41 +0300)
When the Ethernet driver does not provide the number of lanes
in the __ethtool_get_link_ksettings() response, the function
ib_get_width_and_speed() does not take consideration of 50G,
100G and 200G speeds while calculating the IB width and speed.
Update the width and speed for the above netdev speeds.

Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
Link: https://lore.kernel.org/r/1690966823-8159-1-git-send-email-selvin.xavier@broadcom.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/core/verbs.c

index 25367bd..41ff559 100644 (file)
@@ -1899,9 +1899,18 @@ static void ib_get_width_and_speed(u32 netdev_speed, u32 lanes,
                } else if (netdev_speed <= SPEED_40000) {
                        *width = IB_WIDTH_4X;
                        *speed = IB_SPEED_FDR10;
-               } else {
+               } else if (netdev_speed <= SPEED_50000) {
+                       *width = IB_WIDTH_2X;
+                       *speed = IB_SPEED_EDR;
+               } else if (netdev_speed <= SPEED_100000) {
                        *width = IB_WIDTH_4X;
                        *speed = IB_SPEED_EDR;
+               } else if (netdev_speed <= SPEED_200000) {
+                       *width = IB_WIDTH_4X;
+                       *speed = IB_SPEED_HDR;
+               } else {
+                       *width = IB_WIDTH_4X;
+                       *speed = IB_SPEED_NDR;
                }
 
                return;