Skip to content

Commit 4f831d1

Browse files
LorenzoBianconinbd168
authored andcommitted
wifi: mt76: mt7915: enable WED RX support
Enable RX Wireless Ethernet Dispatch available on MT7986 Soc in oreder to offlad traffic received by WLAN NIC and forwarded to LAN/WAN one. Tested-by: Daniel Golle <[email protected]> Co-developed-by: Sujuan Chen <[email protected]> Signed-off-by: Sujuan Chen <[email protected]> Signed-off-by: Lorenzo Bianconi <[email protected]> Signed-off-by: Felix Fietkau <[email protected]>
1 parent d1369e5 commit 4f831d1

File tree

6 files changed

+238
-93
lines changed

6 files changed

+238
-93
lines changed

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1297,7 +1297,10 @@ void mt76_rx_poll_complete(struct mt76_dev *dev, enum mt76_rxq_id q,
12971297

12981298
while ((skb = __skb_dequeue(&dev->rx_skb[q])) != NULL) {
12991299
mt76_check_sta(dev, skb);
1300-
mt76_rx_aggr_reorder(skb, &frames);
1300+
if (mtk_wed_device_active(&dev->mmio.wed))
1301+
__skb_queue_tail(&frames, skb);
1302+
else
1303+
mt76_rx_aggr_reorder(skb, &frames);
13011304
}
13021305

13031306
mt76_rx_complete(dev, &frames, napi);

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

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,8 @@ static int mt7915_dma_enable(struct mt7915_dev *dev)
365365
wed_irq_mask |= MT_INT_TX_DONE_BAND0 | MT_INT_TX_DONE_BAND1;
366366
if (!is_mt7986(&dev->mt76))
367367
mt76_wr(dev, MT_INT_WED_MASK_CSR, wed_irq_mask);
368-
mt76_wr(dev, MT_INT_MASK_CSR, wed_irq_mask);
368+
else
369+
mt76_wr(dev, MT_INT_MASK_CSR, wed_irq_mask);
369370
mtk_wed_device_start(&dev->mt76.mmio.wed, wed_irq_mask);
370371
}
371372

@@ -401,6 +402,9 @@ int mt7915_dma_init(struct mt7915_dev *dev, struct mt7915_phy *phy2)
401402
FIELD_PREP(MT_WFDMA_WED_RING_CONTROL_TX1, 19) |
402403
FIELD_PREP(MT_WFDMA_WED_RING_CONTROL_RX1,
403404
wed_control_rx1));
405+
if (is_mt7915(mdev))
406+
mt76_rmw(dev, MT_WFDMA0_EXT0_CFG, MT_WFDMA0_EXT0_RXWB_KEEP,
407+
MT_WFDMA0_EXT0_RXWB_KEEP);
404408
}
405409
} else {
406410
mt76_clear(dev, MT_WFDMA_HOST_CONFIG, MT_WFDMA_HOST_CONFIG_WED);
@@ -473,6 +477,13 @@ int mt7915_dma_init(struct mt7915_dev *dev, struct mt7915_phy *phy2)
473477

474478
/* rx data queue for band0 */
475479
if (!dev->phy.band_idx) {
480+
if (mtk_wed_device_active(&mdev->mmio.wed) &&
481+
mtk_wed_get_rx_capa(&mdev->mmio.wed)) {
482+
dev->mt76.q_rx[MT_RXQ_MAIN].flags =
483+
MT_WED_Q_RX(MT7915_RXQ_BAND0);
484+
dev->mt76.rx_token_size += MT7915_RX_RING_SIZE;
485+
}
486+
476487
ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_MAIN],
477488
MT_RXQ_ID(MT_RXQ_MAIN),
478489
MT7915_RX_RING_SIZE,
@@ -503,6 +514,13 @@ int mt7915_dma_init(struct mt7915_dev *dev, struct mt7915_phy *phy2)
503514
}
504515

505516
if (dev->dbdc_support || dev->phy.band_idx) {
517+
if (mtk_wed_device_active(&mdev->mmio.wed) &&
518+
mtk_wed_get_rx_capa(&mdev->mmio.wed)) {
519+
dev->mt76.q_rx[MT_RXQ_BAND1].flags =
520+
MT_WED_Q_RX(MT7915_RXQ_BAND1);
521+
dev->mt76.rx_token_size += MT7915_RX_RING_SIZE;
522+
}
523+
506524
/* rx data queue for band1 */
507525
ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_BAND1],
508526
MT_RXQ_ID(MT_RXQ_BAND1),

drivers/net/wireless/mediatek/mt76/mt7915/mcu.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1677,6 +1677,10 @@ int mt7915_mcu_add_sta(struct mt7915_dev *dev, struct ieee80211_vif *vif,
16771677
return ret;
16781678
}
16791679
out:
1680+
ret = mt76_connac_mcu_sta_wed_update(&dev->mt76, skb);
1681+
if (ret)
1682+
return ret;
1683+
16801684
return mt76_mcu_skb_send_msg(&dev->mt76, skb,
16811685
MCU_EXT_CMD(STA_REC_UPDATE), true);
16821686
}

0 commit comments

Comments
 (0)