move dma shared code in mt76 module
Subsystems (2)
Lorenzo Bianconi
maintainerv3 cover move dma shared code in mt76 module
Move mt76x02/mt7603 dma shared code in mmio.c/dma.c in order to be reused adding support for mt7603 driver
Changes since v2:
- squash mt7603 changes
Changes since v1:
- remove mt76_irq_enable/mt76_irq_disable
- move dma queue initialization in mt76_dma_alloc_queue
- move mt76_irq_enable call into the driver specific inline functions
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 | 9 ++++- drivers/net/wireless/mediatek/mt76/mmio.c | 13 +++++++ drivers/net/wireless/mediatek/mt76/mt76.h | 6 ++- .../net/wireless/mediatek/mt76/mt7603/core.c | 11 ------ .../net/wireless/mediatek/mt76/mt7603/dma.c | 26 +++++-------- .../wireless/mediatek/mt76/mt7603/mt7603.h | 6 +-- drivers/net/wireless/mediatek/mt76/mt76x02.h | 5 +-- .../net/wireless/mediatek/mt76/mt76x02_mmio.c | 38 +++++-------------- 8 files changed, 50 insertions(+), 64 deletions(-)
Signature · 1 line
2.20.1
Lorenzo Bianconi
maintainerPATCH v3 1/2 mt76: mmio: move mt76x02_set_irq_mask in mt76 module
Move mt76x02_set_irq_mask in mt76 module in order to be reused adding support for mt7603 driver and remove duplicated code
--- drivers/net/wireless/mediatek/mt76/mmio.c | 13 +++++++++++++ drivers/net/wireless/mediatek/mt76/mt76.h | 2 ++ drivers/net/wireless/mediatek/mt76/mt7603/core.c | 11 ----------- drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h | 6 ++---- drivers/net/wireless/mediatek/mt76/mt76x02.h | 5 ++--- drivers/net/wireless/mediatek/mt76/mt76x02_mmio.c | 12 ------------ 6 files changed, 19 insertions(+), 30 deletions(-)
drivers/net/wireless/mediatek/mt76/mmio.c +13 -0
@@ -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 = {
drivers/net/wireless/mediatek/mt76/mt76.h +2 -0
@@ -766,4 +766,6 @@ void mt76_mcu_rx_event(struct mt76_dev *dev, struct sk_buff *skb);struct sk_buff *mt76_mcu_get_response (struct mt76_dev *dev,unsigned long expires); +void mt76_set_irq_mask (struct mt76_dev *dev,u32 addr,u32 clear,u32 set); +#endif
drivers/net/wireless/mediatek/mt76/mt7603/core.c +0 -11
@@ -2,17 +2,6 @@#include "mt7603.h" -void mt7603_set_irq_mask (struct mt7603_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); -} -void mt7603_rx_poll_complete (struct mt76_dev *mdev,enum mt76_rxq_id q) { struct mt7603_dev *dev = container_of(mdev, struct mt7603_dev, mt76);
drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h +2 -4
@@ -179,16 +179,14 @@ void mt7603_dma_cleanup(struct mt7603_dev *dev);int mt7603_mcu_init (struct mt7603_dev *dev);void mt7603_init_debugfs (struct mt7603_dev *dev); -void mt7603_set_irq_mask (struct mt7603_dev *dev,u32 clear,u32 set); -static inline void mt7603_irq_enable (struct mt7603_dev *dev,u32 mask) { -mt7603_set_irq_mask (dev,0 , mask); +mt76_set_irq_mask (&dev->mt76,MT_INT_MASK_CSR ,0 , mask); }static inline void mt7603_irq_disable (struct mt7603_dev *dev,u32 mask) { -mt7603_set_irq_mask (dev, mask,0 ); +mt76_set_irq_mask (&dev->mt76,MT_INT_MASK_CSR , mask,0 ); }void mt7603_mac_dma_start (struct mt7603_dev *dev);
drivers/net/wireless/mediatek/mt76/mt76x02.h +2 -3
@@ -183,7 +183,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);
@@ -197,12 +196,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
drivers/net/wireless/mediatek/mt76/mt76x02_mmio.c +0 -12
@@ -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;
Signature · 1 line
2.20.1
Lorenzo Bianconi
maintainerPATCH v3 2/2 mt76: dma: move mt76x02_init_{tx,rx}_queue in mt76 module
In reply to Lorenzo BianconiMove mt76x02_init_tx_queue and mt76x02_init_rx_queue in mt76 module in order to be reused adding support for mt7603 driver and remove duplicated code.
Squash mt76x02_init_tx_queue and mt76x02_init_rx_queue in mt76_dma_alloc_queue
--- drivers/net/wireless/mediatek/mt76/dma.c | 9 ++++++- drivers/net/wireless/mediatek/mt76/mt76.h | 4 ++- .../net/wireless/mediatek/mt76/mt7603/dma.c | 26 +++++++------------ .../net/wireless/mediatek/mt76/mt76x02_mmio.c | 26 +++++++------------ 4 files changed, 31 insertions(+), 34 deletions(-)
drivers/net/wireless/mediatek/mt76/dma.c +8 -1
@@ -21,7 +21,9 @@#define DMA_DUMMY_TXWI ((void *) ~0)static int -mt76_dma_alloc_queue (struct mt76_dev *dev,struct mt76_queue *q) +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;
@@ -29,6 +31,11 @@ mt76_dma_alloc_queue(struct mt76_dev *dev, struct mt76_queue *q)spin_lock_init (&q->lock);INIT_LIST_HEAD (&q->swq); + q->regs = dev->mmio.regs + ring_base + idx *MT_RING_SIZE ; + q->ndesc = n_desc; + q->buf_size = bufsize; + q->hw_idx = idx; + size = q->ndesc *sizeof (struct mt76_desc ); q->desc =dmam_alloc_coherent (dev->dev, size, &q->desc_dma,GFP_KERNEL );if (!q->desc)
drivers/net/wireless/mediatek/mt76/mt76.h +3 -1
@@ -148,7 +148,9 @@ 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); int (*add_buf)(struct mt76_dev *dev, struct mt76_queue *q, struct mt76_queue_buf *buf, int nbufs, u32 info,
drivers/net/wireless/mediatek/mt76/mt7603/dma.c +10 -16
@@ -8,15 +8,12 @@ static int mt7603_init_tx_queue(struct mt7603_dev *dev, struct mt76_queue *q, int idx, int n_desc) { - int ret; - - q->hw_idx = idx; - q->regs = dev->mt76.mmio.regs +MT_TX_RING_BASE + idx *MT_RING_SIZE ; - q->ndesc = n_desc; + int err; - ret =mt76_queue_alloc (dev, q); -if (ret) -return ret; + err =mt76_queue_alloc (dev, q, idx, n_desc,0 , +MT_TX_RING_BASE ); +if (err <0 ) +return err;mt7603_irq_enable (dev,MT_INT_TX_DONE (idx));
@@ -106,15 +103,12 @@ static int mt7603_init_rx_queue(struct mt7603_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; + int err; - ret =mt76_queue_alloc (dev, q); -if (ret) -return ret; + err =mt76_queue_alloc (dev, q, idx, n_desc, bufsize, +MT_RX_RING_BASE ); +if (err <0 ) +return err;mt7603_irq_enable (dev,MT_INT_RX_DONE (idx));
drivers/net/wireless/mediatek/mt76/mt76x02_mmio.c +10 -16
@@ -155,15 +155,12 @@ static int mt76x02_init_tx_queue(struct mt76x02_dev *dev, struct mt76_queue *q, int idx, int n_desc) { - int ret; + int err; - 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; + err =mt76_queue_alloc (dev, q, idx, n_desc,0 , +MT_TX_RING_BASE ); +if (err <0 ) +return err;mt76x02_irq_enable (dev,MT_INT_TX_DONE (idx));
@@ -174,15 +171,12 @@ static int mt76x02_init_rx_queue(struct mt76x02_dev *dev, struct mt76_queue *q, int idx, int n_desc, int bufsize) { - int ret; + int err; - 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; + err =mt76_queue_alloc (dev, q, idx, n_desc, bufsize, +MT_RX_RING_BASE ); +if (err <0 ) +return err;mt76x02_irq_enable (dev,MT_INT_RX_DONE (idx));
Signature · 1 line
2.20.1
Quoted 12 lines · Lorenzo Bianconi
Move mt76x02/mt7603 dma shared code in
mmio.c/dma.cin order to be reused adding support for mt7603 driverChanges since v2:
- squash mt7603 changesChanges since v1:
- remove mt76_irq_enable/mt76_irq_disable
- move dma queue initialization inmt76_dma_alloc_queue
- movemt76_irq_enablecall into the driver specific inline functions
Quoted 3 lines
Lorenzo Bianconi (2):
mt76: mmio: movemt76x02_set_irq_maskin mt76 module
mt76: dma: move mt76x02_init_{tx,rx}_queue in mt76 module
Applied, thanks.
- Felix