Commit b3f09304 authored by Felix Fietkau's avatar Felix Fietkau

mt76: mt76x02: fix beacon timer drift adjustment

Check the count before incrementing it to match vendor code behavior.
This defers the adjustment by one more tick, which should improve accuracy
Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
parent a6982fcd
...@@ -79,24 +79,24 @@ mt76x02_resync_beacon_timer(struct mt76x02_dev *dev) ...@@ -79,24 +79,24 @@ mt76x02_resync_beacon_timer(struct mt76x02_dev *dev)
* Beacon timer drifts by 1us every tick, the timer is configured * Beacon timer drifts by 1us every tick, the timer is configured
* in 1/16 TU (64us) units. * in 1/16 TU (64us) units.
*/ */
if (dev->tbtt_count < 62) if (dev->tbtt_count < 63)
return; return;
if (dev->tbtt_count >= 64) {
dev->tbtt_count = 0;
return;
}
/* /*
* The updated beacon interval takes effect after two TBTT, because * The updated beacon interval takes effect after two TBTT, because
* at this point the original interval has already been loaded into * at this point the original interval has already been loaded into
* the next TBTT_TIMER value * the next TBTT_TIMER value
*/ */
if (dev->tbtt_count == 62) if (dev->tbtt_count == 63)
timer_val -= 1; timer_val -= 1;
mt76_rmw_field(dev, MT_BEACON_TIME_CFG, mt76_rmw_field(dev, MT_BEACON_TIME_CFG,
MT_BEACON_TIME_CFG_INTVAL, timer_val); MT_BEACON_TIME_CFG_INTVAL, timer_val);
if (dev->tbtt_count >= 64) {
dev->tbtt_count = 0;
return;
}
} }
static void mt76x02_pre_tbtt_tasklet(unsigned long arg) static void mt76x02_pre_tbtt_tasklet(unsigned long arg)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment