#ifdef CONFIG_NL80211_TESTMODE
 void mt7915_mac_fill_rx_vector(struct mt7915_dev *dev, struct sk_buff *skb)
 {
+       struct mt7915_phy *phy = &dev->phy;
        __le32 *rxd = (__le32 *)skb->data;
+       __le32 *rxv_hdr = rxd + 2;
        __le32 *rxv = rxd + 4;
        u32 rcpi, ib_rssi, wb_rssi, v20, v21;
+       bool ext_phy;
        s32 foe;
        u8 snr;
        int i;
 
+       ext_phy = FIELD_GET(MT_RXV_HDR_BAND_IDX, le32_to_cpu(rxv_hdr[1]));
+       if (ext_phy)
+               phy = mt7915_ext_phy(dev);
+
        rcpi = le32_to_cpu(rxv[6]);
        ib_rssi = le32_to_cpu(rxv[7]);
        wb_rssi = le32_to_cpu(rxv[8]) >> 5;
                if (i == 3)
                        wb_rssi = le32_to_cpu(rxv[9]);
 
-               dev->test.last_rcpi[i] = rcpi & 0xff;
-               dev->test.last_ib_rssi[i] = ib_rssi & 0xff;
-               dev->test.last_wb_rssi[i] = wb_rssi & 0xff;
+               phy->test.last_rcpi[i] = rcpi & 0xff;
+               phy->test.last_ib_rssi[i] = ib_rssi & 0xff;
+               phy->test.last_wb_rssi[i] = wb_rssi & 0xff;
        }
 
        v20 = le32_to_cpu(rxv[20]);
 
        snr = FIELD_GET(MT_CRXV_SNR, v20) - 16;
 
-       dev->test.last_freq_offset = foe;
-       dev->test.last_snr = snr;
+       phy->test.last_freq_offset = foe;
+       phy->test.last_snr = snr;
 
        dev_kfree_skb(skb);
 }
 {
 #ifdef CONFIG_NL80211_TESTMODE
        struct mt76_testmode_data *td = &phy->mt76->test;
-       struct mt7915_dev *dev = phy->dev;
        u8 rate_idx = td->tx_rate_idx;
        u8 nss = td->tx_rate_nss;
        u8 bw, mode;
 
        txwi[6] |= cpu_to_le32(val);
        txwi[7] |= cpu_to_le32(FIELD_PREP(MT_TXD7_SPE_IDX,
-                                         dev->test.spe_idx));
+                                         phy->test.spe_idx));
 #endif
 }
 
 
        int n_regs = ARRAY_SIZE(reg_backup_list);
        struct mt7915_dev *dev = phy->dev;
        bool ext_phy = phy != &dev->phy;
-       u32 *b = dev->test.reg_backup;
+       u32 *b = phy->test.reg_backup;
        int i;
 
-       if (dev->mphy.test.state == MT76_TM_STATE_OFF) {
+       if (phy->mt76->test.state == MT76_TM_STATE_OFF) {
                for (i = 0; i < n_regs; i++)
                        mt76_wr(dev, reg_backup_list[i].band[ext_phy], b[i]);
                return;
        if (!b)
                return;
 
-       dev->test.reg_backup = b;
+       phy->test.reg_backup = b;
        for (i = 0; i < n_regs; i++)
                b[i] = mt76_rr(dev, reg_backup_list[i].band[ext_phy]);
 
 
                if (phy != &dev->phy)
                        tx_ant >>= 2;
-               dev->test.spe_idx = spe_idx_map[tx_ant];
+               phy->test.spe_idx = spe_idx_map[tx_ant];
        }
 
        mt7915_tm_set_trx(phy, TM_MAC_TX, en);
 mt7915_tm_dump_stats(struct mt76_phy *mphy, struct sk_buff *msg)
 {
        struct mt7915_phy *phy = mphy->priv;
-       struct mt7915_dev *dev = phy->dev;
        void *rx, *rssi;
        int i;
 
        if (!rx)
                return -ENOMEM;
 
-       if (nla_put_s32(msg, MT76_TM_RX_ATTR_FREQ_OFFSET, dev->test.last_freq_offset))
+       if (nla_put_s32(msg, MT76_TM_RX_ATTR_FREQ_OFFSET, phy->test.last_freq_offset))
                return -ENOMEM;
 
        rssi = nla_nest_start(msg, MT76_TM_RX_ATTR_RCPI);
        if (!rssi)
                return -ENOMEM;
 
-       for (i = 0; i < ARRAY_SIZE(dev->test.last_rcpi); i++)
-               if (nla_put_u8(msg, i, dev->test.last_rcpi[i]))
+       for (i = 0; i < ARRAY_SIZE(phy->test.last_rcpi); i++)
+               if (nla_put_u8(msg, i, phy->test.last_rcpi[i]))
                        return -ENOMEM;
 
        nla_nest_end(msg, rssi);
        if (!rssi)
                return -ENOMEM;
 
-       for (i = 0; i < ARRAY_SIZE(dev->test.last_ib_rssi); i++)
-               if (nla_put_s8(msg, i, dev->test.last_ib_rssi[i]))
+       for (i = 0; i < ARRAY_SIZE(phy->test.last_ib_rssi); i++)
+               if (nla_put_s8(msg, i, phy->test.last_ib_rssi[i]))
                        return -ENOMEM;
 
        nla_nest_end(msg, rssi);
        if (!rssi)
                return -ENOMEM;
 
-       for (i = 0; i < ARRAY_SIZE(dev->test.last_wb_rssi); i++)
-               if (nla_put_s8(msg, i, dev->test.last_wb_rssi[i]))
+       for (i = 0; i < ARRAY_SIZE(phy->test.last_wb_rssi); i++)
+               if (nla_put_s8(msg, i, phy->test.last_wb_rssi[i]))
                        return -ENOMEM;
 
        nla_nest_end(msg, rssi);
 
-       if (nla_put_u8(msg, MT76_TM_RX_ATTR_SNR, dev->test.last_snr))
+       if (nla_put_u8(msg, MT76_TM_RX_ATTR_SNR, phy->test.last_snr))
                return -ENOMEM;
 
        nla_nest_end(msg, rx);