* [PATCH] mt76: mt7915: improve error recovery reliability
@ 2021-06-02 6:02 Felix Fietkau
2021-06-02 9:29 ` kernel test robot
0 siblings, 1 reply; 2+ messages in thread
From: Felix Fietkau @ 2021-06-02 6:02 UTC (permalink / raw)
To: linux-wireless
- Remove no-op code for queue lock/unlock, which is no longer needed
- Set a missing DMA flag
- Wait for full completion of error recovery before restarting tx
- Schedule IRQ tasklet to ensure that IRQ mask gets written
Signed-off-by: Felix Fietkau <nbd@nbd.name>
---
.../net/wireless/mediatek/mt76/mt7915/mac.c | 29 ++++++++++---------
1 file changed, 15 insertions(+), 14 deletions(-)
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c
index 642a11e72bef..ecd00dfa68ff 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/mac.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mac.c
@@ -1608,14 +1608,18 @@ mt7915_dma_reset(struct mt7915_dev *dev)
mt76_set(dev, MT_WFDMA0_GLO_CFG,
MT_WFDMA0_GLO_CFG_TX_DMA_EN | MT_WFDMA0_GLO_CFG_RX_DMA_EN);
mt76_set(dev, MT_WFDMA1_GLO_CFG,
- MT_WFDMA1_GLO_CFG_TX_DMA_EN | MT_WFDMA1_GLO_CFG_RX_DMA_EN);
+ MT_WFDMA1_GLO_CFG_TX_DMA_EN | MT_WFDMA1_GLO_CFG_RX_DMA_EN |
+ MT_WFDMA1_GLO_CFG_OMIT_TX_INFO |
+ MT_WFDMA1_GLO_CFG_OMIT_RX_INFO);
if (dev->hif2) {
mt76_set(dev, MT_WFDMA0_GLO_CFG + hif1_ofs,
(MT_WFDMA0_GLO_CFG_TX_DMA_EN |
MT_WFDMA0_GLO_CFG_RX_DMA_EN));
mt76_set(dev, MT_WFDMA1_GLO_CFG + hif1_ofs,
(MT_WFDMA1_GLO_CFG_TX_DMA_EN |
- MT_WFDMA1_GLO_CFG_RX_DMA_EN));
+ MT_WFDMA1_GLO_CFG_RX_DMA_EN |
+ MT_WFDMA1_GLO_CFG_OMIT_TX_INFO |
+ MT_WFDMA1_GLO_CFG_OMIT_RX_INFO));
}
}
@@ -1659,11 +1663,6 @@ void mt7915_mac_reset_work(struct work_struct *work)
set_bit(MT76_RESET, &phy2->mt76->state);
cancel_delayed_work_sync(&phy2->mt76->mac_work);
}
- /* lock/unlock all queues to ensure that no tx is pending */
- mt76_txq_schedule_all(&dev->mphy);
- if (ext_phy)
- mt76_txq_schedule_all(ext_phy);
-
mt76_worker_disable(&dev->mt76.tx_worker);
napi_disable(&dev->mt76.napi[0]);
napi_disable(&dev->mt76.napi[1]);
@@ -1689,10 +1688,6 @@ void mt7915_mac_reset_work(struct work_struct *work)
if (phy2)
clear_bit(MT76_RESET, &phy2->mt76->state);
- mt76_worker_enable(&dev->mt76.tx_worker);
- napi_enable(&dev->mt76.tx_napi);
- napi_schedule(&dev->mt76.tx_napi);
-
napi_enable(&dev->mt76.napi[0]);
napi_schedule(&dev->mt76.napi[0]);
@@ -1701,14 +1696,20 @@ void mt7915_mac_reset_work(struct work_struct *work)
napi_enable(&dev->mt76.napi[2]);
napi_schedule(&dev->mt76.napi[2]);
+ tasklet_schedule(&dev->irq_tasklet);
+
+ mt76_wr(dev, MT_MCU_INT_EVENT, MT_MCU_INT_EVENT_RESET_DONE);
+ mt7915_wait_reset_state(dev, MT_MCU_CMD_NORMAL_STATE);
+
+ mt76_worker_enable(&dev->mt76.tx_worker);
+
+ napi_enable(&dev->mt76.tx_napi);
+ napi_schedule(&dev->mt76.tx_napi);
ieee80211_wake_queues(mt76_hw(dev));
if (ext_phy)
ieee80211_wake_queues(ext_phy->hw);
- mt76_wr(dev, MT_MCU_INT_EVENT, MT_MCU_INT_EVENT_RESET_DONE);
- mt7915_wait_reset_state(dev, MT_MCU_CMD_NORMAL_STATE);
-
mutex_unlock(&dev->mt76.mutex);
mt7915_update_beacons(dev);
--
2.30.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] mt76: mt7915: improve error recovery reliability
2021-06-02 6:02 [PATCH] mt76: mt7915: improve error recovery reliability Felix Fietkau
@ 2021-06-02 9:29 ` kernel test robot
0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2021-06-02 9:29 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 4966 bytes --]
Hi Felix,
I love your patch! Yet something to improve:
[auto build test ERROR on wireless-drivers-next/master]
[also build test ERROR on wireless-drivers/master v5.13-rc4 next-20210601]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Felix-Fietkau/mt76-mt7915-improve-error-recovery-reliability/20210602-140346
base: https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-next.git master
config: riscv-allyesconfig (attached as .config)
compiler: riscv64-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/2c848945c4f5daa30ffb2030d9709b06d323e602
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Felix-Fietkau/mt76-mt7915-improve-error-recovery-reliability/20210602-140346
git checkout 2c848945c4f5daa30ffb2030d9709b06d323e602
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=riscv
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
drivers/net/wireless/mediatek/mt76/mt7915/mac.c: In function 'mt7915_mac_reset_work':
>> drivers/net/wireless/mediatek/mt76/mt7915/mac.c:1628:23: error: 'struct mt7915_dev' has no member named 'irq_tasklet'
1628 | tasklet_schedule(&dev->irq_tasklet);
| ^~
vim +1628 drivers/net/wireless/mediatek/mt76/mt7915/mac.c
1568
1569 /* system error recovery */
1570 void mt7915_mac_reset_work(struct work_struct *work)
1571 {
1572 struct mt7915_phy *phy2;
1573 struct mt76_phy *ext_phy;
1574 struct mt7915_dev *dev;
1575
1576 dev = container_of(work, struct mt7915_dev, reset_work);
1577 ext_phy = dev->mt76.phy2;
1578 phy2 = ext_phy ? ext_phy->priv : NULL;
1579
1580 if (!(READ_ONCE(dev->reset_state) & MT_MCU_CMD_STOP_DMA))
1581 return;
1582
1583 ieee80211_stop_queues(mt76_hw(dev));
1584 if (ext_phy)
1585 ieee80211_stop_queues(ext_phy->hw);
1586
1587 set_bit(MT76_RESET, &dev->mphy.state);
1588 set_bit(MT76_MCU_RESET, &dev->mphy.state);
1589 wake_up(&dev->mt76.mcu.wait);
1590 cancel_delayed_work_sync(&dev->mphy.mac_work);
1591 if (phy2) {
1592 set_bit(MT76_RESET, &phy2->mt76->state);
1593 cancel_delayed_work_sync(&phy2->mt76->mac_work);
1594 }
1595 mt76_worker_disable(&dev->mt76.tx_worker);
1596 napi_disable(&dev->mt76.napi[0]);
1597 napi_disable(&dev->mt76.napi[1]);
1598 napi_disable(&dev->mt76.napi[2]);
1599 napi_disable(&dev->mt76.tx_napi);
1600
1601 mutex_lock(&dev->mt76.mutex);
1602
1603 mt76_wr(dev, MT_MCU_INT_EVENT, MT_MCU_INT_EVENT_DMA_STOPPED);
1604
1605 if (mt7915_wait_reset_state(dev, MT_MCU_CMD_RESET_DONE)) {
1606 mt7915_dma_reset(dev);
1607
1608 mt7915_tx_token_put(dev);
1609 idr_init(&dev->mt76.token);
1610
1611 mt76_wr(dev, MT_MCU_INT_EVENT, MT_MCU_INT_EVENT_DMA_INIT);
1612 mt7915_wait_reset_state(dev, MT_MCU_CMD_RECOVERY_DONE);
1613 }
1614
1615 clear_bit(MT76_MCU_RESET, &dev->mphy.state);
1616 clear_bit(MT76_RESET, &dev->mphy.state);
1617 if (phy2)
1618 clear_bit(MT76_RESET, &phy2->mt76->state);
1619
1620 napi_enable(&dev->mt76.napi[0]);
1621 napi_schedule(&dev->mt76.napi[0]);
1622
1623 napi_enable(&dev->mt76.napi[1]);
1624 napi_schedule(&dev->mt76.napi[1]);
1625
1626 napi_enable(&dev->mt76.napi[2]);
1627 napi_schedule(&dev->mt76.napi[2]);
> 1628 tasklet_schedule(&dev->irq_tasklet);
1629
1630 mt76_wr(dev, MT_MCU_INT_EVENT, MT_MCU_INT_EVENT_RESET_DONE);
1631 mt7915_wait_reset_state(dev, MT_MCU_CMD_NORMAL_STATE);
1632
1633 mt76_worker_enable(&dev->mt76.tx_worker);
1634
1635 napi_enable(&dev->mt76.tx_napi);
1636 napi_schedule(&dev->mt76.tx_napi);
1637
1638 ieee80211_wake_queues(mt76_hw(dev));
1639 if (ext_phy)
1640 ieee80211_wake_queues(ext_phy->hw);
1641
1642 mutex_unlock(&dev->mt76.mutex);
1643
1644 mt7915_update_beacons(dev);
1645
1646 ieee80211_queue_delayed_work(mt76_hw(dev), &dev->mphy.mac_work,
1647 MT7915_WATCHDOG_TIME);
1648 if (phy2)
1649 ieee80211_queue_delayed_work(ext_phy->hw,
1650 &phy2->mt76->mac_work,
1651 MT7915_WATCHDOG_TIME);
1652 }
1653
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 69794 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2021-06-02 9:29 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-06-02 6:02 [PATCH] mt76: mt7915: improve error recovery reliability Felix Fietkau
2021-06-02 9:29 ` kernel test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.