linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] move dma shared code in mt76 module
@ 2019-02-13 23:44 lorenzo
  2019-02-13 23:44 ` [PATCH 1/2] mt76: mmio: move mt76x02_set_irq_mask " lorenzo
  2019-02-13 23:44 ` [PATCH 2/2] mt76: dma: move mt76x02_init_{tx,rx}_queue " lorenzo
  0 siblings, 2 replies; 3+ messages in thread
From: lorenzo @ 2019-02-13 23:44 UTC (permalink / raw)
  To: nbd; +Cc: linux-wireless, sgruszka, lorenzo.bianconi

From: Lorenzo Bianconi <lorenzo@kernel.org>

Move mt76x02/mt7603 dma shared code in mmio.c/dma.c in order to be
reused adding support for mt7603 driver

Lorenzo Bianconi (2):
  mt76: mmio: move mt76x02_set_irq_mask in mt76 module
  mt76: dma: move mt76x02_init_{tx,rx}_queue in mt76 module

 drivers/net/wireless/mediatek/mt76/dma.c      | 24 ++++++++-
 drivers/net/wireless/mediatek/mt76/mmio.c     | 13 +++++
 drivers/net/wireless/mediatek/mt76/mt76.h     | 16 +++++-
 drivers/net/wireless/mediatek/mt76/mt76x02.h  | 23 +++++++--
 .../net/wireless/mediatek/mt76/mt76x02_mmio.c | 50 -------------------
 5 files changed, 71 insertions(+), 55 deletions(-)

-- 
2.20.1


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH 1/2] mt76: mmio: move mt76x02_set_irq_mask in mt76 module
  2019-02-13 23:44 [PATCH 0/2] move dma shared code in mt76 module lorenzo
@ 2019-02-13 23:44 ` lorenzo
  2019-02-13 23:44 ` [PATCH 2/2] mt76: dma: move mt76x02_init_{tx,rx}_queue " lorenzo
  1 sibling, 0 replies; 3+ messages in thread
From: lorenzo @ 2019-02-13 23:44 UTC (permalink / raw)
  To: nbd; +Cc: linux-wireless, sgruszka, lorenzo.bianconi

From: Lorenzo Bianconi <lorenzo@kernel.org>

Move mt76x02_set_irq_mask in mt76 module in order to be reused
adding support for mt7603 driver and remove duplicated code

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
 drivers/net/wireless/mediatek/mt76/mmio.c         | 13 +++++++++++++
 drivers/net/wireless/mediatek/mt76/mt76.h         | 11 +++++++++++
 drivers/net/wireless/mediatek/mt76/mt76x02.h      |  5 ++---
 drivers/net/wireless/mediatek/mt76/mt76x02_mmio.c | 12 ------------
 4 files changed, 26 insertions(+), 15 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mmio.c b/drivers/net/wireless/mediatek/mt76/mmio.c
index 1d6bbce76041..059f13bf9dff 100644
--- a/drivers/net/wireless/mediatek/mt76/mmio.c
+++ b/drivers/net/wireless/mediatek/mt76/mmio.c
@@ -70,6 +70,19 @@ static int mt76_mmio_rd_rp(struct mt76_dev *dev, u32 base,
 	return 0;
 }
 
+void mt76_set_irq_mask(struct mt76_dev *dev, u32 addr,
+		       u32 clear, u32 set)
+{
+	unsigned long flags;
+
+	spin_lock_irqsave(&dev->mmio.irq_lock, flags);
+	dev->mmio.irqmask &= ~clear;
+	dev->mmio.irqmask |= set;
+	mt76_mmio_wr(dev, addr, dev->mmio.irqmask);
+	spin_unlock_irqrestore(&dev->mmio.irq_lock, flags);
+}
+EXPORT_SYMBOL_GPL(mt76_set_irq_mask);
+
 void mt76_mmio_init(struct mt76_dev *dev, void __iomem *regs)
 {
 	static const struct mt76_bus_ops mt76_mmio_ops = {
diff --git a/drivers/net/wireless/mediatek/mt76/mt76.h b/drivers/net/wireless/mediatek/mt76/mt76.h
index 13f6febc9b0f..b54611f53605 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76.h
@@ -779,4 +779,15 @@ void mt76u_mcu_complete_urb(struct urb *urb);
 int mt76u_mcu_init_rx(struct mt76_dev *dev);
 void mt76u_mcu_deinit(struct mt76_dev *dev);
 
+void mt76_set_irq_mask(struct mt76_dev *dev, u32 addr, u32 clear, u32 set);
+static inline void mt76_irq_enable(struct mt76_dev *dev, u32 addr, u32 mask)
+{
+	mt76_set_irq_mask(dev, addr, 0, mask);
+}
+
+static inline void mt76_irq_disable(struct mt76_dev *dev, u32 addr, u32 mask)
+{
+	mt76_set_irq_mask(dev, addr, mask, 0);
+}
+
 #endif
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x02.h b/drivers/net/wireless/mediatek/mt76/mt76x02.h
index 3464b4ca2ea8..ecbdb4385885 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x02.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76x02.h
@@ -182,7 +182,6 @@ void mt76x02_bss_info_changed(struct ieee80211_hw *hw,
 
 extern const u16 mt76x02_beacon_offsets[16];
 void mt76x02_init_beacon_config(struct mt76x02_dev *dev);
-void mt76x02_set_irq_mask(struct mt76x02_dev *dev, u32 clear, u32 set);
 void mt76x02_mac_start(struct mt76x02_dev *dev);
 
 void mt76x02_init_debugfs(struct mt76x02_dev *dev);
@@ -196,12 +195,12 @@ static inline bool is_mt76x2(struct mt76x02_dev *dev)
 
 static inline void mt76x02_irq_enable(struct mt76x02_dev *dev, u32 mask)
 {
-	mt76x02_set_irq_mask(dev, 0, mask);
+	mt76_set_irq_mask(&dev->mt76, MT_INT_MASK_CSR, 0, mask);
 }
 
 static inline void mt76x02_irq_disable(struct mt76x02_dev *dev, u32 mask)
 {
-	mt76x02_set_irq_mask(dev, mask, 0);
+	mt76_set_irq_mask(&dev->mt76, MT_INT_MASK_CSR, mask, 0);
 }
 
 static inline bool
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x02_mmio.c b/drivers/net/wireless/mediatek/mt76/mt76x02_mmio.c
index 374bc9d91f12..c86af8c85fd4 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x02_mmio.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x02_mmio.c
@@ -335,18 +335,6 @@ irqreturn_t mt76x02_irq_handler(int irq, void *dev_instance)
 }
 EXPORT_SYMBOL_GPL(mt76x02_irq_handler);
 
-void mt76x02_set_irq_mask(struct mt76x02_dev *dev, u32 clear, u32 set)
-{
-	unsigned long flags;
-
-	spin_lock_irqsave(&dev->mt76.mmio.irq_lock, flags);
-	dev->mt76.mmio.irqmask &= ~clear;
-	dev->mt76.mmio.irqmask |= set;
-	mt76_wr(dev, MT_INT_MASK_CSR, dev->mt76.mmio.irqmask);
-	spin_unlock_irqrestore(&dev->mt76.mmio.irq_lock, flags);
-}
-EXPORT_SYMBOL_GPL(mt76x02_set_irq_mask);
-
 static void mt76x02_dma_enable(struct mt76x02_dev *dev)
 {
 	u32 val;
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH 2/2] mt76: dma: move mt76x02_init_{tx,rx}_queue in mt76 module
  2019-02-13 23:44 [PATCH 0/2] move dma shared code in mt76 module lorenzo
  2019-02-13 23:44 ` [PATCH 1/2] mt76: mmio: move mt76x02_set_irq_mask " lorenzo
@ 2019-02-13 23:44 ` lorenzo
  1 sibling, 0 replies; 3+ messages in thread
From: lorenzo @ 2019-02-13 23:44 UTC (permalink / raw)
  To: nbd; +Cc: linux-wireless, sgruszka, lorenzo.bianconi

From: Lorenzo Bianconi <lorenzo@kernel.org>

Move mt76x02_init_tx_queue and mt76x02_init_rx_queue in mt76
module in order to be reused adding support for mt7603 driver.
Squash mt76x02_init_tx_queue and mt76x02_init_rx_queue in
mt76_alloc_hw_queue

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
 drivers/net/wireless/mediatek/mt76/dma.c      | 24 +++++++++++-
 drivers/net/wireless/mediatek/mt76/mt76.h     |  5 ++-
 drivers/net/wireless/mediatek/mt76/mt76x02.h  | 18 +++++++++
 .../net/wireless/mediatek/mt76/mt76x02_mmio.c | 38 -------------------
 4 files changed, 45 insertions(+), 40 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/dma.c b/drivers/net/wireless/mediatek/mt76/dma.c
index 6eedc0ec7661..420d09c1a06e 100644
--- a/drivers/net/wireless/mediatek/mt76/dma.c
+++ b/drivers/net/wireless/mediatek/mt76/dma.c
@@ -51,6 +51,28 @@ mt76_dma_alloc_queue(struct mt76_dev *dev, struct mt76_queue *q)
 	return 0;
 }
 
+static int
+mt76_alloc_hw_queue(struct mt76_dev *dev, struct mt76_queue *q,
+		    int idx, int n_desc, int bufsize,
+		    u32 ring_base, u32 irq_addr,
+		    u32 irq_mask)
+{
+	int ret;
+
+	q->regs = dev->mmio.regs + ring_base + idx * MT_RING_SIZE;
+	q->ndesc = n_desc;
+	q->buf_size = bufsize;
+	q->hw_idx = idx;
+
+	ret = mt76_dma_alloc_queue(dev, q);
+	if (ret)
+		return ret;
+
+	mt76_irq_enable(dev, irq_addr, irq_mask);
+
+	return 0;
+}
+
 static int
 mt76_dma_add_buf(struct mt76_dev *dev, struct mt76_queue *q,
 		 struct mt76_queue_buf *buf, int nbufs, u32 info,
@@ -545,7 +567,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,
+	.alloc = mt76_alloc_hw_queue,
 	.tx_queue_skb_raw = mt76_dma_tx_queue_skb_raw,
 	.tx_queue_skb = mt76_dma_tx_queue_skb,
 	.tx_cleanup = mt76_dma_tx_cleanup,
diff --git a/drivers/net/wireless/mediatek/mt76/mt76.h b/drivers/net/wireless/mediatek/mt76/mt76.h
index b54611f53605..5b6790b5e31e 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76.h
@@ -147,7 +147,10 @@ struct mt76_mcu_ops {
 struct mt76_queue_ops {
 	int (*init)(struct mt76_dev *dev);
 
-	int (*alloc)(struct mt76_dev *dev, struct mt76_queue *q);
+	int (*alloc)(struct mt76_dev *dev, struct mt76_queue *q,
+		     int idx, int n_desc, int bufsize,
+		     u32 ring_base, u32 irq_addr,
+		     u32 irq_mask);
 
 	int (*add_buf)(struct mt76_dev *dev, struct mt76_queue *q,
 		       struct mt76_queue_buf *buf, int nbufs, u32 info,
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x02.h b/drivers/net/wireless/mediatek/mt76/mt76x02.h
index ecbdb4385885..d323aeb92424 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x02.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76x02.h
@@ -203,6 +203,24 @@ static inline void mt76x02_irq_disable(struct mt76x02_dev *dev, u32 mask)
 	mt76_set_irq_mask(&dev->mt76, MT_INT_MASK_CSR, mask, 0);
 }
 
+static inline int
+mt76x02_init_tx_queue(struct mt76x02_dev *dev, struct mt76_queue *q,
+		      int idx, int n_desc)
+{
+	return mt76_queue_alloc(dev, q, idx, n_desc, 0,
+				MT_TX_RING_BASE, MT_INT_MASK_CSR,
+				MT_INT_TX_DONE(idx));
+}
+
+static inline int
+mt76x02_init_rx_queue(struct mt76x02_dev *dev, struct mt76_queue *q,
+		      int idx, int n_desc, int bufsize)
+{
+	return mt76_queue_alloc(dev, q, idx, n_desc, bufsize,
+				MT_RX_RING_BASE, MT_INT_MASK_CSR,
+				MT_INT_RX_DONE(idx));
+}
+
 static inline bool
 mt76x02_wait_for_txrx_idle(struct mt76_dev *dev)
 {
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x02_mmio.c b/drivers/net/wireless/mediatek/mt76/mt76x02_mmio.c
index c86af8c85fd4..a7ba9f5528aa 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x02_mmio.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x02_mmio.c
@@ -151,44 +151,6 @@ static void mt76x02_pre_tbtt_tasklet(unsigned long arg)
 	spin_unlock_bh(&q->lock);
 }
 
-static int
-mt76x02_init_tx_queue(struct mt76x02_dev *dev, struct mt76_queue *q,
-		      int idx, int n_desc)
-{
-	int ret;
-
-	q->regs = dev->mt76.mmio.regs + MT_TX_RING_BASE + idx * MT_RING_SIZE;
-	q->ndesc = n_desc;
-	q->hw_idx = idx;
-
-	ret = mt76_queue_alloc(dev, q);
-	if (ret)
-		return ret;
-
-	mt76x02_irq_enable(dev, MT_INT_TX_DONE(idx));
-
-	return 0;
-}
-
-static int
-mt76x02_init_rx_queue(struct mt76x02_dev *dev, struct mt76_queue *q,
-		      int idx, int n_desc, int bufsize)
-{
-	int ret;
-
-	q->regs = dev->mt76.mmio.regs + MT_RX_RING_BASE + idx * MT_RING_SIZE;
-	q->ndesc = n_desc;
-	q->buf_size = bufsize;
-
-	ret = mt76_queue_alloc(dev, q);
-	if (ret)
-		return ret;
-
-	mt76x02_irq_enable(dev, MT_INT_RX_DONE(idx));
-
-	return 0;
-}
-
 static void mt76x02_process_tx_status_fifo(struct mt76x02_dev *dev)
 {
 	struct mt76x02_tx_status stat;
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2019-02-13 23:45 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-02-13 23:44 [PATCH 0/2] move dma shared code in mt76 module lorenzo
2019-02-13 23:44 ` [PATCH 1/2] mt76: mmio: move mt76x02_set_irq_mask " lorenzo
2019-02-13 23:44 ` [PATCH 2/2] mt76: dma: move mt76x02_init_{tx,rx}_queue " lorenzo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).