rs->rs_phyerr = phyerr;
                } else if (ads.ds_rxstatus8 & AR_DecryptCRCErr)
                        rs->rs_status |= ATH9K_RXERR_DECRYPT;
-               else if (ads.ds_rxstatus8 & AR_MichaelErr)
+               else if ((ads.ds_rxstatus8 & AR_MichaelErr) &&
+                        rs->rs_keyix != ATH9K_RXKEYIX_INVALID)
                        rs->rs_status |= ATH9K_RXERR_MIC;
                else if (ads.ds_rxstatus8 & AR_KeyMiss)
                        rs->rs_status |= ATH9K_RXERR_DECRYPT;
 
        int hdrlen, padpos, padsize;
        u8 keyix;
        __le16 fc;
-       bool is_mc;
 
        /* see if any padding is done by the hw and remove it */
        hdr = (struct ieee80211_hdr *) skb->data;
-       is_mc = !!is_multicast_ether_addr(hdr->addr1);
        hdrlen = ieee80211_get_hdrlen_from_skb(skb);
        fc = hdr->frame_control;
        padpos = ath9k_cmn_padpos(hdr->frame_control);
 
        keyix = rx_stats->rs_keyix;
 
-       if ((is_mc || !(keyix == ATH9K_RXKEYIX_INVALID)) && !decrypt_error &&
+       if (!(keyix == ATH9K_RXKEYIX_INVALID) && !decrypt_error &&
            ieee80211_has_protected(fc)) {
                rxs->flag |= RX_FLAG_DECRYPTED;
        } else if (ieee80211_has_protected(fc)