scsi: qla2xxx: Show correct port speed capabilities for RDP command
authorHimanshu Madhani <hmadhani@marvell.com>
Wed, 12 Feb 2020 21:44:22 +0000 (13:44 -0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Mon, 24 Feb 2020 17:34:28 +0000 (12:34 -0500)
This patch correctly displays port speed capability and current speed for
RDP command.

Link: https://lore.kernel.org/r/20200212214436.25532-12-hmadhani@marvell.com
Signed-off-by: Himanshu Madhani <hmadhani@marvell.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/qla2xxx/qla_os.c

index 3e6f7fa..f9422f4 100644 (file)
@@ -5764,13 +5764,39 @@ qla25xx_rdp_port_speed_capability(struct qla_hw_data *ha)
        if (IS_CNA_CAPABLE(ha))
                return RDP_PORT_SPEED_10GB;
 
-       if (IS_QLA27XX(ha)) {
-               if (FW_ABILITY_MAX_SPEED(ha) == FW_ABILITY_MAX_SPEED_32G)
-                       return RDP_PORT_SPEED_32GB|RDP_PORT_SPEED_16GB|
-                              RDP_PORT_SPEED_8GB;
+       if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) {
+               unsigned int speeds = 0;
 
-               return RDP_PORT_SPEED_16GB|RDP_PORT_SPEED_8GB|
-                      RDP_PORT_SPEED_4GB;
+               if (ha->max_supported_speed == 2) {
+                       if (ha->min_supported_speed <= 6)
+                               speeds |= RDP_PORT_SPEED_64GB;
+               }
+
+               if (ha->max_supported_speed == 2 ||
+                   ha->max_supported_speed == 1) {
+                       if (ha->min_supported_speed <= 5)
+                               speeds |= RDP_PORT_SPEED_32GB;
+               }
+
+               if (ha->max_supported_speed == 2 ||
+                   ha->max_supported_speed == 1 ||
+                   ha->max_supported_speed == 0) {
+                       if (ha->min_supported_speed <= 4)
+                               speeds |= RDP_PORT_SPEED_16GB;
+               }
+
+               if (ha->max_supported_speed == 1 ||
+                   ha->max_supported_speed == 0) {
+                       if (ha->min_supported_speed <= 3)
+                               speeds |= RDP_PORT_SPEED_8GB;
+               }
+
+               if (ha->max_supported_speed == 0) {
+                       if (ha->min_supported_speed <= 2)
+                               speeds |= RDP_PORT_SPEED_4GB;
+               }
+
+               return speeds;
        }
 
        if (IS_QLA2031(ha))
@@ -5816,6 +5842,9 @@ qla25xx_rdp_port_speed_currently(struct qla_hw_data *ha)
        case PORT_SPEED_32GB:
                return RDP_PORT_SPEED_32GB;
 
+       case PORT_SPEED_64GB:
+               return RDP_PORT_SPEED_64GB;
+
        default:
                return RDP_PORT_SPEED_UNKNOWN;
        }