Lines Matching +full:ethernet +full:- +full:pse

1 // SPDX-License-Identifier: ISC
18 MODULE_PARM_DESC(wed_enable, "Enable Wireless Ethernet Dispatch support");
283 { 0x820c8000, 0x0c000, 0x02000 }, /* WF_UMAC_TOP (PSE) */
323 { 0x820c8000, 0x0c000, 0x02000 }, /* WF_UMAC_TOP (PSE) */
370 { 0x820c8000, 0x40c000, 0x02000 }, /* WF_UMAC_TOP (PSE) */
420 if (is_mt798x(&dev->mt76)) in mt7915_reg_map_l1()
423 l1_remap = is_mt7915(&dev->mt76) ? in mt7915_reg_map_l1()
426 dev->bus_ops->rmw(&dev->mt76, l1_remap, in mt7915_reg_map_l1()
430 dev->bus_ops->rr(&dev->mt76, l1_remap); in mt7915_reg_map_l1()
439 if (is_mt7915(&dev->mt76)) { in mt7915_reg_map_l2()
443 dev->bus_ops->rmw(&dev->mt76, MT_HIF_REMAP_L2, in mt7915_reg_map_l2()
448 dev->bus_ops->rr(&dev->mt76, MT_HIF_REMAP_L2); in mt7915_reg_map_l2()
450 u32 ofs = is_mt798x(&dev->mt76) ? 0x400000 : 0; in mt7915_reg_map_l2()
455 dev->bus_ops->rmw(&dev->mt76, MT_HIF_REMAP_L2_MT7916 + ofs, in mt7915_reg_map_l2()
460 dev->bus_ops->rr(&dev->mt76, MT_HIF_REMAP_L2_MT7916 + ofs); in mt7915_reg_map_l2()
475 if (!dev->reg.map) { in __mt7915_reg_addr()
476 dev_err(dev->mt76.dev, "err: reg_map is null\n"); in __mt7915_reg_addr()
480 for (i = 0; i < dev->reg.map_size; i++) { in __mt7915_reg_addr()
483 if (addr < dev->reg.map[i].phys) in __mt7915_reg_addr()
486 ofs = addr - dev->reg.map[i].phys; in __mt7915_reg_addr()
487 if (ofs > dev->reg.map[i].size) in __mt7915_reg_addr()
490 return dev->reg.map[i].maps + ofs; in __mt7915_reg_addr()
498 if (dev_is_pci(dev->mt76.dev) && in __mt7915_reg_addr()
505 addr = addr - MT_INFRA_MCU_START + MT_INFRA_BASE; in __mt7915_reg_addr()
518 memcpy_fromio(buf, dev->mt76.mmio.regs + addr, len); in mt7915_memcpy_fromio()
520 memcpy_fromio(buf, (u8 *)dev->mt76.mmio.regs + addr, len); in mt7915_memcpy_fromio()
529 return dev->bus_ops->rr(mdev, addr); in mt7915_rr()
537 dev->bus_ops->wr(mdev, addr, val); in mt7915_wr()
545 return dev->bus_ops->rmw(mdev, addr, mask, val); in mt7915_rmw()
555 spin_lock_bh(&dev->mt76.token_lock); in mt7915_mmio_wed_offload_enable()
556 dev->mt76.token_size = wed->wlan.token_start; in mt7915_mmio_wed_offload_enable()
557 spin_unlock_bh(&dev->mt76.token_lock); in mt7915_mmio_wed_offload_enable()
559 return !wait_event_timeout(dev->mt76.tx_wait, in mt7915_mmio_wed_offload_enable()
560 !dev->mt76.wed_token_count, HZ); in mt7915_mmio_wed_offload_enable()
569 spin_lock_bh(&dev->mt76.token_lock); in mt7915_mmio_wed_offload_disable()
570 dev->mt76.token_size = MT7915_TOKEN_SIZE; in mt7915_mmio_wed_offload_disable()
571 spin_unlock_bh(&dev->mt76.token_lock); in mt7915_mmio_wed_offload_disable()
580 for (i = 0; i < dev->mt76.rx_token_size; i++) { in mt7915_mmio_wed_release_rx_buf()
583 t = mt76_rx_token_release(&dev->mt76, i); in mt7915_mmio_wed_release_rx_buf()
584 if (!t || !t->ptr) in mt7915_mmio_wed_release_rx_buf()
587 mt76_put_page_pool_buf(t->ptr, false); in mt7915_mmio_wed_release_rx_buf()
588 t->ptr = NULL; in mt7915_mmio_wed_release_rx_buf()
590 mt76_put_rxwi(&dev->mt76, t); in mt7915_mmio_wed_release_rx_buf()
593 mt76_free_pending_rxwi(&dev->mt76); in mt7915_mmio_wed_release_rx_buf()
598 struct mtk_rxbm_desc *desc = wed->rx_buf_ring.desc; in mt7915_mmio_wed_init_rx_buf()
605 q = &dev->mt76.q_rx[MT_RXQ_MAIN]; in mt7915_mmio_wed_init_rx_buf()
606 len = SKB_WITH_OVERHEAD(q->buf_size); in mt7915_mmio_wed_init_rx_buf()
615 t = mt76_get_rxwi(&dev->mt76); in mt7915_mmio_wed_init_rx_buf()
619 buf = mt76_get_page_pool_buf(q, &offset, q->buf_size); in mt7915_mmio_wed_init_rx_buf()
624 dir = page_pool_get_dma_dir(q->page_pool); in mt7915_mmio_wed_init_rx_buf()
625 dma_sync_single_for_device(dev->mt76.dma_dev, addr, len, dir); in mt7915_mmio_wed_init_rx_buf()
627 desc->buf0 = cpu_to_le32(addr); in mt7915_mmio_wed_init_rx_buf()
628 token = mt76_rx_token_consume(&dev->mt76, buf, t, addr); in mt7915_mmio_wed_init_rx_buf()
634 desc->token |= cpu_to_le32(FIELD_PREP(MT_DMA_CTL_TOKEN, in mt7915_mmio_wed_init_rx_buf()
643 mt76_put_rxwi(&dev->mt76, t); in mt7915_mmio_wed_init_rx_buf()
645 return -ENOMEM; in mt7915_mmio_wed_init_rx_buf()
651 int idx = le16_to_cpu(stats->wlan_idx); in mt7915_mmio_wed_update_rx_stats()
662 wcid = rcu_dereference(dev->mt76.wcid[idx]); in mt7915_mmio_wed_update_rx_stats()
664 wcid->stats.rx_bytes += le32_to_cpu(stats->rx_byte_cnt); in mt7915_mmio_wed_update_rx_stats()
665 wcid->stats.rx_packets += le32_to_cpu(stats->rx_pkt_cnt); in mt7915_mmio_wed_update_rx_stats()
666 wcid->stats.rx_errors += le32_to_cpu(stats->rx_err_cnt); in mt7915_mmio_wed_update_rx_stats()
667 wcid->stats.rx_drops += le32_to_cpu(stats->rx_drop_cnt); in mt7915_mmio_wed_update_rx_stats()
677 struct mt76_phy *mphy = &dev->mphy; in mt7915_mmio_wed_reset()
682 if (test_and_set_bit(MT76_STATE_WED_RESET, &mphy->state)) in mt7915_mmio_wed_reset()
683 return -EBUSY; in mt7915_mmio_wed_reset()
686 mphy->band_idx); in mt7915_mmio_wed_reset()
691 if (!wait_for_completion_timeout(&mdev->mmio.wed_reset, 20 * HZ)) { in mt7915_mmio_wed_reset()
692 dev_err(mdev->dev, "wed reset timeout\n"); in mt7915_mmio_wed_reset()
693 ret = -ETIMEDOUT; in mt7915_mmio_wed_reset()
697 clear_bit(MT76_STATE_WED_RESET, &mphy->state); in mt7915_mmio_wed_reset()
706 complete(&dev->mmio.wed_reset_complete); in mt7915_mmio_wed_reset_complete()
714 struct mtk_wed_device *wed = &dev->mt76.mmio.wed; in mt7915_mmio_wed_init()
723 wed->wlan.pci_dev = pci_dev; in mt7915_mmio_wed_init()
724 wed->wlan.bus_type = MTK_WED_BUS_PCIE; in mt7915_mmio_wed_init()
725 wed->wlan.base = devm_ioremap(dev->mt76.dev, in mt7915_mmio_wed_init()
728 wed->wlan.phy_base = pci_resource_start(pci_dev, 0); in mt7915_mmio_wed_init()
729 wed->wlan.wpdma_int = pci_resource_start(pci_dev, 0) + in mt7915_mmio_wed_init()
731 wed->wlan.wpdma_mask = pci_resource_start(pci_dev, 0) + in mt7915_mmio_wed_init()
733 wed->wlan.wpdma_phys = pci_resource_start(pci_dev, 0) + in mt7915_mmio_wed_init()
735 wed->wlan.wpdma_tx = pci_resource_start(pci_dev, 0) + in mt7915_mmio_wed_init()
737 wed->wlan.wpdma_txfree = pci_resource_start(pci_dev, 0) + in mt7915_mmio_wed_init()
739 wed->wlan.wpdma_rx_glo = pci_resource_start(pci_dev, 0) + in mt7915_mmio_wed_init()
741 wed->wlan.wpdma_rx = pci_resource_start(pci_dev, 0) + in mt7915_mmio_wed_init()
749 return -ENOMEM; in mt7915_mmio_wed_init()
751 wed->wlan.platform_dev = plat_dev; in mt7915_mmio_wed_init()
752 wed->wlan.bus_type = MTK_WED_BUS_AXI; in mt7915_mmio_wed_init()
753 wed->wlan.base = devm_ioremap(dev->mt76.dev, res->start, in mt7915_mmio_wed_init()
755 wed->wlan.phy_base = res->start; in mt7915_mmio_wed_init()
756 wed->wlan.wpdma_int = res->start + MT_INT_SOURCE_CSR; in mt7915_mmio_wed_init()
757 wed->wlan.wpdma_mask = res->start + MT_INT_MASK_CSR; in mt7915_mmio_wed_init()
758 wed->wlan.wpdma_tx = res->start + MT_TXQ_WED_RING_BASE; in mt7915_mmio_wed_init()
759 wed->wlan.wpdma_txfree = res->start + MT_RXQ_WED_RING_BASE; in mt7915_mmio_wed_init()
760 wed->wlan.wpdma_rx_glo = res->start + MT_WPDMA_GLO_CFG; in mt7915_mmio_wed_init()
761 wed->wlan.wpdma_rx = res->start + MT_RXQ_WED_DATA_RING_BASE; in mt7915_mmio_wed_init()
763 wed->wlan.nbuf = MT7915_HW_TOKEN_SIZE; in mt7915_mmio_wed_init()
764 wed->wlan.tx_tbit[0] = is_mt7915(&dev->mt76) ? 4 : 30; in mt7915_mmio_wed_init()
765 wed->wlan.tx_tbit[1] = is_mt7915(&dev->mt76) ? 5 : 31; in mt7915_mmio_wed_init()
766 wed->wlan.txfree_tbit = is_mt798x(&dev->mt76) ? 2 : 1; in mt7915_mmio_wed_init()
767 wed->wlan.token_start = MT7915_TOKEN_SIZE - wed->wlan.nbuf; in mt7915_mmio_wed_init()
768 wed->wlan.wcid_512 = !is_mt7915(&dev->mt76); in mt7915_mmio_wed_init()
770 wed->wlan.rx_nbuf = 65536; in mt7915_mmio_wed_init()
771 wed->wlan.rx_npkt = MT7915_WED_RX_TOKEN_SIZE; in mt7915_mmio_wed_init()
772 wed->wlan.rx_size = SKB_WITH_OVERHEAD(MT_RX_BUF_SIZE); in mt7915_mmio_wed_init()
773 if (is_mt7915(&dev->mt76)) { in mt7915_mmio_wed_init()
774 wed->wlan.rx_tbit[0] = 16; in mt7915_mmio_wed_init()
775 wed->wlan.rx_tbit[1] = 17; in mt7915_mmio_wed_init()
776 } else if (is_mt798x(&dev->mt76)) { in mt7915_mmio_wed_init()
777 wed->wlan.rx_tbit[0] = 22; in mt7915_mmio_wed_init()
778 wed->wlan.rx_tbit[1] = 23; in mt7915_mmio_wed_init()
780 wed->wlan.rx_tbit[0] = 18; in mt7915_mmio_wed_init()
781 wed->wlan.rx_tbit[1] = 19; in mt7915_mmio_wed_init()
784 wed->wlan.init_buf = mt7915_wed_init_buf; in mt7915_mmio_wed_init()
785 wed->wlan.offload_enable = mt7915_mmio_wed_offload_enable; in mt7915_mmio_wed_init()
786 wed->wlan.offload_disable = mt7915_mmio_wed_offload_disable; in mt7915_mmio_wed_init()
787 wed->wlan.init_rx_buf = mt7915_mmio_wed_init_rx_buf; in mt7915_mmio_wed_init()
788 wed->wlan.release_rx_buf = mt7915_mmio_wed_release_rx_buf; in mt7915_mmio_wed_init()
789 wed->wlan.update_wo_rx_stats = mt7915_mmio_wed_update_rx_stats; in mt7915_mmio_wed_init()
790 wed->wlan.reset = mt7915_mmio_wed_reset; in mt7915_mmio_wed_init()
791 wed->wlan.reset_complete = mt7915_mmio_wed_reset_complete; in mt7915_mmio_wed_init()
793 dev->mt76.rx_token_size = wed->wlan.rx_npkt; in mt7915_mmio_wed_init()
798 *irq = wed->irq; in mt7915_mmio_wed_init()
799 dev->mt76.dma_dev = wed->dev; in mt7915_mmio_wed_init()
801 ret = dma_set_mask(wed->dev, DMA_BIT_MASK(32)); in mt7915_mmio_wed_init()
819 mt76_mmio_init(&dev->mt76, mem_base); in mt7915_mmio_init()
823 dev->reg.reg_rev = mt7915_reg; in mt7915_mmio_init()
824 dev->reg.offs_rev = mt7915_offs; in mt7915_mmio_init()
825 dev->reg.map = mt7915_reg_map; in mt7915_mmio_init()
826 dev->reg.map_size = ARRAY_SIZE(mt7915_reg_map); in mt7915_mmio_init()
829 dev->reg.reg_rev = mt7916_reg; in mt7915_mmio_init()
830 dev->reg.offs_rev = mt7916_offs; in mt7915_mmio_init()
831 dev->reg.map = mt7916_reg_map; in mt7915_mmio_init()
832 dev->reg.map_size = ARRAY_SIZE(mt7916_reg_map); in mt7915_mmio_init()
836 dev->reg.reg_rev = mt7986_reg; in mt7915_mmio_init()
837 dev->reg.offs_rev = mt7916_offs; in mt7915_mmio_init()
838 dev->reg.map = mt7986_reg_map; in mt7915_mmio_init()
839 dev->reg.map_size = ARRAY_SIZE(mt7986_reg_map); in mt7915_mmio_init()
842 return -EINVAL; in mt7915_mmio_init()
845 dev->bus_ops = dev->mt76.bus; in mt7915_mmio_init()
846 bus_ops = devm_kmemdup(dev->mt76.dev, dev->bus_ops, sizeof(*bus_ops), in mt7915_mmio_init()
849 return -ENOMEM; in mt7915_mmio_init()
851 bus_ops->rr = mt7915_rr; in mt7915_mmio_init()
852 bus_ops->wr = mt7915_wr; in mt7915_mmio_init()
853 bus_ops->rmw = mt7915_rmw; in mt7915_mmio_init()
854 dev->mt76.bus = bus_ops; in mt7915_mmio_init()
856 mdev->rev = (device_id << 16) | in mt7915_mmio_init()
858 dev_dbg(mdev->dev, "ASIC revision: %04x\n", mdev->rev); in mt7915_mmio_init()
867 struct mt76_dev *mdev = &dev->mt76; in mt7915_dual_hif_set_irq_mask()
870 spin_lock_irqsave(&mdev->mmio.irq_lock, flags); in mt7915_dual_hif_set_irq_mask()
872 mdev->mmio.irqmask &= ~clear; in mt7915_dual_hif_set_irq_mask()
873 mdev->mmio.irqmask |= set; in mt7915_dual_hif_set_irq_mask()
876 if (mtk_wed_device_active(&mdev->mmio.wed)) in mt7915_dual_hif_set_irq_mask()
877 mtk_wed_device_irq_set_mask(&mdev->mmio.wed, in mt7915_dual_hif_set_irq_mask()
878 mdev->mmio.irqmask); in mt7915_dual_hif_set_irq_mask()
880 mt76_wr(dev, MT_INT_MASK_CSR, mdev->mmio.irqmask); in mt7915_dual_hif_set_irq_mask()
881 mt76_wr(dev, MT_INT1_MASK_CSR, mdev->mmio.irqmask); in mt7915_dual_hif_set_irq_mask()
884 spin_unlock_irqrestore(&mdev->mmio.irq_lock, flags); in mt7915_dual_hif_set_irq_mask()
895 /* TODO: support 2/4/6/8 MSI-X vectors */
899 struct mtk_wed_device *wed = &dev->mt76.mmio.wed; in mt7915_irq_tasklet()
904 if (dev->hif2) in mt7915_irq_tasklet()
906 intr = mtk_wed_device_irq_get(wed, dev->mt76.mmio.irqmask); in mt7915_irq_tasklet()
909 if (dev->hif2) in mt7915_irq_tasklet()
913 intr &= dev->mt76.mmio.irqmask; in mt7915_irq_tasklet()
917 if (dev->hif2) { in mt7915_irq_tasklet()
919 intr1 &= dev->mt76.mmio.irqmask; in mt7915_irq_tasklet()
925 trace_dev_irq(&dev->mt76, intr, dev->mt76.mmio.irqmask); in mt7915_irq_tasklet()
934 napi_schedule(&dev->mt76.tx_napi); in mt7915_irq_tasklet()
937 napi_schedule(&dev->mt76.napi[MT_RXQ_MAIN]); in mt7915_irq_tasklet()
940 napi_schedule(&dev->mt76.napi[MT_RXQ_BAND1]); in mt7915_irq_tasklet()
943 napi_schedule(&dev->mt76.napi[MT_RXQ_MCU]); in mt7915_irq_tasklet()
946 napi_schedule(&dev->mt76.napi[MT_RXQ_MCU_WA]); in mt7915_irq_tasklet()
948 if (!is_mt7915(&dev->mt76) && in mt7915_irq_tasklet()
950 napi_schedule(&dev->mt76.napi[MT_RXQ_MAIN_WA]); in mt7915_irq_tasklet()
953 napi_schedule(&dev->mt76.napi[MT_RXQ_BAND1_WA]); in mt7915_irq_tasklet()
960 dev->recovery.state = val; in mt7915_irq_tasklet()
969 struct mtk_wed_device *wed = &dev->mt76.mmio.wed; in mt7915_irq_handler()
976 if (dev->hif2) in mt7915_irq_handler()
979 if (!test_bit(MT76_STATE_INITIALIZED, &dev->mphy.state)) in mt7915_irq_handler()
982 tasklet_schedule(&dev->mt76.irq_tasklet); in mt7915_irq_handler()
1014 return ERR_PTR(-ENOMEM); in mt7915_mmio_probe()
1022 tasklet_setup(&mdev->irq_tasklet, mt7915_irq_tasklet); in mt7915_mmio_probe()
1027 mt76_free_device(&dev->mt76); in mt7915_mmio_probe()