if (!fw_health)
                        goto async_event_process_exit;
 
-               fw_health->enabled = EVENT_DATA1_RECOVERY_ENABLED(data1);
-               fw_health->master = EVENT_DATA1_RECOVERY_MASTER_FUNC(data1);
-               if (!fw_health->enabled) {
+               if (!EVENT_DATA1_RECOVERY_ENABLED(data1)) {
+                       fw_health->enabled = false;
                        netif_info(bp, drv, bp->dev,
                                   "Error recovery info: error recovery[0]\n");
                        break;
                }
+               fw_health->master = EVENT_DATA1_RECOVERY_MASTER_FUNC(data1);
                fw_health->tmr_multiplier =
                        DIV_ROUND_UP(fw_health->polling_dsecs * HZ,
                                     bp->current_interval * 10);
                fw_health->tmr_counter = fw_health->tmr_multiplier;
-               fw_health->last_fw_heartbeat =
-                       bnxt_fw_health_readl(bp, BNXT_FW_HEARTBEAT_REG);
-               fw_health->last_fw_reset_cnt =
-                       bnxt_fw_health_readl(bp, BNXT_FW_RESET_CNT_REG);
+               if (!fw_health->enabled) {
+                       fw_health->last_fw_heartbeat =
+                               bnxt_fw_health_readl(bp, BNXT_FW_HEARTBEAT_REG);
+                       fw_health->last_fw_reset_cnt =
+                               bnxt_fw_health_readl(bp, BNXT_FW_RESET_CNT_REG);
+               }
                netif_info(bp, drv, bp->dev,
                           "Error recovery info: error recovery[1], master[%d], reset count[%u], health status: 0x%x\n",
                           fw_health->master, fw_health->last_fw_reset_cnt,
                           bnxt_fw_health_readl(bp, BNXT_FW_HEALTH_REG));
+               if (!fw_health->enabled) {
+                       /* Make sure tmr_counter is set and visible to
+                        * bnxt_health_check() before setting enabled to true.
+                        */
+                       smp_wmb();
+                       fw_health->enabled = true;
+               }
                goto async_event_process_exit;
        }
        case ASYNC_EVENT_CMPL_EVENT_ID_DEBUG_NOTIFICATION:
        if (!fw_health->enabled || test_bit(BNXT_STATE_IN_FW_RESET, &bp->state))
                return;
 
+       /* Make sure it is enabled before checking the tmr_counter. */
+       smp_rmb();
        if (fw_health->tmr_counter) {
                fw_health->tmr_counter--;
                return;