From da8e79696da5f197ceeda9959bf85e5e8ea63eb8 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Wed, 15 Mar 2017 14:24:40 +0100 Subject: [PATCH] mt7603: check wtbl busy status and stop/start tx queues when clearing sta entry Signed-off-by: Felix Fietkau --- mt7603_mac.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/mt7603_mac.c b/mt7603_mac.c index 83c53869..435be936 100644 --- a/mt7603_mac.c +++ b/mt7603_mac.c @@ -107,15 +107,20 @@ void mt7603_wtbl_init(struct mt7603_dev *dev, int idx, const u8 *mac_addr) u32 addr = mt7603_wtbl1_addr(idx); int i; + mt76_poll(dev, MT_WTBL_UPDATE, MT_WTBL_UPDATE_BUSY, 0, 5000); + mt76_set(dev, addr + 0 * 4, FIELD_PREP(MT_WTBL1_W0_ADDR_HI, get_unaligned_le16(_mac + 4))); mt76_set(dev, addr + 1 * 4, FIELD_PREP(MT_WTBL1_W1_ADDR_LO, get_unaligned_le32(_mac))); mt76_set(dev, addr + 2 * 4, MT_WTBL1_W2_ADMISSION_CONTROL); + mt76_stop_tx_ac(dev, GENMASK(3, 0)); addr = mt7603_wtbl2_addr(idx); for (i = 0; i < MT_WTBL2_SIZE; i += 4) mt76_wr(dev, addr + i, 0); + mt7603_wtbl_update(dev, idx, MT_WTBL_UPDATE_WTBL2); + mt76_start_tx_ac(dev, GENMASK(3, 0)); addr = mt7603_wtbl3_addr(idx); for (i = 0; i < MT_WTBL3_SIZE; i += 4)