summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/mediatek/mt76/mt7615
diff options
context:
space:
mode:
authorLorenzo Bianconi <lorenzo@kernel.org>2020-09-26 17:06:25 +0200
committerFelix Fietkau <nbd@nbd.name>2020-12-04 13:46:13 +0100
commit6a618acb7e623eb721b21b129a52439d323b75f1 (patch)
treeaf3685074b021a8a88e04df5db405910d4720f65 /drivers/net/wireless/mediatek/mt76/mt7615
parent1a3efbcc4281f2fbe602e67d7b7dfe64da818af9 (diff)
downloadlinux-6a618acb7e623eb721b21b129a52439d323b75f1.tar.gz
mt76: sdio: convert {status/net}_work to mt76_worker
In order to improve driver throughput, convert status_work and net_work to mt76 worker APIs. Remove txrx_wq sdio workqueue since it is no longer used Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
Diffstat (limited to 'drivers/net/wireless/mediatek/mt76/mt7615')
-rw-r--r--drivers/net/wireless/mediatek/mt76/mt7615/sdio.c27
-rw-r--r--drivers/net/wireless/mediatek/mt76/mt7615/sdio_txrx.c6
2 files changed, 20 insertions, 13 deletions
diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/sdio.c b/drivers/net/wireless/mediatek/mt76/mt7615/sdio.c
index 6f8adba2a78b..a3718c501eb8 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/sdio.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/sdio.c
@@ -366,11 +366,11 @@ static int mt7663s_probe(struct sdio_func *func,
ret = mt76s_init(mdev, func, &mt7663s_ops);
if (ret < 0)
- goto err_free;
+ goto error;
ret = mt7663s_hw_init(dev, func);
if (ret)
- goto err_deinit;
+ goto error;
mdev->rev = (mt76_rr(dev, MT_HW_CHIPID) << 16) |
(mt76_rr(dev, MT_HW_REV) & 0xff);
@@ -381,7 +381,7 @@ static int mt7663s_probe(struct sdio_func *func,
GFP_KERNEL);
if (!mdev->sdio.intr_data) {
ret = -ENOMEM;
- goto err_deinit;
+ goto error;
}
for (i = 0; i < ARRAY_SIZE(mdev->sdio.xmit_buf); i++) {
@@ -390,30 +390,29 @@ static int mt7663s_probe(struct sdio_func *func,
GFP_KERNEL);
if (!mdev->sdio.xmit_buf[i]) {
ret = -ENOMEM;
- goto err_deinit;
+ goto error;
}
}
ret = mt76s_alloc_queues(&dev->mt76);
if (ret)
- goto err_deinit;
+ goto error;
ret = mt76_worker_setup(mt76_hw(dev), &mdev->sdio.txrx_worker,
mt7663s_txrx_worker, "sdio-txrx");
if (ret)
- goto err_deinit;
+ goto error;
sched_set_fifo_low(mdev->sdio.txrx_worker.task);
ret = mt7663_usb_sdio_register_device(dev);
if (ret)
- goto err_deinit;
+ goto error;
return 0;
-err_deinit:
+error:
mt76s_deinit(&dev->mt76);
-err_free:
mt76_free_device(&dev->mt76);
return ret;
@@ -454,7 +453,13 @@ static int mt7663s_suspend(struct device *dev)
return err;
mt76_worker_disable(&mdev->mt76.sdio.txrx_worker);
- mt76s_stop_txrx(&mdev->mt76);
+ mt76_worker_disable(&mdev->mt76.sdio.status_worker);
+ mt76_worker_disable(&mdev->mt76.sdio.net_worker);
+
+ cancel_work_sync(&mdev->mt76.sdio.stat_work);
+ clear_bit(MT76_READING_STATS, &mdev->mphy.state);
+
+ mt76_tx_status_check(&mdev->mt76, NULL, true);
return 0;
}
@@ -466,6 +471,8 @@ static int mt7663s_resume(struct device *dev)
int err;
mt76_worker_enable(&mdev->mt76.sdio.txrx_worker);
+ mt76_worker_enable(&mdev->mt76.sdio.status_worker);
+ mt76_worker_enable(&mdev->mt76.sdio.net_worker);
err = mt7615_mcu_set_drv_ctrl(mdev);
if (err)
diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/sdio_txrx.c b/drivers/net/wireless/mediatek/mt76/mt7615/sdio_txrx.c
index d8f9148fe777..a4969380c860 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/sdio_txrx.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/sdio_txrx.c
@@ -150,7 +150,7 @@ static int mt7663s_rx_handler(struct mt76_dev *dev)
if (intr->isr & WHIER_RX0_DONE_INT_EN) {
ret = mt7663s_rx_run_queue(dev, 0, intr);
if (ret > 0) {
- queue_work(sdio->txrx_wq, &sdio->net_work);
+ mt76_worker_schedule(&sdio->net_worker);
nframes += ret;
}
}
@@ -158,7 +158,7 @@ static int mt7663s_rx_handler(struct mt76_dev *dev)
if (intr->isr & WHIER_RX1_DONE_INT_EN) {
ret = mt7663s_rx_run_queue(dev, 1, intr);
if (ret > 0) {
- queue_work(sdio->txrx_wq, &sdio->net_work);
+ mt76_worker_schedule(&sdio->net_worker);
nframes += ret;
}
}
@@ -269,7 +269,7 @@ next:
}
mt7663s_tx_update_quota(sdio, qid, pse_sz, ple_sz);
- queue_work(sdio->txrx_wq, &sdio->status_work);
+ mt76_worker_schedule(&sdio->status_worker);
return nframes;
}