return 0;
 }
 
-static void bnx2x_eeh_recover(struct bnx2x *bp)
-{
-       u32 val;
-
-       mutex_init(&bp->port.phy_mutex);
-
-
-       val = SHMEM_RD(bp, validity_map[BP_PORT(bp)]);
-       if ((val & (SHR_MEM_VALIDITY_DEV_INFO | SHR_MEM_VALIDITY_MB))
-               != (SHR_MEM_VALIDITY_DEV_INFO | SHR_MEM_VALIDITY_MB))
-               BNX2X_ERR("BAD MCP validity signature\n");
-}
-
 /**
  * bnx2x_io_error_detected - called when PCI error is detected
  * @pdev: Pointer to PCI device
 
        if (netif_running(dev)) {
                BNX2X_ERR("IO slot reset --> driver unload\n");
+
+               /* MCP should have been reset; Need to wait for validity */
+               bnx2x_init_shmem(bp);
+
                if (IS_PF(bp) && SHMEM2_HAS(bp, drv_capabilities_flag)) {
                        u32 v;
 
 
        rtnl_lock();
 
-       bnx2x_eeh_recover(bp);
-
        bp->fw_seq = SHMEM_RD(bp, func_mb[BP_FW_MB_IDX(bp)].drv_mb_header) &
                                                        DRV_MSG_SEQ_NUMBER_MASK;