Commit 5cf8f779 authored by Lorenzo Bianconi's avatar Lorenzo Bianconi Committed by Felix Fietkau
Browse files

mt76: mt7615: wake device before pulling packets from mac80211 queues



Make sure the device is in full-power before pulling frames from
mac80211 queues

Signed-off-by: default avatarLorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
parent 46dadc31
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -1841,9 +1841,13 @@ void mt7615_pm_wake_work(struct work_struct *work)
						pm.wake_work);
	mphy = dev->phy.mt76;

	if (mt7615_driver_own(dev))
	if (mt7615_driver_own(dev)) {
		dev_err(mphy->dev->dev, "failed to wake device\n");
		goto out;
	}

	tasklet_schedule(&dev->mt76.tx_tasklet);
out:
	complete_all(&dev->pm.wake_cmpl);
}

+19 −1
Original line number Diff line number Diff line
@@ -638,6 +638,24 @@ static void mt7615_sta_rate_tbl_update(struct ieee80211_hw *hw,
	spin_unlock_bh(&dev->mt76.lock);
}

static void
mt7615_wake_tx_queue(struct ieee80211_hw *hw, struct ieee80211_txq *txq)
{
	struct mt7615_dev *dev = mt7615_hw_dev(hw);
	struct mt7615_phy *phy = mt7615_hw_phy(hw);
	struct mt76_phy *mphy = phy->mt76;

	if (!test_bit(MT76_STATE_RUNNING, &mphy->state))
		return;

	if (test_bit(MT76_STATE_PM, &mphy->state)) {
		queue_work(dev->mt76.wq, &dev->pm.wake_work);
		return;
	}

	tasklet_schedule(&dev->mt76.tx_tasklet);
}

static void mt7615_tx(struct ieee80211_hw *hw,
		      struct ieee80211_tx_control *control,
		      struct sk_buff *skb)
@@ -1134,7 +1152,7 @@ const struct ieee80211_ops mt7615_ops = {
	.set_key = mt7615_set_key,
	.ampdu_action = mt7615_ampdu_action,
	.set_rts_threshold = mt7615_set_rts_threshold,
	.wake_tx_queue = mt76_wake_tx_queue,
	.wake_tx_queue = mt7615_wake_tx_queue,
	.sta_rate_tbl_update = mt7615_sta_rate_tbl_update,
	.sw_scan_start = mt76_sw_scan,
	.sw_scan_complete = mt76_sw_scan_complete,