static int ath10k_htt_rx_amsdu_pop(struct ath10k_htt *htt,
                                   u8 **fw_desc, int *fw_desc_len,
                                   struct sk_buff **head_msdu,
-                                  struct sk_buff **tail_msdu)
+                                  struct sk_buff **tail_msdu,
+                                  u32 *attention)
 {
        int msdu_len, msdu_chaining = 0;
        struct sk_buff *msdu;
                        break;
                }
 
+               *attention |= __le32_to_cpu(rx_desc->attention.flags) &
+                                           (RX_ATTENTION_FLAGS_TKIP_MIC_ERR |
+                                            RX_ATTENTION_FLAGS_DECRYPT_ERR |
+                                            RX_ATTENTION_FLAGS_FCS_ERR |
+                                            RX_ATTENTION_FLAGS_MGMT_TYPE);
                /*
                 * Copy the FW rx descriptor for this MSDU from the rx
                 * indication message into the MSDU's netbuf. HL uses the
                for (j = 0; j < mpdu_ranges[i].mpdu_count; j++) {
                        struct sk_buff *msdu_head, *msdu_tail;
 
+                       attention = 0;
                        msdu_head = NULL;
                        msdu_tail = NULL;
                        ret = ath10k_htt_rx_amsdu_pop(htt,
                                                      &fw_desc,
                                                      &fw_desc_len,
                                                      &msdu_head,
-                                                     &msdu_tail);
+                                                     &msdu_tail,
+                                                     &attention);
 
                        if (ret < 0) {
                                ath10k_warn("failed to pop amsdu from htt rx ring %d\n",
                        rxd = container_of((void *)msdu_head->data,
                                           struct htt_rx_desc,
                                           msdu_payload);
-                       attention = __le32_to_cpu(rxd->attention.flags);
 
                        if (!ath10k_htt_rx_amsdu_allowed(htt, msdu_head,
                                                         status,
        u8 *fw_desc;
        int fw_desc_len, hdrlen, paramlen;
        int trim;
+       u32 attention = 0;
 
        fw_desc_len = __le16_to_cpu(frag->fw_rx_desc_bytes);
        fw_desc = (u8 *)frag->fw_msdu_rx_desc;
 
        spin_lock_bh(&htt->rx_ring.lock);
        ret = ath10k_htt_rx_amsdu_pop(htt, &fw_desc, &fw_desc_len,
-                                     &msdu_head, &msdu_tail);
+                                     &msdu_head, &msdu_tail,
+                                     &attention);
        spin_unlock_bh(&htt->rx_ring.lock);
 
        ath10k_dbg(ATH10K_DBG_HTT_DUMP, "htt rx frag ahead\n");
 
        hdr = (struct ieee80211_hdr *)msdu_head->data;
        rxd = (void *)msdu_head->data - sizeof(*rxd);
-       tkip_mic_err = !!(__le32_to_cpu(rxd->attention.flags) &
-                               RX_ATTENTION_FLAGS_TKIP_MIC_ERR);
-       decrypt_err = !!(__le32_to_cpu(rxd->attention.flags) &
-                               RX_ATTENTION_FLAGS_DECRYPT_ERR);
+       tkip_mic_err = !!(attention & RX_ATTENTION_FLAGS_TKIP_MIC_ERR);
+       decrypt_err = !!(attention & RX_ATTENTION_FLAGS_DECRYPT_ERR);
        fmt = MS(__le32_to_cpu(rxd->msdu_start.info1),
                        RX_MSDU_START_INFO1_DECAP_FORMAT);