Commit 78fc30a2 authored by Shayne Chen's avatar Shayne Chen Committed by Felix Fietkau

mt76: mt7915: move testmode data from dev to phy

Move per-chip testmode data to mt7915_phy, to properly support
reg_backup and rx status of each band in testmode.
Signed-off-by: default avatarShayne Chen <shayne.chen@mediatek.com>
Acked-by: default avatarRyder Lee <ryder.lee@mediatek.com>
Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
parent e7a6a044
...@@ -565,13 +565,20 @@ int mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb) ...@@ -565,13 +565,20 @@ int mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb)
#ifdef CONFIG_NL80211_TESTMODE #ifdef CONFIG_NL80211_TESTMODE
void mt7915_mac_fill_rx_vector(struct mt7915_dev *dev, struct sk_buff *skb) 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 *rxd = (__le32 *)skb->data;
__le32 *rxv_hdr = rxd + 2;
__le32 *rxv = rxd + 4; __le32 *rxv = rxd + 4;
u32 rcpi, ib_rssi, wb_rssi, v20, v21; u32 rcpi, ib_rssi, wb_rssi, v20, v21;
bool ext_phy;
s32 foe; s32 foe;
u8 snr; u8 snr;
int i; 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]); rcpi = le32_to_cpu(rxv[6]);
ib_rssi = le32_to_cpu(rxv[7]); ib_rssi = le32_to_cpu(rxv[7]);
wb_rssi = le32_to_cpu(rxv[8]) >> 5; wb_rssi = le32_to_cpu(rxv[8]) >> 5;
...@@ -580,9 +587,9 @@ void mt7915_mac_fill_rx_vector(struct mt7915_dev *dev, struct sk_buff *skb) ...@@ -580,9 +587,9 @@ void mt7915_mac_fill_rx_vector(struct mt7915_dev *dev, struct sk_buff *skb)
if (i == 3) if (i == 3)
wb_rssi = le32_to_cpu(rxv[9]); wb_rssi = le32_to_cpu(rxv[9]);
dev->test.last_rcpi[i] = rcpi & 0xff; phy->test.last_rcpi[i] = rcpi & 0xff;
dev->test.last_ib_rssi[i] = ib_rssi & 0xff; phy->test.last_ib_rssi[i] = ib_rssi & 0xff;
dev->test.last_wb_rssi[i] = wb_rssi & 0xff; phy->test.last_wb_rssi[i] = wb_rssi & 0xff;
} }
v20 = le32_to_cpu(rxv[20]); v20 = le32_to_cpu(rxv[20]);
...@@ -593,8 +600,8 @@ void mt7915_mac_fill_rx_vector(struct mt7915_dev *dev, struct sk_buff *skb) ...@@ -593,8 +600,8 @@ void mt7915_mac_fill_rx_vector(struct mt7915_dev *dev, struct sk_buff *skb)
snr = FIELD_GET(MT_CRXV_SNR, v20) - 16; snr = FIELD_GET(MT_CRXV_SNR, v20) - 16;
dev->test.last_freq_offset = foe; phy->test.last_freq_offset = foe;
dev->test.last_snr = snr; phy->test.last_snr = snr;
dev_kfree_skb(skb); dev_kfree_skb(skb);
} }
...@@ -606,7 +613,6 @@ mt7915_mac_write_txwi_tm(struct mt7915_phy *phy, __le32 *txwi, ...@@ -606,7 +613,6 @@ mt7915_mac_write_txwi_tm(struct mt7915_phy *phy, __le32 *txwi,
{ {
#ifdef CONFIG_NL80211_TESTMODE #ifdef CONFIG_NL80211_TESTMODE
struct mt76_testmode_data *td = &phy->mt76->test; struct mt76_testmode_data *td = &phy->mt76->test;
struct mt7915_dev *dev = phy->dev;
u8 rate_idx = td->tx_rate_idx; u8 rate_idx = td->tx_rate_idx;
u8 nss = td->tx_rate_nss; u8 nss = td->tx_rate_nss;
u8 bw, mode; u8 bw, mode;
...@@ -699,7 +705,7 @@ mt7915_mac_write_txwi_tm(struct mt7915_phy *phy, __le32 *txwi, ...@@ -699,7 +705,7 @@ mt7915_mac_write_txwi_tm(struct mt7915_phy *phy, __le32 *txwi,
txwi[6] |= cpu_to_le32(val); txwi[6] |= cpu_to_le32(val);
txwi[7] |= cpu_to_le32(FIELD_PREP(MT_TXD7_SPE_IDX, txwi[7] |= cpu_to_le32(FIELD_PREP(MT_TXD7_SPE_IDX,
dev->test.spe_idx)); phy->test.spe_idx));
#endif #endif
} }
......
...@@ -95,6 +95,8 @@ enum rx_pkt_type { ...@@ -95,6 +95,8 @@ enum rx_pkt_type {
#define MT_RXD3_NORMAL_PF_MODE BIT(29) #define MT_RXD3_NORMAL_PF_MODE BIT(29)
#define MT_RXD3_NORMAL_PF_STS GENMASK(31, 30) #define MT_RXD3_NORMAL_PF_STS GENMASK(31, 30)
#define MT_RXV_HDR_BAND_IDX BIT(24)
/* P-RXV */ /* P-RXV */
#define MT_PRXV_TX_RATE GENMASK(6, 0) #define MT_PRXV_TX_RATE GENMASK(6, 0)
#define MT_PRXV_TX_DCM BIT(4) #define MT_PRXV_TX_DCM BIT(4)
......
...@@ -143,6 +143,20 @@ struct mt7915_phy { ...@@ -143,6 +143,20 @@ struct mt7915_phy {
struct delayed_work mac_work; struct delayed_work mac_work;
u8 mac_work_count; u8 mac_work_count;
u8 sta_work_count; u8 sta_work_count;
#ifdef CONFIG_NL80211_TESTMODE
struct {
u32 *reg_backup;
s32 last_freq_offset;
u8 last_rcpi[4];
s8 last_ib_rssi[4];
s8 last_wb_rssi[4];
u8 last_snr;
u8 spe_idx;
} test;
#endif
}; };
struct mt7915_dev { struct mt7915_dev {
...@@ -177,20 +191,6 @@ struct mt7915_dev { ...@@ -177,20 +191,6 @@ struct mt7915_dev {
bool dbdc_support; bool dbdc_support;
bool flash_mode; bool flash_mode;
bool fw_debug; bool fw_debug;
#ifdef CONFIG_NL80211_TESTMODE
struct {
u32 *reg_backup;
s32 last_freq_offset;
u8 last_rcpi[4];
s8 last_ib_rssi[4];
s8 last_wb_rssi[4];
u8 last_snr;
u8 spe_idx;
} test;
#endif
}; };
enum { enum {
......
...@@ -138,10 +138,10 @@ mt7915_tm_reg_backup_restore(struct mt7915_phy *phy) ...@@ -138,10 +138,10 @@ mt7915_tm_reg_backup_restore(struct mt7915_phy *phy)
int n_regs = ARRAY_SIZE(reg_backup_list); int n_regs = ARRAY_SIZE(reg_backup_list);
struct mt7915_dev *dev = phy->dev; struct mt7915_dev *dev = phy->dev;
bool ext_phy = phy != &dev->phy; bool ext_phy = phy != &dev->phy;
u32 *b = dev->test.reg_backup; u32 *b = phy->test.reg_backup;
int i; 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++) for (i = 0; i < n_regs; i++)
mt76_wr(dev, reg_backup_list[i].band[ext_phy], b[i]); mt76_wr(dev, reg_backup_list[i].band[ext_phy], b[i]);
return; return;
...@@ -154,7 +154,7 @@ mt7915_tm_reg_backup_restore(struct mt7915_phy *phy) ...@@ -154,7 +154,7 @@ mt7915_tm_reg_backup_restore(struct mt7915_phy *phy)
if (!b) if (!b)
return; return;
dev->test.reg_backup = b; phy->test.reg_backup = b;
for (i = 0; i < n_regs; i++) for (i = 0; i < n_regs; i++)
b[i] = mt76_rr(dev, reg_backup_list[i].band[ext_phy]); b[i] = mt76_rr(dev, reg_backup_list[i].band[ext_phy]);
...@@ -222,7 +222,7 @@ mt7915_tm_set_tx_frames(struct mt7915_phy *phy, bool en) ...@@ -222,7 +222,7 @@ mt7915_tm_set_tx_frames(struct mt7915_phy *phy, bool en)
if (phy != &dev->phy) if (phy != &dev->phy)
tx_ant >>= 2; 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_set_trx(phy, TM_MAC_TX, en);
...@@ -333,7 +333,6 @@ static int ...@@ -333,7 +333,6 @@ static int
mt7915_tm_dump_stats(struct mt76_phy *mphy, struct sk_buff *msg) mt7915_tm_dump_stats(struct mt76_phy *mphy, struct sk_buff *msg)
{ {
struct mt7915_phy *phy = mphy->priv; struct mt7915_phy *phy = mphy->priv;
struct mt7915_dev *dev = phy->dev;
void *rx, *rssi; void *rx, *rssi;
int i; int i;
...@@ -341,15 +340,15 @@ mt7915_tm_dump_stats(struct mt76_phy *mphy, struct sk_buff *msg) ...@@ -341,15 +340,15 @@ mt7915_tm_dump_stats(struct mt76_phy *mphy, struct sk_buff *msg)
if (!rx) if (!rx)
return -ENOMEM; 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; return -ENOMEM;
rssi = nla_nest_start(msg, MT76_TM_RX_ATTR_RCPI); rssi = nla_nest_start(msg, MT76_TM_RX_ATTR_RCPI);
if (!rssi) if (!rssi)
return -ENOMEM; return -ENOMEM;
for (i = 0; i < ARRAY_SIZE(dev->test.last_rcpi); i++) for (i = 0; i < ARRAY_SIZE(phy->test.last_rcpi); i++)
if (nla_put_u8(msg, i, dev->test.last_rcpi[i])) if (nla_put_u8(msg, i, phy->test.last_rcpi[i]))
return -ENOMEM; return -ENOMEM;
nla_nest_end(msg, rssi); nla_nest_end(msg, rssi);
...@@ -358,8 +357,8 @@ mt7915_tm_dump_stats(struct mt76_phy *mphy, struct sk_buff *msg) ...@@ -358,8 +357,8 @@ mt7915_tm_dump_stats(struct mt76_phy *mphy, struct sk_buff *msg)
if (!rssi) if (!rssi)
return -ENOMEM; return -ENOMEM;
for (i = 0; i < ARRAY_SIZE(dev->test.last_ib_rssi); i++) for (i = 0; i < ARRAY_SIZE(phy->test.last_ib_rssi); i++)
if (nla_put_s8(msg, i, dev->test.last_ib_rssi[i])) if (nla_put_s8(msg, i, phy->test.last_ib_rssi[i]))
return -ENOMEM; return -ENOMEM;
nla_nest_end(msg, rssi); nla_nest_end(msg, rssi);
...@@ -368,13 +367,13 @@ mt7915_tm_dump_stats(struct mt76_phy *mphy, struct sk_buff *msg) ...@@ -368,13 +367,13 @@ mt7915_tm_dump_stats(struct mt76_phy *mphy, struct sk_buff *msg)
if (!rssi) if (!rssi)
return -ENOMEM; return -ENOMEM;
for (i = 0; i < ARRAY_SIZE(dev->test.last_wb_rssi); i++) for (i = 0; i < ARRAY_SIZE(phy->test.last_wb_rssi); i++)
if (nla_put_s8(msg, i, dev->test.last_wb_rssi[i])) if (nla_put_s8(msg, i, phy->test.last_wb_rssi[i]))
return -ENOMEM; return -ENOMEM;
nla_nest_end(msg, rssi); 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; return -ENOMEM;
nla_nest_end(msg, rx); nla_nest_end(msg, rx);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment