|
@@ -1783,6 +1783,29 @@ int bnx2x_nic_load(struct bnx2x *bp, int load_mode)
|
|
|
rc = -EBUSY; /* other port in diagnostic mode */
|
|
|
LOAD_ERROR_EXIT(bp, load_error1);
|
|
|
}
|
|
|
+ if (load_code != FW_MSG_CODE_DRV_LOAD_COMMON_CHIP &&
|
|
|
+ load_code != FW_MSG_CODE_DRV_LOAD_COMMON) {
|
|
|
+ /* build FW version dword */
|
|
|
+ u32 my_fw = (BCM_5710_FW_MAJOR_VERSION) +
|
|
|
+ (BCM_5710_FW_MINOR_VERSION << 8) +
|
|
|
+ (BCM_5710_FW_REVISION_VERSION << 16) +
|
|
|
+ (BCM_5710_FW_ENGINEERING_VERSION << 24);
|
|
|
+
|
|
|
+ /* read loaded FW from chip */
|
|
|
+ u32 loaded_fw = REG_RD(bp, XSEM_REG_PRAM);
|
|
|
+
|
|
|
+ DP(BNX2X_MSG_SP, "loaded fw %x, my fw %x",
|
|
|
+ loaded_fw, my_fw);
|
|
|
+
|
|
|
+ /* abort nic load if version mismatch */
|
|
|
+ if (my_fw != loaded_fw) {
|
|
|
+ BNX2X_ERR("bnx2x with FW %x already loaded, "
|
|
|
+ "which mismatches my %x FW. aborting",
|
|
|
+ loaded_fw, my_fw);
|
|
|
+ rc = -EBUSY;
|
|
|
+ LOAD_ERROR_EXIT(bp, load_error2);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
} else {
|
|
|
int path = BP_PATH(bp);
|