|
@@ -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))
|