]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
be2net: NCSI FW section should be properly updated with ethtool for BE3
authorSriharsha Basavapatna <sriharsha.basavapatna@broadcom.com>
Sun, 9 Oct 2016 04:28:50 +0000 (09:58 +0530)
committerDhaval Giani <dhaval.giani@oracle.com>
Wed, 8 Mar 2017 01:05:37 +0000 (20:05 -0500)
Orabug: 25570957

The driver has a check to ensure that NCSI FW section is updated only
if the current FW version in the card supports it. This FW version check
is done using memcmp() which obviously fails in some cases. Fix this by
breaking up the version string into integer version components and
comparing them.

Signed-off-by: Sriharsha Basavapatna <sriharsha.basavapatna@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit f5ef017e1195d0a8c69a82bf95fea9c776b93ff0)
Signed-off-by: Brian Maly <brian.maly@oracle.com>
Signed-off-by: Dhaval Giani <dhaval.giani@oracle.com>
drivers/net/ethernet/emulex/benet/be_cmds.c

index eb74c47d296ee682de00f9cf943c7f92bb1e5fcc..753f8456c029673c2e8855969ff8364f44d64217 100644 (file)
@@ -2728,6 +2728,26 @@ static int be_flash(struct be_adapter *adapter, const u8 *img,
        return 0;
 }
 
+#define NCSI_UPDATE_LOG        "NCSI section update is not supported in FW ver %s\n"
+static bool be_fw_ncsi_supported(char *ver)
+{
+       int v1[4] = {3, 102, 148, 0}; /* Min ver that supports NCSI FW */
+       int v2[4];
+       int i;
+
+       if (sscanf(ver, "%d.%d.%d.%d", &v2[0], &v2[1], &v2[2], &v2[3]) != 4)
+               return false;
+
+       for (i = 0; i < 4; i++) {
+               if (v1[i] < v2[i])
+                       return true;
+               else if (v1[i] > v2[i])
+                       return false;
+       }
+
+       return true;
+}
+
 /* For BE2, BE3 and BE3-R */
 static int be_flash_BEx(struct be_adapter *adapter,
                        const struct firmware *fw,
@@ -2805,8 +2825,10 @@ static int be_flash_BEx(struct be_adapter *adapter,
                        continue;
 
                if ((pflashcomp[i].optype == OPTYPE_NCSI_FW) &&
-                   memcmp(adapter->fw_ver, "3.102.148.0", 11) < 0)
+                   !be_fw_ncsi_supported(adapter->fw_ver)) {
+                       dev_info(dev, NCSI_UPDATE_LOG, adapter->fw_ver);
                        continue;
+               }
 
                if (pflashcomp[i].optype == OPTYPE_PHY_FW  &&
                    !phy_flashing_required(adapter))