Lines Matching full:dev
38 wed_m32(struct mtk_wed_device *dev, u32 reg, u32 mask, u32 val) in wed_m32() argument
40 regmap_update_bits(dev->hw->regs, reg, mask | val, val); in wed_m32()
44 wed_set(struct mtk_wed_device *dev, u32 reg, u32 mask) in wed_set() argument
46 return wed_m32(dev, reg, 0, mask); in wed_set()
50 wed_clr(struct mtk_wed_device *dev, u32 reg, u32 mask) in wed_clr() argument
52 return wed_m32(dev, reg, mask, 0); in wed_clr()
56 wdma_m32(struct mtk_wed_device *dev, u32 reg, u32 mask, u32 val) in wdma_m32() argument
58 wdma_w32(dev, reg, (wdma_r32(dev, reg) & ~mask) | val); in wdma_m32()
62 wdma_set(struct mtk_wed_device *dev, u32 reg, u32 mask) in wdma_set() argument
64 wdma_m32(dev, reg, 0, mask); in wdma_set()
68 mtk_wed_read_reset(struct mtk_wed_device *dev) in mtk_wed_read_reset() argument
70 return wed_r32(dev, MTK_WED_RESET); in mtk_wed_read_reset()
74 mtk_wed_reset(struct mtk_wed_device *dev, u32 mask) in mtk_wed_reset() argument
78 wed_w32(dev, MTK_WED_RESET, mask); in mtk_wed_reset()
79 if (readx_poll_timeout(mtk_wed_read_reset, dev, status, in mtk_wed_reset()
85 mtk_wed_assign(struct mtk_wed_device *dev) in mtk_wed_assign() argument
90 if (dev->wlan.bus_type == MTK_WED_BUS_PCIE) { in mtk_wed_assign()
91 hw = hw_list[pci_domain_nr(dev->wlan.pci_dev->bus)]; in mtk_wed_assign()
113 hw->wed_dev = dev; in mtk_wed_assign()
118 mtk_wed_buffer_alloc(struct mtk_wed_device *dev) in mtk_wed_buffer_alloc() argument
123 int token = dev->wlan.token_start; in mtk_wed_buffer_alloc()
128 ring_size = dev->wlan.nbuf & ~(MTK_WED_BUF_PER_PAGE - 1); in mtk_wed_buffer_alloc()
135 dev->buf_ring.size = ring_size; in mtk_wed_buffer_alloc()
136 dev->buf_ring.pages = page_list; in mtk_wed_buffer_alloc()
138 desc = dma_alloc_coherent(dev->hw->dev, ring_size * sizeof(*desc), in mtk_wed_buffer_alloc()
143 dev->buf_ring.desc = desc; in mtk_wed_buffer_alloc()
144 dev->buf_ring.desc_phys = desc_phys; in mtk_wed_buffer_alloc()
156 page_phys = dma_map_page(dev->hw->dev, page, 0, PAGE_SIZE, in mtk_wed_buffer_alloc()
158 if (dma_mapping_error(dev->hw->dev, page_phys)) { in mtk_wed_buffer_alloc()
164 dma_sync_single_for_cpu(dev->hw->dev, page_phys, PAGE_SIZE, in mtk_wed_buffer_alloc()
174 txd_size = dev->wlan.init_buf(buf, buf_phys, token++); in mtk_wed_buffer_alloc()
179 if (dev->hw->version == 1) in mtk_wed_buffer_alloc()
197 dma_sync_single_for_device(dev->hw->dev, page_phys, PAGE_SIZE, in mtk_wed_buffer_alloc()
205 mtk_wed_free_buffer(struct mtk_wed_device *dev) in mtk_wed_free_buffer() argument
207 struct mtk_wdma_desc *desc = dev->buf_ring.desc; in mtk_wed_free_buffer()
208 void **page_list = dev->buf_ring.pages; in mtk_wed_free_buffer()
218 for (i = 0, page_idx = 0; i < dev->buf_ring.size; i += MTK_WED_BUF_PER_PAGE) { in mtk_wed_free_buffer()
226 dma_unmap_page(dev->hw->dev, buf_addr, PAGE_SIZE, in mtk_wed_free_buffer()
231 dma_free_coherent(dev->hw->dev, dev->buf_ring.size * sizeof(*desc), in mtk_wed_free_buffer()
232 desc, dev->buf_ring.desc_phys); in mtk_wed_free_buffer()
239 mtk_wed_free_ring(struct mtk_wed_device *dev, struct mtk_wed_ring *ring) in mtk_wed_free_ring() argument
244 dma_free_coherent(dev->hw->dev, ring->size * ring->desc_size, in mtk_wed_free_ring()
249 mtk_wed_free_tx_rings(struct mtk_wed_device *dev) in mtk_wed_free_tx_rings() argument
253 for (i = 0; i < ARRAY_SIZE(dev->tx_ring); i++) in mtk_wed_free_tx_rings()
254 mtk_wed_free_ring(dev, &dev->tx_ring[i]); in mtk_wed_free_tx_rings()
255 for (i = 0; i < ARRAY_SIZE(dev->tx_wdma); i++) in mtk_wed_free_tx_rings()
256 mtk_wed_free_ring(dev, &dev->tx_wdma[i]); in mtk_wed_free_tx_rings()
260 mtk_wed_set_ext_int(struct mtk_wed_device *dev, bool en) in mtk_wed_set_ext_int() argument
264 if (dev->hw->version == 1) in mtk_wed_set_ext_int()
272 if (!dev->hw->num_flows) in mtk_wed_set_ext_int()
275 wed_w32(dev, MTK_WED_EXT_INT_MASK, en ? mask : 0); in mtk_wed_set_ext_int()
276 wed_r32(dev, MTK_WED_EXT_INT_MASK); in mtk_wed_set_ext_int()
280 mtk_wed_set_512_support(struct mtk_wed_device *dev, bool enable) in mtk_wed_set_512_support() argument
283 wed_w32(dev, MTK_WED_TXDP_CTRL, MTK_WED_TXDP_DW9_OVERWR); in mtk_wed_set_512_support()
284 wed_w32(dev, MTK_WED_TXP_DW1, in mtk_wed_set_512_support()
287 wed_w32(dev, MTK_WED_TXP_DW1, in mtk_wed_set_512_support()
289 wed_clr(dev, MTK_WED_TXDP_CTRL, MTK_WED_TXDP_DW9_OVERWR); in mtk_wed_set_512_support()
294 mtk_wed_dma_disable(struct mtk_wed_device *dev) in mtk_wed_dma_disable() argument
296 wed_clr(dev, MTK_WED_WPDMA_GLO_CFG, in mtk_wed_dma_disable()
300 wed_clr(dev, MTK_WED_WDMA_GLO_CFG, MTK_WED_WDMA_GLO_CFG_RX_DRV_EN); in mtk_wed_dma_disable()
302 wed_clr(dev, MTK_WED_GLO_CFG, in mtk_wed_dma_disable()
306 wdma_m32(dev, MTK_WDMA_GLO_CFG, in mtk_wed_dma_disable()
311 if (dev->hw->version == 1) { in mtk_wed_dma_disable()
312 regmap_write(dev->hw->mirror, dev->hw->index * 4, 0); in mtk_wed_dma_disable()
313 wdma_m32(dev, MTK_WDMA_GLO_CFG, in mtk_wed_dma_disable()
316 wed_clr(dev, MTK_WED_WPDMA_GLO_CFG, in mtk_wed_dma_disable()
320 mtk_wed_set_512_support(dev, false); in mtk_wed_dma_disable()
325 mtk_wed_stop(struct mtk_wed_device *dev) in mtk_wed_stop() argument
327 mtk_wed_dma_disable(dev); in mtk_wed_stop()
328 mtk_wed_set_ext_int(dev, false); in mtk_wed_stop()
330 wed_clr(dev, MTK_WED_CTRL, in mtk_wed_stop()
335 wed_w32(dev, MTK_WED_WPDMA_INT_TRIGGER, 0); in mtk_wed_stop()
336 wed_w32(dev, MTK_WED_WDMA_INT_TRIGGER, 0); in mtk_wed_stop()
337 wdma_w32(dev, MTK_WDMA_INT_MASK, 0); in mtk_wed_stop()
338 wdma_w32(dev, MTK_WDMA_INT_GRP2, 0); in mtk_wed_stop()
339 wed_w32(dev, MTK_WED_WPDMA_INT_MASK, 0); in mtk_wed_stop()
343 mtk_wed_detach(struct mtk_wed_device *dev) in mtk_wed_detach() argument
345 struct mtk_wed_hw *hw = dev->hw; in mtk_wed_detach()
349 mtk_wed_stop(dev); in mtk_wed_detach()
351 wdma_w32(dev, MTK_WDMA_RESET_IDX, MTK_WDMA_RESET_IDX_RX); in mtk_wed_detach()
352 wdma_w32(dev, MTK_WDMA_RESET_IDX, 0); in mtk_wed_detach()
354 mtk_wed_reset(dev, MTK_WED_RESET_WED); in mtk_wed_detach()
356 mtk_wed_free_buffer(dev); in mtk_wed_detach()
357 mtk_wed_free_tx_rings(dev); in mtk_wed_detach()
359 if (dev->wlan.bus_type == MTK_WED_BUS_PCIE) { in mtk_wed_detach()
362 wlan_node = dev->wlan.pci_dev->dev.of_node; in mtk_wed_detach()
369 hw->eth->dma_dev != hw->eth->dev) in mtk_wed_detach()
370 mtk_eth_set_dma_device(hw->eth, hw->eth->dev); in mtk_wed_detach()
372 memset(dev, 0, sizeof(*dev)); in mtk_wed_detach()
381 mtk_wed_bus_init(struct mtk_wed_device *dev) in mtk_wed_bus_init() argument
383 switch (dev->wlan.bus_type) { in mtk_wed_bus_init()
385 struct device_node *np = dev->hw->eth->dev->of_node; in mtk_wed_bus_init()
395 wed_w32(dev, MTK_WED_PCIE_INT_CTRL, in mtk_wed_bus_init()
399 wed_set(dev, MTK_WED_PCIE_INT_CTRL, in mtk_wed_bus_init()
402 wed_r32(dev, MTK_WED_PCIE_INT_CTRL); in mtk_wed_bus_init()
404 wed_w32(dev, MTK_WED_PCIE_CFG_INTM, PCIE_BASE_ADDR0 | 0x180); in mtk_wed_bus_init()
405 wed_w32(dev, MTK_WED_PCIE_CFG_BASE, PCIE_BASE_ADDR0 | 0x184); in mtk_wed_bus_init()
408 wed_w32(dev, MTK_WED_PCIE_INT_TRIGGER, BIT(24)); in mtk_wed_bus_init()
409 wed_r32(dev, MTK_WED_PCIE_INT_TRIGGER); in mtk_wed_bus_init()
412 wed_set(dev, MTK_WED_PCIE_INT_CTRL, in mtk_wed_bus_init()
417 wed_set(dev, MTK_WED_WPDMA_INT_CTRL, in mtk_wed_bus_init()
427 mtk_wed_set_wpdma(struct mtk_wed_device *dev) in mtk_wed_set_wpdma() argument
429 if (dev->hw->version == 1) { in mtk_wed_set_wpdma()
430 wed_w32(dev, MTK_WED_WPDMA_CFG_BASE, dev->wlan.wpdma_phys); in mtk_wed_set_wpdma()
432 mtk_wed_bus_init(dev); in mtk_wed_set_wpdma()
434 wed_w32(dev, MTK_WED_WPDMA_CFG_BASE, dev->wlan.wpdma_int); in mtk_wed_set_wpdma()
435 wed_w32(dev, MTK_WED_WPDMA_CFG_INT_MASK, dev->wlan.wpdma_mask); in mtk_wed_set_wpdma()
436 wed_w32(dev, MTK_WED_WPDMA_CFG_TX, dev->wlan.wpdma_tx); in mtk_wed_set_wpdma()
437 wed_w32(dev, MTK_WED_WPDMA_CFG_TX_FREE, dev->wlan.wpdma_txfree); in mtk_wed_set_wpdma()
442 mtk_wed_hw_init_early(struct mtk_wed_device *dev) in mtk_wed_hw_init_early() argument
446 mtk_wed_stop(dev); in mtk_wed_hw_init_early()
447 mtk_wed_reset(dev, MTK_WED_RESET_WED); in mtk_wed_hw_init_early()
448 mtk_wed_set_wpdma(dev); in mtk_wed_hw_init_early()
456 wed_m32(dev, MTK_WED_WDMA_GLO_CFG, mask, set); in mtk_wed_hw_init_early()
458 if (dev->hw->version == 1) { in mtk_wed_hw_init_early()
459 u32 offset = dev->hw->index ? 0x04000400 : 0; in mtk_wed_hw_init_early()
461 wdma_set(dev, MTK_WDMA_GLO_CFG, in mtk_wed_hw_init_early()
466 wed_w32(dev, MTK_WED_WDMA_OFFSET0, 0x2a042a20 + offset); in mtk_wed_hw_init_early()
467 wed_w32(dev, MTK_WED_WDMA_OFFSET1, 0x29002800 + offset); in mtk_wed_hw_init_early()
468 wed_w32(dev, MTK_WED_PCIE_CFG_BASE, in mtk_wed_hw_init_early()
469 MTK_PCIE_BASE(dev->hw->index)); in mtk_wed_hw_init_early()
471 wed_w32(dev, MTK_WED_WDMA_CFG_BASE, dev->hw->wdma_phy); in mtk_wed_hw_init_early()
472 wed_set(dev, MTK_WED_CTRL, MTK_WED_CTRL_ETH_DMAD_FMT); in mtk_wed_hw_init_early()
473 wed_w32(dev, MTK_WED_WDMA_OFFSET0, in mtk_wed_hw_init_early()
479 wed_w32(dev, MTK_WED_WDMA_OFFSET1, in mtk_wed_hw_init_early()
488 mtk_wed_hw_init(struct mtk_wed_device *dev) in mtk_wed_hw_init() argument
490 if (dev->init_done) in mtk_wed_hw_init()
493 dev->init_done = true; in mtk_wed_hw_init()
494 mtk_wed_set_ext_int(dev, false); in mtk_wed_hw_init()
495 wed_w32(dev, MTK_WED_TX_BM_CTRL, in mtk_wed_hw_init()
498 dev->buf_ring.size / 128) | in mtk_wed_hw_init()
502 wed_w32(dev, MTK_WED_TX_BM_BASE, dev->buf_ring.desc_phys); in mtk_wed_hw_init()
504 wed_w32(dev, MTK_WED_TX_BM_BUF_LEN, MTK_WED_PKT_SIZE); in mtk_wed_hw_init()
506 if (dev->hw->version == 1) { in mtk_wed_hw_init()
507 wed_w32(dev, MTK_WED_TX_BM_TKID, in mtk_wed_hw_init()
509 dev->wlan.token_start) | in mtk_wed_hw_init()
511 dev->wlan.token_start + in mtk_wed_hw_init()
512 dev->wlan.nbuf - 1)); in mtk_wed_hw_init()
513 wed_w32(dev, MTK_WED_TX_BM_DYN_THR, in mtk_wed_hw_init()
517 wed_w32(dev, MTK_WED_TX_BM_TKID_V2, in mtk_wed_hw_init()
519 dev->wlan.token_start) | in mtk_wed_hw_init()
521 dev->wlan.token_start + in mtk_wed_hw_init()
522 dev->wlan.nbuf - 1)); in mtk_wed_hw_init()
523 wed_w32(dev, MTK_WED_TX_BM_DYN_THR, in mtk_wed_hw_init()
526 wed_w32(dev, MTK_WED_TX_TKID_CTRL, in mtk_wed_hw_init()
529 dev->buf_ring.size / 128) | in mtk_wed_hw_init()
531 dev->buf_ring.size / 128)); in mtk_wed_hw_init()
532 wed_w32(dev, MTK_WED_TX_TKID_DYN_THR, in mtk_wed_hw_init()
537 mtk_wed_reset(dev, MTK_WED_RESET_TX_BM); in mtk_wed_hw_init()
539 if (dev->hw->version == 1) in mtk_wed_hw_init()
540 wed_set(dev, MTK_WED_CTRL, in mtk_wed_hw_init()
544 wed_clr(dev, MTK_WED_TX_TKID_CTRL, MTK_WED_TX_TKID_CTRL_PAUSE); in mtk_wed_hw_init()
546 wed_clr(dev, MTK_WED_TX_BM_CTRL, MTK_WED_TX_BM_CTRL_PAUSE); in mtk_wed_hw_init()
567 mtk_wed_check_busy(struct mtk_wed_device *dev) in mtk_wed_check_busy() argument
569 if (wed_r32(dev, MTK_WED_GLO_CFG) & MTK_WED_GLO_CFG_TX_DMA_BUSY) in mtk_wed_check_busy()
572 if (wed_r32(dev, MTK_WED_WPDMA_GLO_CFG) & in mtk_wed_check_busy()
576 if (wed_r32(dev, MTK_WED_CTRL) & MTK_WED_CTRL_WDMA_INT_AGENT_BUSY) in mtk_wed_check_busy()
579 if (wed_r32(dev, MTK_WED_WDMA_GLO_CFG) & in mtk_wed_check_busy()
583 if (wdma_r32(dev, MTK_WDMA_GLO_CFG) & in mtk_wed_check_busy()
587 if (wed_r32(dev, MTK_WED_CTRL) & in mtk_wed_check_busy()
595 mtk_wed_poll_busy(struct mtk_wed_device *dev) in mtk_wed_poll_busy() argument
602 timeout, false, dev); in mtk_wed_poll_busy()
606 mtk_wed_reset_dma(struct mtk_wed_device *dev) in mtk_wed_reset_dma() argument
612 for (i = 0; i < ARRAY_SIZE(dev->tx_ring); i++) { in mtk_wed_reset_dma()
613 if (!dev->tx_ring[i].desc) in mtk_wed_reset_dma()
616 mtk_wed_ring_reset(&dev->tx_ring[i], MTK_WED_TX_RING_SIZE); in mtk_wed_reset_dma()
619 if (mtk_wed_poll_busy(dev)) in mtk_wed_reset_dma()
620 busy = mtk_wed_check_busy(dev); in mtk_wed_reset_dma()
623 mtk_wed_reset(dev, MTK_WED_RESET_WED_TX_DMA); in mtk_wed_reset_dma()
625 wed_w32(dev, MTK_WED_RESET_IDX, in mtk_wed_reset_dma()
628 wed_w32(dev, MTK_WED_RESET_IDX, 0); in mtk_wed_reset_dma()
631 wdma_w32(dev, MTK_WDMA_RESET_IDX, MTK_WDMA_RESET_IDX_RX); in mtk_wed_reset_dma()
632 wdma_w32(dev, MTK_WDMA_RESET_IDX, 0); in mtk_wed_reset_dma()
635 mtk_wed_reset(dev, MTK_WED_RESET_WDMA_INT_AGENT); in mtk_wed_reset_dma()
636 mtk_wed_reset(dev, MTK_WED_RESET_WDMA_RX_DRV); in mtk_wed_reset_dma()
638 wed_w32(dev, MTK_WED_WDMA_RESET_IDX, in mtk_wed_reset_dma()
640 wed_w32(dev, MTK_WED_WDMA_RESET_IDX, 0); in mtk_wed_reset_dma()
642 wed_set(dev, MTK_WED_WDMA_GLO_CFG, in mtk_wed_reset_dma()
645 wed_clr(dev, MTK_WED_WDMA_GLO_CFG, in mtk_wed_reset_dma()
650 val = wed_r32(dev, MTK_WED_TX_BM_INTF); in mtk_wed_reset_dma()
655 mtk_wed_reset(dev, MTK_WED_RESET_TX_FREE_AGENT); in mtk_wed_reset_dma()
656 mtk_wed_reset(dev, MTK_WED_RESET_TX_BM); in mtk_wed_reset_dma()
659 mtk_wed_reset(dev, MTK_WED_RESET_WPDMA_INT_AGENT); in mtk_wed_reset_dma()
660 mtk_wed_reset(dev, MTK_WED_RESET_WPDMA_TX_DRV); in mtk_wed_reset_dma()
661 mtk_wed_reset(dev, MTK_WED_RESET_WPDMA_RX_DRV); in mtk_wed_reset_dma()
663 wed_w32(dev, MTK_WED_WPDMA_RESET_IDX, in mtk_wed_reset_dma()
666 wed_w32(dev, MTK_WED_WPDMA_RESET_IDX, 0); in mtk_wed_reset_dma()
672 mtk_wed_ring_alloc(struct mtk_wed_device *dev, struct mtk_wed_ring *ring, in mtk_wed_ring_alloc() argument
675 ring->desc = dma_alloc_coherent(dev->hw->dev, size * desc_size, in mtk_wed_ring_alloc()
688 mtk_wed_wdma_ring_setup(struct mtk_wed_device *dev, int idx, int size) in mtk_wed_wdma_ring_setup() argument
690 u32 desc_size = sizeof(struct mtk_wdma_desc) * dev->hw->version; in mtk_wed_wdma_ring_setup()
691 struct mtk_wed_ring *wdma = &dev->tx_wdma[idx]; in mtk_wed_wdma_ring_setup()
693 if (mtk_wed_ring_alloc(dev, wdma, MTK_WED_WDMA_RING_SIZE, desc_size)) in mtk_wed_wdma_ring_setup()
696 wdma_w32(dev, MTK_WDMA_RING_RX(idx) + MTK_WED_RING_OFS_BASE, in mtk_wed_wdma_ring_setup()
698 wdma_w32(dev, MTK_WDMA_RING_RX(idx) + MTK_WED_RING_OFS_COUNT, in mtk_wed_wdma_ring_setup()
700 wdma_w32(dev, MTK_WDMA_RING_RX(idx) + MTK_WED_RING_OFS_CPU_IDX, 0); in mtk_wed_wdma_ring_setup()
702 wed_w32(dev, MTK_WED_WDMA_RING_RX(idx) + MTK_WED_RING_OFS_BASE, in mtk_wed_wdma_ring_setup()
704 wed_w32(dev, MTK_WED_WDMA_RING_RX(idx) + MTK_WED_RING_OFS_COUNT, in mtk_wed_wdma_ring_setup()
711 mtk_wed_configure_irq(struct mtk_wed_device *dev, u32 irq_mask) in mtk_wed_configure_irq() argument
716 wed_set(dev, MTK_WED_CTRL, in mtk_wed_configure_irq()
722 if (dev->hw->version == 1) { in mtk_wed_configure_irq()
723 wed_w32(dev, MTK_WED_PCIE_INT_TRIGGER, in mtk_wed_configure_irq()
726 wed_w32(dev, MTK_WED_WPDMA_INT_TRIGGER, in mtk_wed_configure_irq()
730 wed_clr(dev, MTK_WED_WDMA_INT_CTRL, wdma_mask); in mtk_wed_configure_irq()
733 wed_w32(dev, MTK_WED_WPDMA_INT_CTRL_TX, in mtk_wed_configure_irq()
739 dev->wlan.tx_tbit[0]) | in mtk_wed_configure_irq()
741 dev->wlan.tx_tbit[1])); in mtk_wed_configure_irq()
744 wed_w32(dev, MTK_WED_WPDMA_INT_CTRL_TX_FREE, in mtk_wed_configure_irq()
748 dev->wlan.txfree_tbit)); in mtk_wed_configure_irq()
750 wed_w32(dev, MTK_WED_WDMA_INT_CLR, wdma_mask); in mtk_wed_configure_irq()
751 wed_set(dev, MTK_WED_WDMA_INT_CTRL, in mtk_wed_configure_irq()
753 dev->wdma_idx)); in mtk_wed_configure_irq()
756 wed_w32(dev, MTK_WED_WDMA_INT_TRIGGER, wdma_mask); in mtk_wed_configure_irq()
758 wdma_w32(dev, MTK_WDMA_INT_MASK, wdma_mask); in mtk_wed_configure_irq()
759 wdma_w32(dev, MTK_WDMA_INT_GRP2, wdma_mask); in mtk_wed_configure_irq()
760 wed_w32(dev, MTK_WED_WPDMA_INT_MASK, irq_mask); in mtk_wed_configure_irq()
761 wed_w32(dev, MTK_WED_INT_MASK, irq_mask); in mtk_wed_configure_irq()
765 mtk_wed_dma_enable(struct mtk_wed_device *dev) in mtk_wed_dma_enable() argument
767 wed_set(dev, MTK_WED_WPDMA_INT_CTRL, MTK_WED_WPDMA_INT_CTRL_SUBRT_ADV); in mtk_wed_dma_enable()
769 wed_set(dev, MTK_WED_GLO_CFG, in mtk_wed_dma_enable()
772 wed_set(dev, MTK_WED_WPDMA_GLO_CFG, in mtk_wed_dma_enable()
775 wed_set(dev, MTK_WED_WDMA_GLO_CFG, in mtk_wed_dma_enable()
778 wdma_set(dev, MTK_WDMA_GLO_CFG, in mtk_wed_dma_enable()
783 if (dev->hw->version == 1) { in mtk_wed_dma_enable()
784 wdma_set(dev, MTK_WDMA_GLO_CFG, in mtk_wed_dma_enable()
787 wed_set(dev, MTK_WED_WPDMA_CTRL, in mtk_wed_dma_enable()
790 wed_set(dev, MTK_WED_WPDMA_GLO_CFG, in mtk_wed_dma_enable()
794 wed_clr(dev, MTK_WED_WPDMA_GLO_CFG, in mtk_wed_dma_enable()
801 mtk_wed_start(struct mtk_wed_device *dev, u32 irq_mask) in mtk_wed_start() argument
805 for (i = 0; i < ARRAY_SIZE(dev->tx_wdma); i++) in mtk_wed_start()
806 if (!dev->tx_wdma[i].desc) in mtk_wed_start()
807 mtk_wed_wdma_ring_setup(dev, i, 16); in mtk_wed_start()
809 mtk_wed_hw_init(dev); in mtk_wed_start()
810 mtk_wed_configure_irq(dev, irq_mask); in mtk_wed_start()
812 mtk_wed_set_ext_int(dev, true); in mtk_wed_start()
814 if (dev->hw->version == 1) { in mtk_wed_start()
815 u32 val = dev->wlan.wpdma_phys | MTK_PCIE_MIRROR_MAP_EN | in mtk_wed_start()
817 dev->hw->index); in mtk_wed_start()
819 val |= BIT(0) | (BIT(1) * !!dev->hw->index); in mtk_wed_start()
820 regmap_write(dev->hw->mirror, dev->hw->index * 4, val); in mtk_wed_start()
822 mtk_wed_set_512_support(dev, true); in mtk_wed_start()
825 mtk_wed_dma_enable(dev); in mtk_wed_start()
826 dev->running = true; in mtk_wed_start()
830 mtk_wed_attach(struct mtk_wed_device *dev) in mtk_wed_attach() argument
840 if ((dev->wlan.bus_type == MTK_WED_BUS_PCIE && in mtk_wed_attach()
841 pci_domain_nr(dev->wlan.pci_dev->bus) > 1) || in mtk_wed_attach()
852 hw = mtk_wed_assign(dev); in mtk_wed_attach()
859 device = dev->wlan.bus_type == MTK_WED_BUS_PCIE in mtk_wed_attach()
860 ? &dev->wlan.pci_dev->dev in mtk_wed_attach()
861 : &dev->wlan.platform_dev->dev; in mtk_wed_attach()
865 dev->hw = hw; in mtk_wed_attach()
866 dev->dev = hw->dev; in mtk_wed_attach()
867 dev->irq = hw->irq; in mtk_wed_attach()
868 dev->wdma_idx = hw->index; in mtk_wed_attach()
870 if (hw->eth->dma_dev == hw->eth->dev && in mtk_wed_attach()
871 of_dma_is_coherent(hw->eth->dev->of_node)) in mtk_wed_attach()
872 mtk_eth_set_dma_device(hw->eth, hw->dev); in mtk_wed_attach()
874 ret = mtk_wed_buffer_alloc(dev); in mtk_wed_attach()
876 mtk_wed_detach(dev); in mtk_wed_attach()
880 mtk_wed_hw_init_early(dev); in mtk_wed_attach()
892 mtk_wed_tx_ring_setup(struct mtk_wed_device *dev, int idx, void __iomem *regs) in mtk_wed_tx_ring_setup() argument
894 struct mtk_wed_ring *ring = &dev->tx_ring[idx]; in mtk_wed_tx_ring_setup()
908 BUG_ON(idx >= ARRAY_SIZE(dev->tx_ring)); in mtk_wed_tx_ring_setup()
910 if (mtk_wed_ring_alloc(dev, ring, MTK_WED_TX_RING_SIZE, in mtk_wed_tx_ring_setup()
914 if (mtk_wed_wdma_ring_setup(dev, idx, MTK_WED_WDMA_RING_SIZE)) in mtk_wed_tx_ring_setup()
921 wpdma_tx_w32(dev, idx, MTK_WED_RING_OFS_BASE, ring->desc_phys); in mtk_wed_tx_ring_setup()
922 wpdma_tx_w32(dev, idx, MTK_WED_RING_OFS_COUNT, MTK_WED_TX_RING_SIZE); in mtk_wed_tx_ring_setup()
923 wpdma_tx_w32(dev, idx, MTK_WED_RING_OFS_CPU_IDX, 0); in mtk_wed_tx_ring_setup()
925 wed_w32(dev, MTK_WED_WPDMA_RING_TX(idx) + MTK_WED_RING_OFS_BASE, in mtk_wed_tx_ring_setup()
927 wed_w32(dev, MTK_WED_WPDMA_RING_TX(idx) + MTK_WED_RING_OFS_COUNT, in mtk_wed_tx_ring_setup()
929 wed_w32(dev, MTK_WED_WPDMA_RING_TX(idx) + MTK_WED_RING_OFS_CPU_IDX, 0); in mtk_wed_tx_ring_setup()
935 mtk_wed_txfree_ring_setup(struct mtk_wed_device *dev, void __iomem *regs) in mtk_wed_txfree_ring_setup() argument
937 struct mtk_wed_ring *ring = &dev->txfree_ring; in mtk_wed_txfree_ring_setup()
938 int i, index = dev->hw->version == 1; in mtk_wed_txfree_ring_setup()
951 wed_w32(dev, MTK_WED_RING_RX(index) + i, val); in mtk_wed_txfree_ring_setup()
952 wed_w32(dev, MTK_WED_WPDMA_RING_RX(index) + i, val); in mtk_wed_txfree_ring_setup()
959 mtk_wed_irq_get(struct mtk_wed_device *dev, u32 mask) in mtk_wed_irq_get() argument
963 if (dev->hw->version == 1) in mtk_wed_irq_get()
971 val = wed_r32(dev, MTK_WED_EXT_INT_STATUS); in mtk_wed_irq_get()
972 wed_w32(dev, MTK_WED_EXT_INT_STATUS, val); in mtk_wed_irq_get()
974 if (!dev->hw->num_flows) in mtk_wed_irq_get()
977 pr_err("mtk_wed%d: error status=%08x\n", dev->hw->index, val); in mtk_wed_irq_get()
979 val = wed_r32(dev, MTK_WED_INT_STATUS); in mtk_wed_irq_get()
981 wed_w32(dev, MTK_WED_INT_STATUS, val); /* ACK */ in mtk_wed_irq_get()
987 mtk_wed_irq_set_mask(struct mtk_wed_device *dev, u32 mask) in mtk_wed_irq_set_mask() argument
989 if (!dev->running) in mtk_wed_irq_set_mask()
992 mtk_wed_set_ext_int(dev, !!mask); in mtk_wed_irq_set_mask()
993 wed_w32(dev, MTK_WED_INT_MASK, mask); in mtk_wed_irq_set_mask()
1064 struct device_node *eth_np = eth->dev->of_node; in mtk_wed_add_hw()
1077 get_device(&pdev->dev); in mtk_wed_add_hw()
1100 hw->dev = &pdev->dev; in mtk_wed_add_hw()
1134 put_device(&pdev->dev); in mtk_wed_add_hw()
1156 put_device(hw->dev); in mtk_wed_exit()