be2net: log digital signature errors while flashing FW image
authorSuresh Reddy <suresh.reddy@avagotech.com>
Wed, 30 Dec 2015 06:29:00 +0000 (01:29 -0500)
committerDavid S. Miller <davem@davemloft.net>
Wed, 30 Dec 2015 21:33:35 +0000 (16:33 -0500)
(based on a jumper setting on the adapter.) In this mode, the FW image when
flashed is authenticated with a digital signature. This patch logs
appropriate error messages and return a status to ethtool when errors
relating to FW image authentication occur.

Signed-off-by: Suresh Reddy <suresh.reddy@avagotech.com>
Signed-off-by: Sathya Perla <sathya.perla@avagotech.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/emulex/benet/be_cmds.c
drivers/net/ethernet/emulex/benet/be_cmds.h

index da3b39873470f3d0c28e85f3ffebf568a5ab90a5..451f9eaa27a24941d47b3bea9b1e5b410c976d7d 100644 (file)
@@ -2959,7 +2959,19 @@ flash:
                } else if (status) {
                        dev_err(dev, "Flashing section type 0x%x failed\n",
                                img_type);
-                       return -EFAULT;
+
+                       switch (addl_status(status)) {
+                       case MCC_ADDL_STATUS_MISSING_SIGNATURE:
+                               dev_err(dev,
+                                       "Digital signature missing in FW\n");
+                               return -EINVAL;
+                       case MCC_ADDL_STATUS_INVALID_SIGNATURE:
+                               dev_err(dev,
+                                       "Invalid digital signature in FW\n");
+                               return -EINVAL;
+                       default:
+                               return -EFAULT;
+                       }
                }
        }
        return 0;
index 4b0ca994d6c38c08801fe583fe80bd83b79cbc7a..16415cad1298052c455f9ba6dbb601c0583bcd11 100644 (file)
@@ -66,7 +66,9 @@ enum mcc_addl_status {
        MCC_ADDL_STATUS_INSUFFICIENT_RESOURCES = 0x16,
        MCC_ADDL_STATUS_FLASH_IMAGE_CRC_MISMATCH = 0x4d,
        MCC_ADDL_STATUS_TOO_MANY_INTERFACES = 0x4a,
-       MCC_ADDL_STATUS_INSUFFICIENT_VLANS = 0xab
+       MCC_ADDL_STATUS_INSUFFICIENT_VLANS = 0xab,
+       MCC_ADDL_STATUS_INVALID_SIGNATURE = 0x56,
+       MCC_ADDL_STATUS_MISSING_SIGNATURE = 0x57
 };
 
 #define CQE_BASE_STATUS_MASK           0xFFFF