Skip to content

Commit a07292e

Browse files
LorenzoBianconinbd168
authored andcommitted
mt76: mt7615: fix hw queue mapping
mt7622/mt7663 chipsets rely on a fixed reverse queue map order respect to mac80211 one: - q(0): IEEE80211_AC_BK - q(1): IEEE80211_AC_BE - q(2): IEEE80211_AC_VI - q(3): IEEE80211_AC_VO Fixes: cdad487 ("mt76: mt7615: add dma and tx queue initialization for MT7622") Fixes: f40ac0f ("mt76: mt7615: introduce mt7663e support") Co-developed-by: Sean Wang <[email protected]> Signed-off-by: Sean Wang <[email protected]> Co-developed-by: Ryder Lee <[email protected]> Signed-off-by: Ryder Lee <[email protected]> Signed-off-by: Lorenzo Bianconi <[email protected]> Signed-off-by: Felix Fietkau <[email protected]>
1 parent d941f47 commit a07292e

File tree

6 files changed

+45
-28
lines changed

6 files changed

+45
-28
lines changed

drivers/net/wireless/mediatek/mt76/mt7615/dma.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@ static int
3636
mt7622_init_tx_queues_multi(struct mt7615_dev *dev)
3737
{
3838
static const u8 wmm_queue_map[] = {
39-
MT7622_TXQ_AC0,
40-
MT7622_TXQ_AC1,
41-
MT7622_TXQ_AC2,
42-
MT7622_TXQ_AC3,
39+
[IEEE80211_AC_BK] = MT7622_TXQ_AC0,
40+
[IEEE80211_AC_BE] = MT7622_TXQ_AC1,
41+
[IEEE80211_AC_VI] = MT7622_TXQ_AC2,
42+
[IEEE80211_AC_VO] = MT7622_TXQ_AC3,
4343
};
4444
int ret;
4545
int i;

drivers/net/wireless/mediatek/mt76/mt7615/mac.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -528,7 +528,7 @@ int mt7615_mac_write_txwi(struct mt7615_dev *dev, __le32 *txwi,
528528

529529
if (ieee80211_is_data(fc) || ieee80211_is_bufferable_mmpdu(fc)) {
530530
q_idx = wmm_idx * MT7615_MAX_WMM_SETS +
531-
skb_get_queue_mapping(skb);
531+
mt7615_lmac_mapping(dev, skb_get_queue_mapping(skb));
532532
p_fmt = is_usb ? MT_TX_TYPE_SF : MT_TX_TYPE_CT;
533533
} else if (beacon) {
534534
if (ext_phy)

drivers/net/wireless/mediatek/mt76/mt7615/mac.h

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -124,21 +124,6 @@ enum tx_pkt_type {
124124
MT_TX_TYPE_FW,
125125
};
126126

127-
enum tx_pkt_queue_idx {
128-
MT_LMAC_AC00,
129-
MT_LMAC_AC01,
130-
MT_LMAC_AC02,
131-
MT_LMAC_AC03,
132-
MT_LMAC_ALTX0 = 0x10,
133-
MT_LMAC_BMC0,
134-
MT_LMAC_BCN0,
135-
MT_LMAC_PSMP0,
136-
MT_LMAC_ALTX1,
137-
MT_LMAC_BMC1,
138-
MT_LMAC_BCN1,
139-
MT_LMAC_PSMP1,
140-
};
141-
142127
enum tx_port_idx {
143128
MT_TX_PORT_IDX_LMAC,
144129
MT_TX_PORT_IDX_MCU

drivers/net/wireless/mediatek/mt76/mt7615/main.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,7 @@ mt7615_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif, u16 queue,
397397
struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;
398398
struct mt7615_dev *dev = mt7615_hw_dev(hw);
399399

400+
queue = mt7615_lmac_mapping(dev, queue);
400401
queue += mvif->wmm_idx * MT7615_MAX_WMM_SETS;
401402

402403
return mt7615_mcu_set_wmm(dev, queue, params);

drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,21 @@ struct mt7615_dev {
282282
struct list_head wd_head;
283283
};
284284

285+
enum tx_pkt_queue_idx {
286+
MT_LMAC_AC00,
287+
MT_LMAC_AC01,
288+
MT_LMAC_AC02,
289+
MT_LMAC_AC03,
290+
MT_LMAC_ALTX0 = 0x10,
291+
MT_LMAC_BMC0,
292+
MT_LMAC_BCN0,
293+
MT_LMAC_PSMP0,
294+
MT_LMAC_ALTX1,
295+
MT_LMAC_BMC1,
296+
MT_LMAC_BCN1,
297+
MT_LMAC_PSMP1,
298+
};
299+
285300
enum {
286301
HW_BSSID_0 = 0x0,
287302
HW_BSSID_1,
@@ -447,6 +462,21 @@ static inline u16 mt7615_wtbl_size(struct mt7615_dev *dev)
447462
return MT7615_WTBL_SIZE;
448463
}
449464

465+
static inline u8 mt7615_lmac_mapping(struct mt7615_dev *dev, u8 ac)
466+
{
467+
static const u8 lmac_queue_map[] = {
468+
[IEEE80211_AC_BK] = MT_LMAC_AC00,
469+
[IEEE80211_AC_BE] = MT_LMAC_AC01,
470+
[IEEE80211_AC_VI] = MT_LMAC_AC02,
471+
[IEEE80211_AC_VO] = MT_LMAC_AC03,
472+
};
473+
474+
if (WARN_ON_ONCE(ac >= ARRAY_SIZE(lmac_queue_map)))
475+
return MT_LMAC_AC01; /* BE */
476+
477+
return lmac_queue_map[ac];
478+
}
479+
450480
void mt7615_dma_reset(struct mt7615_dev *dev);
451481
void mt7615_scan_work(struct work_struct *work);
452482
void mt7615_roc_work(struct work_struct *work);

drivers/net/wireless/mediatek/mt76/usb.c

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1010,17 +1010,18 @@ static void mt76u_tx_kick(struct mt76_dev *dev, struct mt76_queue *q)
10101010
static u8 mt76u_ac_to_hwq(struct mt76_dev *dev, u8 ac)
10111011
{
10121012
if (mt76_chip(dev) == 0x7663) {
1013-
static const u8 wmm_queue_map[] = {
1014-
[IEEE80211_AC_VO] = 0,
1015-
[IEEE80211_AC_VI] = 1,
1016-
[IEEE80211_AC_BE] = 2,
1017-
[IEEE80211_AC_BK] = 4,
1013+
static const u8 lmac_queue_map[] = {
1014+
/* ac to lmac mapping */
1015+
[IEEE80211_AC_BK] = 0,
1016+
[IEEE80211_AC_BE] = 1,
1017+
[IEEE80211_AC_VI] = 2,
1018+
[IEEE80211_AC_VO] = 4,
10181019
};
10191020

1020-
if (WARN_ON(ac >= ARRAY_SIZE(wmm_queue_map)))
1021-
return 2; /* BE */
1021+
if (WARN_ON(ac >= ARRAY_SIZE(lmac_queue_map)))
1022+
return 1; /* BE */
10221023

1023-
return wmm_queue_map[ac];
1024+
return lmac_queue_map[ac];
10241025
}
10251026

10261027
return mt76_ac_to_hwq(ac);

0 commit comments

Comments
 (0)