return false;
 }
 
-static bool brcmf_is_linkdown(const struct brcmf_event_msg *e)
+static bool brcmf_is_linkdown(struct brcmf_cfg80211_vif *vif,
+                           const struct brcmf_event_msg *e)
 {
        u32 event = e->event_code;
        u16 flags = e->flags;
            (event == BRCMF_E_DISASSOC_IND) ||
            ((event == BRCMF_E_LINK) && (!(flags & BRCMF_EVENT_MSG_LINK)))) {
                brcmf_dbg(CONN, "Processing link down\n");
+               clear_bit(BRCMF_VIF_STATUS_EAP_SUCCESS, &vif->sme_state);
+               clear_bit(BRCMF_VIF_STATUS_ASSOC_SUCCESS, &vif->sme_state);
                return true;
        }
        return false;
                } else
                        brcmf_bss_connect_done(cfg, ndev, e, true);
                brcmf_net_setcarrier(ifp, true);
-       } else if (brcmf_is_linkdown(e)) {
+       } else if (brcmf_is_linkdown(ifp->vif, e)) {
                brcmf_dbg(CONN, "Linkdown\n");
                if (!brcmf_is_ibssmode(ifp->vif) &&
                    test_bit(BRCMF_VIF_STATUS_CONNECTED,