mirror of
https://github.com/outbackdingo/mt76.git
synced 2026-10-24 13:26:48 +00:00
mt7603: add some (very limited) mac bringup
Signed-off-by: Felix Fietkau <[email protected]>
This commit is contained in:
+1
-6
@@ -38,7 +38,6 @@ irqreturn_t mt7603_irq_handler(int irq, void *dev_instance)
|
||||
intr &= dev->irqmask;
|
||||
printk("got irq: %08x\n", intr);
|
||||
|
||||
#if 0
|
||||
if (intr & MT_INT_TX_DONE_ALL) {
|
||||
mt7603_irq_disable(dev, MT_INT_TX_DONE_ALL);
|
||||
tasklet_schedule(&dev->tx_tasklet);
|
||||
@@ -54,17 +53,13 @@ irqreturn_t mt7603_irq_handler(int irq, void *dev_instance)
|
||||
tasklet_schedule(&dev->rx_tasklet);
|
||||
}
|
||||
|
||||
#if 0
|
||||
if (intr & MT_INT_PRE_TBTT)
|
||||
tasklet_schedule(&dev->pre_tbtt_tasklet);
|
||||
|
||||
/* send buffered multicast frames now */
|
||||
if (intr & MT_INT_TBTT)
|
||||
mt76_queue_kick(dev, &dev->q_tx[MT_TXQ_PSD]);
|
||||
|
||||
if (intr & MT_INT_TX_STAT) {
|
||||
mt7603_mac_poll_tx_status(dev, true);
|
||||
tasklet_schedule(&dev->tx_tasklet);
|
||||
}
|
||||
#endif
|
||||
|
||||
return IRQ_HANDLED;
|
||||
|
||||
@@ -29,10 +29,41 @@ struct mt7603_dev *mt7603_alloc_device(struct device *pdev)
|
||||
return dev;
|
||||
}
|
||||
|
||||
int mt7603_mac_reset(struct mt7603_dev *dev)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
val = mt76_rr(dev, MT_WPDMA_GLO_CFG);
|
||||
|
||||
val &= ~(MT_WPDMA_GLO_CFG_TX_DMA_EN |
|
||||
MT_WPDMA_GLO_CFG_TX_DMA_BUSY |
|
||||
MT_WPDMA_GLO_CFG_RX_DMA_EN |
|
||||
MT_WPDMA_GLO_CFG_RX_DMA_BUSY |
|
||||
MT_WPDMA_GLO_CFG_DMA_BURST_SIZE);
|
||||
val |= MT76_SET(MT_WPDMA_GLO_CFG_DMA_BURST_SIZE, 3);
|
||||
|
||||
mt76_wr(dev, MT_WPDMA_GLO_CFG, val);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int mt7603_mac_start(struct mt7603_dev *dev)
|
||||
{
|
||||
mt76_set(dev, MT_WPDMA_GLO_CFG,
|
||||
MT_WPDMA_GLO_CFG_TX_DMA_EN |
|
||||
MT_WPDMA_GLO_CFG_RX_DMA_EN);
|
||||
|
||||
mt76_clear(dev, MT_WPDMA_GLO_CFG, MT_WPDMA_GLO_CFG_TX_WRITEBACK_DONE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int mt7603_init_hardware(struct mt7603_dev *dev)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = mt7603_mac_reset(dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = mt7603_dma_init(dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
@@ -40,6 +71,10 @@ int mt7603_init_hardware(struct mt7603_dev *dev)
|
||||
set_bit(MT76_STATE_INITIALIZED, &dev->mt76.state);
|
||||
mt7603_irq_enable(dev, MT_INT_RX_DONE_ALL | MT_INT_TX_DONE_ALL);
|
||||
|
||||
ret = mt7603_mac_start(dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = mt7603_mcu_init(dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
+20
-8
@@ -35,16 +35,28 @@
|
||||
#define MT_INT_SOURCE_CSR MT_HIF(0x200)
|
||||
#define MT_INT_MASK_CSR MT_HIF(0x204)
|
||||
|
||||
#define MT_INT_RX_DONE(_n) BIT(_n)
|
||||
#define MT_INT_RX_DONE_ALL GENMASK(1, 0)
|
||||
#define MT_INT_TX_DONE_ALL GENMASK(19, 4)
|
||||
#define MT_INT_TX_DONE(_n) BIT(_n + 4)
|
||||
#define MT_INT_RX_DONE(_n) BIT(_n)
|
||||
#define MT_INT_RX_DONE_ALL GENMASK(1, 0)
|
||||
#define MT_INT_TX_DONE_ALL GENMASK(19, 4)
|
||||
#define MT_INT_TX_DONE(_n) BIT(_n + 4)
|
||||
|
||||
#define MT_INT_RX_COHERENT BIT(20)
|
||||
#define MT_INT_TX_COHERENT BIT(21)
|
||||
#define MT_INT_PRE_TBTT BIT(27)
|
||||
#define MT_INT_RX_COHERENT BIT(20)
|
||||
#define MT_INT_TX_COHERENT BIT(21)
|
||||
#define MT_INT_PRE_TBTT BIT(27)
|
||||
|
||||
#define MT_INT_MCU_CMD BIT(30)
|
||||
#define MT_INT_MCU_CMD BIT(30)
|
||||
|
||||
#define MT_WPDMA_GLO_CFG MT_HIF(0x208)
|
||||
#define MT_WPDMA_GLO_CFG_TX_DMA_EN BIT(0)
|
||||
#define MT_WPDMA_GLO_CFG_TX_DMA_BUSY BIT(1)
|
||||
#define MT_WPDMA_GLO_CFG_RX_DMA_EN BIT(2)
|
||||
#define MT_WPDMA_GLO_CFG_RX_DMA_BUSY BIT(3)
|
||||
#define MT_WPDMA_GLO_CFG_DMA_BURST_SIZE GENMASK(5, 4)
|
||||
#define MT_WPDMA_GLO_CFG_TX_WRITEBACK_DONE BIT(6)
|
||||
#define MT_WPDMA_GLO_CFG_BIG_ENDIAN BIT(7)
|
||||
#define MT_WPDMA_GLO_CFG_HDR_SEG_LEN GENMASK(15, 8)
|
||||
#define MT_WPDMA_GLO_CFG_CLK_GATE_DIS BIT(30)
|
||||
#define MT_WPDMA_GLO_CFG_RX_2B_OFFSET BIT(31)
|
||||
|
||||
#define MT_WPDMA_RST_IDX MT_HIF(0x20c)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user