bt_dev_dbg(hdev, "RXQ: cr_hia: %u  cr_tia: %u", cr_hia, cr_tia);
 
        /* Check CR_TIA and CR_HIA for change */
-       if (cr_tia == cr_hia) {
-               bt_dev_warn(hdev, "RXQ: no new CD found");
+       if (cr_tia == cr_hia)
                return;
-       }
 
        rxq = &data->rxq;
 
        return IRQ_WAKE_THREAD;
 }
 
+static inline bool btintel_pcie_is_rxq_empty(struct btintel_pcie_data *data)
+{
+       return data->ia.cr_hia[BTINTEL_PCIE_RXQ_NUM] == data->ia.cr_tia[BTINTEL_PCIE_RXQ_NUM];
+}
+
+static inline bool btintel_pcie_is_txackq_empty(struct btintel_pcie_data *data)
+{
+       return data->ia.cr_tia[BTINTEL_PCIE_TXQ_NUM] == data->ia.cr_hia[BTINTEL_PCIE_TXQ_NUM];
+}
+
 static irqreturn_t btintel_pcie_irq_msix_handler(int irq, void *dev_id)
 {
        struct msix_entry *entry = dev_id;
                btintel_pcie_msix_gp0_handler(data);
 
        /* For TX */
-       if (intr_fh & BTINTEL_PCIE_MSIX_FH_INT_CAUSES_0)
+       if (intr_fh & BTINTEL_PCIE_MSIX_FH_INT_CAUSES_0) {
                btintel_pcie_msix_tx_handle(data);
+               if (!btintel_pcie_is_rxq_empty(data))
+                       btintel_pcie_msix_rx_handle(data);
+       }
 
        /* For RX */
-       if (intr_fh & BTINTEL_PCIE_MSIX_FH_INT_CAUSES_1)
+       if (intr_fh & BTINTEL_PCIE_MSIX_FH_INT_CAUSES_1) {
                btintel_pcie_msix_rx_handle(data);
+               if (!btintel_pcie_is_txackq_empty(data))
+                       btintel_pcie_msix_tx_handle(data);
+       }
 
        /*
         * Before sending the interrupt the HW disables it to prevent a nested