From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org, Sean Wang <sean.wang@mediatek.com>,
Lorenzo Bianconi <lorenzo@kernel.org>,
Felix Fietkau <nbd@nbd.name>, Deren Wu <Deren.Wu@mediatek.com>
Subject: [PATCH 5.12 07/11] mt76: dma: introduce mt76_dma_queue_reset routine
Date: Fri, 9 Jul 2021 15:21:44 +0200 [thread overview]
Message-ID: <20210709131559.167287713@linuxfoundation.org> (raw)
In-Reply-To: <20210709131549.679160341@linuxfoundation.org>
From: Lorenzo Bianconi <lorenzo@kernel.org>
commit 3990465db6829c91e8ebfde51ba2d98885020249 upstream.
Introduce mt76_dma_queue_reset utility routine to reset a given hw
queue. This is a preliminary patch to introduce mt7921 chip reset
support.
Co-developed-by: Sean Wang <sean.wang@mediatek.com>
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Cc: Deren Wu <Deren.Wu@mediatek.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/net/wireless/mediatek/mt76/dma.c | 46 ++++++++++++++++++------------
drivers/net/wireless/mediatek/mt76/mt76.h | 3 +
2 files changed, 31 insertions(+), 18 deletions(-)
--- a/drivers/net/wireless/mediatek/mt76/dma.c
+++ b/drivers/net/wireless/mediatek/mt76/dma.c
@@ -79,13 +79,38 @@ mt76_free_pending_txwi(struct mt76_dev *
local_bh_enable();
}
+static void
+mt76_dma_sync_idx(struct mt76_dev *dev, struct mt76_queue *q)
+{
+ writel(q->desc_dma, &q->regs->desc_base);
+ writel(q->ndesc, &q->regs->ring_size);
+ q->head = readl(&q->regs->dma_idx);
+ q->tail = q->head;
+}
+
+static void
+mt76_dma_queue_reset(struct mt76_dev *dev, struct mt76_queue *q)
+{
+ int i;
+
+ if (!q)
+ return;
+
+ /* clear descriptors */
+ for (i = 0; i < q->ndesc; i++)
+ q->desc[i].ctrl = cpu_to_le32(MT_DMA_CTL_DMA_DONE);
+
+ writel(0, &q->regs->cpu_idx);
+ writel(0, &q->regs->dma_idx);
+ mt76_dma_sync_idx(dev, q);
+}
+
static int
mt76_dma_alloc_queue(struct mt76_dev *dev, struct mt76_queue *q,
int idx, int n_desc, int bufsize,
u32 ring_base)
{
int size;
- int i;
spin_lock_init(&q->lock);
spin_lock_init(&q->cleanup_lock);
@@ -105,14 +130,7 @@ mt76_dma_alloc_queue(struct mt76_dev *de
if (!q->entry)
return -ENOMEM;
- /* clear descriptors */
- for (i = 0; i < q->ndesc; i++)
- q->desc[i].ctrl = cpu_to_le32(MT_DMA_CTL_DMA_DONE);
-
- writel(q->desc_dma, &q->regs->desc_base);
- writel(0, &q->regs->cpu_idx);
- writel(0, &q->regs->dma_idx);
- writel(q->ndesc, &q->regs->ring_size);
+ mt76_dma_queue_reset(dev, q);
return 0;
}
@@ -202,15 +220,6 @@ mt76_dma_tx_cleanup_idx(struct mt76_dev
}
static void
-mt76_dma_sync_idx(struct mt76_dev *dev, struct mt76_queue *q)
-{
- writel(q->desc_dma, &q->regs->desc_base);
- writel(q->ndesc, &q->regs->ring_size);
- q->head = readl(&q->regs->dma_idx);
- q->tail = q->head;
-}
-
-static void
mt76_dma_kick_queue(struct mt76_dev *dev, struct mt76_queue *q)
{
wmb();
@@ -640,6 +649,7 @@ mt76_dma_init(struct mt76_dev *dev)
static const struct mt76_queue_ops mt76_dma_ops = {
.init = mt76_dma_init,
.alloc = mt76_dma_alloc_queue,
+ .reset_q = mt76_dma_queue_reset,
.tx_queue_skb_raw = mt76_dma_tx_queue_skb_raw,
.tx_queue_skb = mt76_dma_tx_queue_skb,
.tx_cleanup = mt76_dma_tx_cleanup,
--- a/drivers/net/wireless/mediatek/mt76/mt76.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76.h
@@ -191,6 +191,8 @@ struct mt76_queue_ops {
bool flush);
void (*kick)(struct mt76_dev *dev, struct mt76_queue *q);
+
+ void (*reset_q)(struct mt76_dev *dev, struct mt76_queue *q);
};
enum mt76_wcid_flags {
@@ -786,6 +788,7 @@ static inline u16 mt76_rev(struct mt76_d
#define mt76_queue_rx_reset(dev, ...) (dev)->mt76.queue_ops->rx_reset(&((dev)->mt76), __VA_ARGS__)
#define mt76_queue_tx_cleanup(dev, ...) (dev)->mt76.queue_ops->tx_cleanup(&((dev)->mt76), __VA_ARGS__)
#define mt76_queue_kick(dev, ...) (dev)->mt76.queue_ops->kick(&((dev)->mt76), __VA_ARGS__)
+#define mt76_queue_reset(dev, ...) (dev)->mt76.queue_ops->reset_q(&((dev)->mt76), __VA_ARGS__)
#define mt76_for_each_q_rx(dev, i) \
for (i = 0; i < ARRAY_SIZE((dev)->q_rx) && \
next prev parent reply other threads:[~2021-07-09 13:22 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-09 13:21 [PATCH 5.12 00/11] 5.12.16-rc1 review Greg Kroah-Hartman
2021-07-09 13:21 ` [PATCH 5.12 01/11] Hexagon: fix build errors Greg Kroah-Hartman
2021-07-09 13:21 ` [PATCH 5.12 02/11] Hexagon: add target builtins to kernel Greg Kroah-Hartman
2021-07-09 13:21 ` [PATCH 5.12 03/11] Hexagon: change jumps to must-extend in futex_atomic_* Greg Kroah-Hartman
2021-07-09 13:21 ` [PATCH 5.12 04/11] mt76: mt7921: check mcu returned values in mt7921_start Greg Kroah-Hartman
2021-07-09 13:21 ` [PATCH 5.12 05/11] mt76: mt7921: introduce mt7921_run_firmware utility routine Greg Kroah-Hartman
2021-07-09 13:21 ` [PATCH 5.12 06/11] mt76: mt7921: introduce __mt7921_start " Greg Kroah-Hartman
2021-07-09 13:21 ` Greg Kroah-Hartman [this message]
2021-07-09 13:21 ` [PATCH 5.12 08/11] mt76: dma: export mt76_dma_rx_cleanup routine Greg Kroah-Hartman
2021-07-09 13:21 ` [PATCH 5.12 09/11] mt76: mt7921: add wifi reset support Greg Kroah-Hartman
2021-07-09 13:21 ` [PATCH 5.12 10/11] mt76: mt7921: abort uncompleted scan by wifi reset Greg Kroah-Hartman
2021-07-09 13:21 ` [PATCH 5.12 11/11] mt76: mt7921: get rid of mcu_reset function pointer Greg Kroah-Hartman
2021-07-09 17:11 ` [PATCH 5.12 00/11] 5.12.16-rc1 review Jon Hunter
2021-07-09 17:31 ` Fox Chen
2021-07-09 21:28 ` Shuah Khan
2021-07-09 22:31 ` Justin Forbes
2021-07-10 10:11 ` Naresh Kamboju
2021-07-10 19:57 ` Guenter Roeck
2021-07-11 22:28 ` Florian Fainelli
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210709131559.167287713@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=Deren.Wu@mediatek.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lorenzo@kernel.org \
--cc=nbd@nbd.name \
--cc=sean.wang@mediatek.com \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox