if (v0 & MT_PRXV_HT_AD_CODE)
                        status->enc_flags |= RX_ENC_FLAG_LDPC;
 
+               ret = mt76_connac2_mac_fill_rx_rate(&dev->mt76, status, sband,
+                                                   rxv, &mode);
+               if (ret < 0)
+                       return ret;
+
+               if (rxd1 & MT_RXD1_NORMAL_GROUP_5) {
+                       rxd += 6;
+                       if ((u8 *)rxd - skb->data >= skb->len)
+                               return -EINVAL;
+
+                       rxv = rxd;
+                       /* Monitor mode would use RCPI described in GROUP 5
+                        * instead.
+                        */
+                       v1 = le32_to_cpu(rxv[0]);
+
+                       rxd += 12;
+                       if ((u8 *)rxd - skb->data >= skb->len)
+                               return -EINVAL;
+               }
+
                status->chains = mphy->antenna_mask;
                status->chain_signal[0] = to_rssi(MT_PRXV_RCPI0, v1);
                status->chain_signal[1] = to_rssi(MT_PRXV_RCPI1, v1);
                        status->signal = max(status->signal,
                                             status->chain_signal[i]);
                }
-
-               ret = mt76_connac2_mac_fill_rx_rate(&dev->mt76, status, sband,
-                                                   rxv, &mode);
-               if (ret < 0)
-                       return ret;
-
-               if (rxd1 & MT_RXD1_NORMAL_GROUP_5) {
-                       rxd += 18;
-                       if ((u8 *)rxd - skb->data >= skb->len)
-                               return -EINVAL;
-               }
        }
 
        amsdu_info = FIELD_GET(MT_RXD4_NORMAL_PAYLOAD_FORMAT, rxd4);