static void
 mt7915_tm_set_rx_frames(struct mt7915_phy *phy, bool en)
 {
-       if (en)
+       mt7915_tm_set_trx(phy, TM_MAC_RX_RXV, false);
+
+       if (en) {
+               struct mt7915_dev *dev = phy->dev;
+
                mt7915_tm_update_channel(phy);
 
-       mt7915_tm_set_trx(phy, TM_MAC_RX_RXV, en);
+               /* read-clear */
+               mt76_rr(dev, MT_MIB_SDR3(phy != &dev->phy));
+               mt7915_tm_set_trx(phy, TM_MAC_RX_RXV, en);
+       }
 }
 
 static int
 mt7915_tm_dump_stats(struct mt76_phy *mphy, struct sk_buff *msg)
 {
        struct mt7915_phy *phy = mphy->priv;
+       struct mt7915_dev *dev = phy->dev;
+       bool ext_phy = phy != &dev->phy;
+       enum mt76_rxq_id q;
        void *rx, *rssi;
+       u16 fcs_err;
        int i;
 
        rx = nla_nest_start(msg, MT76_TM_STATS_ATTR_LAST_RX);
 
        nla_nest_end(msg, rx);
 
+       fcs_err = mt76_get_field(dev, MT_MIB_SDR3(ext_phy),
+                                MT_MIB_SDR3_FCS_ERR_MASK);
+       q = ext_phy ? MT_RXQ_EXT : MT_RXQ_MAIN;
+       mphy->test.rx_stats.packets[q] += fcs_err;
+       mphy->test.rx_stats.fcs_error[q] += fcs_err;
+
        return 0;
 }