case MCI_STATE_NEED_FTP_STOMP:
                value = !(mci->config & ATH_MCI_CONFIG_DISABLE_FTP_STOMP);
                break;
+       case MCI_STATE_NEED_FLUSH_BT_INFO:
+               value = (!mci->unhalt_bt_gpm && mci->need_flush_btinfo) ? 1 : 0;
+               mci->need_flush_btinfo = false;
+               break;
        default:
                break;
        }
 
        MCI_STATE_RECOVER_RX,
        MCI_STATE_NEED_FTP_STOMP,
        MCI_STATE_DEBUG,
+       MCI_STATE_NEED_FLUSH_BT_INFO,
        MCI_STATE_MAX
 };
 
        MCI_GPM_COEX_WLAN_CHANNELS,
        MCI_GPM_COEX_BT_PROFILE_INFO,
        MCI_GPM_COEX_BT_STATUS_UPDATE,
-       MCI_GPM_COEX_BT_UPDATE_FLAGS
+       MCI_GPM_COEX_BT_UPDATE_FLAGS,
+       MCI_GPM_COEX_NOOP,
 };
 
 #define MCI_GPM_NOMORE  0
 
        struct ath_mci_profile_info *info, *tinfo;
 
        mci->aggr_limit = 0;
+       mci->num_mgmt = 0;
 
        if (list_empty(&mci->info))
                return;
        u8 major, minor;
        u32 seq_num;
 
+       if (ar9003_mci_state(ah, MCI_STATE_NEED_FLUSH_BT_INFO) &&
+           ar9003_mci_state(ah, MCI_STATE_ENABLE)) {
+               ath_dbg(common, MCI, "(MCI) Need to flush BT profiles\n");
+               ath_mci_flush_profile(&sc->btcoex.mci);
+               ar9003_mci_state(ah, MCI_STATE_SEND_STATUS_QUERY);
+       }
+
        switch (opcode) {
        case MCI_GPM_COEX_VERSION_QUERY:
                ar9003_mci_state(ah, MCI_STATE_SEND_WLAN_COEX_VERSION);
        }
 
        if ((mci_int & AR_MCI_INTERRUPT_RX_INVALID_HDR) ||
-           (mci_int & AR_MCI_INTERRUPT_CONT_INFO_TIMEOUT))
+           (mci_int & AR_MCI_INTERRUPT_CONT_INFO_TIMEOUT)) {
                mci_int &= ~(AR_MCI_INTERRUPT_RX_INVALID_HDR |
                             AR_MCI_INTERRUPT_CONT_INFO_TIMEOUT);
+               ath_mci_msg(sc, MCI_GPM_COEX_NOOP, NULL);
+       }
 }
 
 void ath_mci_enable(struct ath_softc *sc)