diff --git a/mt7603_dma.c b/mt7603_dma.c index b8d83aed..e4fad27d 100644 --- a/mt7603_dma.c +++ b/mt7603_dma.c @@ -263,6 +263,10 @@ int mt7603_dma_init(struct mt7603_dev *dev) tasklet_init(&dev->tx_tasklet, mt7603_tx_tasklet, (unsigned long) dev); tasklet_init(&dev->rx_tasklet, mt7603_rx_tasklet, (unsigned long) dev); + mt76_clear(dev, MT_WPDMA_GLO_CFG, + MT_WPDMA_GLO_CFG_TX_DMA_EN | + MT_WPDMA_GLO_CFG_RX_DMA_EN); + mt76_wr(dev, MT_WPDMA_RST_IDX, ~0); for (i = 0; i < ARRAY_SIZE(wmm_queue_map); i++) { @@ -314,6 +318,10 @@ void mt7603_dma_cleanup(struct mt7603_dev *dev) { int i; + mt76_clear(dev, MT_WPDMA_GLO_CFG, + MT_WPDMA_GLO_CFG_TX_DMA_EN | + MT_WPDMA_GLO_CFG_RX_DMA_EN); + tasklet_kill(&dev->tx_tasklet); tasklet_kill(&dev->rx_tasklet); for (i = 0; i < ARRAY_SIZE(dev->q_tx); i++) diff --git a/mt7603_init.c b/mt7603_init.c index a1795189..a280ba32 100644 --- a/mt7603_init.c +++ b/mt7603_init.c @@ -59,15 +59,18 @@ mt7603_set_tmac_template(struct mt7603_dev *dev) static int mt7603_mac_early_init(struct mt7603_dev *dev) { - /* Disable MAC */ - mt76_set(dev, MT_WF_ARB_SCR, MT_WF_ARB_TX_DISABLE | MT_WF_ARB_RX_DISABLE); - mt76_wr(dev, MT_WF_ARB_TX_START_0, 0); + mt76_wr(dev, MT_WPDMA_GLO_CFG, 0x52000850); + + mt76_clear(dev, MT_WF_ARB_SCR, MT_WF_ARB_TX_DISABLE | MT_WF_ARB_RX_DISABLE); + mt76_wr(dev, MT_WF_ARB_TX_START_0, ~0); mt76_clear(dev, MT_WF_ARB_RQCR, MT_WF_ARB_RQCR_RX_START); wait_for_wpdma(dev); udelay(50); - mt76_wr(dev, MT_WPDMA_GLO_CFG, 0x52000875); + mt76_set(dev, MT_WPDMA_GLO_CFG, + (MT_WPDMA_GLO_CFG_TX_DMA_EN | + MT_WPDMA_GLO_CFG_RX_DMA_EN)); mt7603_irq_enable(dev, MT_INT_RX_DONE_ALL | MT_INT_TX_DONE_ALL); @@ -212,9 +215,6 @@ mt7603_init_hardware(struct mt7603_dev *dev) int ret; mt76_wr(dev, MT_INT_SOURCE_CSR, ~0); - mt76_clear(dev, MT_WPDMA_GLO_CFG, - MT_WPDMA_GLO_CFG_TX_DMA_EN | - MT_WPDMA_GLO_CFG_RX_DMA_EN); ret = mt7603_dma_init(dev); if (ret)