Disable BEACON timer during init and configure interrupt registers
only for mmio devices.

Signed-off-by: Stanislaw Gruszka <[email protected]>
---
v3: do not move code to individual drivers, just mask it in common code

 .../net/wireless/mediatek/mt76/mt76x02_util.c  | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt76x02_util.c 
b/drivers/net/wireless/mediatek/mt76/mt76x02_util.c
index 1ecd4ef83c82..4bc0520da1c6 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x02_util.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x02_util.c
@@ -670,13 +670,19 @@ void mt76x02_init_beacon_config(struct mt76x02_dev *dev)
 {
        int i;
 
-       /* Fire a pre-TBTT interrupt 8 ms before TBTT */
-       mt76_rmw_field(dev, MT_INT_TIMER_CFG, MT_INT_TIMER_CFG_PRE_TBTT,
-                      8 << 4);
-       mt76_rmw_field(dev, MT_INT_TIMER_CFG, MT_INT_TIMER_CFG_GP_TIMER,
-                      MT_DFS_GP_INTERVAL);
-       mt76_wr(dev, MT_INT_TIMER_EN, 0);
+       if (mt76_is_mmio(dev)) {
+               /* Fire a pre-TBTT interrupt 8 ms before TBTT */
+               mt76_rmw_field(dev, MT_INT_TIMER_CFG, MT_INT_TIMER_CFG_PRE_TBTT,
+                              8 << 4);
+               mt76_rmw_field(dev, MT_INT_TIMER_CFG, MT_INT_TIMER_CFG_GP_TIMER,
+                              MT_DFS_GP_INTERVAL);
+               mt76_wr(dev, MT_INT_TIMER_EN, 0);
+       }
 
+       mt76_clear(dev, MT_BEACON_TIME_CFG, (MT_BEACON_TIME_CFG_TIMER_EN |
+                                            MT_BEACON_TIME_CFG_SYNC_MODE |
+                                            MT_BEACON_TIME_CFG_TBTT_EN |
+                                            MT_BEACON_TIME_CFG_BEACON_TX));
        mt76_wr(dev, MT_BCN_BYPASS_MASK, 0xffff);
 
        for (i = 0; i < 8; i++)
-- 
2.19.2

Reply via email to