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()
517 memcpy_fromio(buf, dev->mt76.mmio.regs + addr, len); in mt7915_memcpy_fromio()
525 return dev->bus_ops->rr(mdev, addr); in mt7915_rr()
533 dev->bus_ops->wr(mdev, addr, val); in mt7915_wr()
541 return dev->bus_ops->rmw(mdev, addr, mask, val); in mt7915_rmw()
548 int idx = le16_to_cpu(stats->wlan_idx); in mt7915_mmio_wed_update_rx_stats()
559 wcid = rcu_dereference(dev->mt76.wcid[idx]); in mt7915_mmio_wed_update_rx_stats()
561 wcid->stats.rx_bytes += le32_to_cpu(stats->rx_byte_cnt); in mt7915_mmio_wed_update_rx_stats()
562 wcid->stats.rx_packets += le32_to_cpu(stats->rx_pkt_cnt); in mt7915_mmio_wed_update_rx_stats()
563 wcid->stats.rx_errors += le32_to_cpu(stats->rx_err_cnt); in mt7915_mmio_wed_update_rx_stats()
564 wcid->stats.rx_drops += le32_to_cpu(stats->rx_drop_cnt); in mt7915_mmio_wed_update_rx_stats()
574 struct mt76_phy *mphy = &dev->mphy; in mt7915_mmio_wed_reset()
579 if (test_and_set_bit(MT76_STATE_WED_RESET, &mphy->state)) in mt7915_mmio_wed_reset()
580 return -EBUSY; in mt7915_mmio_wed_reset()
583 mphy->band_idx); in mt7915_mmio_wed_reset()
588 if (!wait_for_completion_timeout(&mdev->mmio.wed_reset, 20 * HZ)) { in mt7915_mmio_wed_reset()
589 dev_err(mdev->dev, "wed reset timeout\n"); in mt7915_mmio_wed_reset()
590 ret = -ETIMEDOUT; in mt7915_mmio_wed_reset()
594 clear_bit(MT76_STATE_WED_RESET, &mphy->state); in mt7915_mmio_wed_reset()
604 struct mtk_wed_device *wed = &dev->mt76.mmio.wed; in mt7915_mmio_wed_init()
613 wed->wlan.pci_dev = pci_dev; in mt7915_mmio_wed_init()
614 wed->wlan.bus_type = MTK_WED_BUS_PCIE; in mt7915_mmio_wed_init()
615 wed->wlan.base = devm_ioremap(dev->mt76.dev, in mt7915_mmio_wed_init()
618 wed->wlan.phy_base = pci_resource_start(pci_dev, 0); in mt7915_mmio_wed_init()
619 wed->wlan.wpdma_int = pci_resource_start(pci_dev, 0) + in mt7915_mmio_wed_init()
621 wed->wlan.wpdma_mask = pci_resource_start(pci_dev, 0) + in mt7915_mmio_wed_init()
623 wed->wlan.wpdma_phys = pci_resource_start(pci_dev, 0) + in mt7915_mmio_wed_init()
625 wed->wlan.wpdma_tx = pci_resource_start(pci_dev, 0) + in mt7915_mmio_wed_init()
627 wed->wlan.wpdma_txfree = pci_resource_start(pci_dev, 0) + in mt7915_mmio_wed_init()
629 wed->wlan.wpdma_rx_glo = pci_resource_start(pci_dev, 0) + in mt7915_mmio_wed_init()
631 wed->wlan.wpdma_rx = pci_resource_start(pci_dev, 0) + in mt7915_mmio_wed_init()
641 wed->wlan.platform_dev = plat_dev; in mt7915_mmio_wed_init()
642 wed->wlan.bus_type = MTK_WED_BUS_AXI; in mt7915_mmio_wed_init()
643 wed->wlan.base = devm_ioremap(dev->mt76.dev, res->start, in mt7915_mmio_wed_init()
645 wed->wlan.phy_base = res->start; in mt7915_mmio_wed_init()
646 wed->wlan.wpdma_int = res->start + MT_INT_SOURCE_CSR; in mt7915_mmio_wed_init()
647 wed->wlan.wpdma_mask = res->start + MT_INT_MASK_CSR; in mt7915_mmio_wed_init()
648 wed->wlan.wpdma_tx = res->start + MT_TXQ_WED_RING_BASE; in mt7915_mmio_wed_init()
649 wed->wlan.wpdma_txfree = res->start + MT_RXQ_WED_RING_BASE; in mt7915_mmio_wed_init()
650 wed->wlan.wpdma_rx_glo = res->start + MT_WPDMA_GLO_CFG; in mt7915_mmio_wed_init()
651 wed->wlan.wpdma_rx = res->start + MT_RXQ_WED_DATA_RING_BASE; in mt7915_mmio_wed_init()
653 wed->wlan.nbuf = MT7915_HW_TOKEN_SIZE; in mt7915_mmio_wed_init()
654 wed->wlan.tx_tbit[0] = is_mt7915(&dev->mt76) ? 4 : 30; in mt7915_mmio_wed_init()
655 wed->wlan.tx_tbit[1] = is_mt7915(&dev->mt76) ? 5 : 31; in mt7915_mmio_wed_init()
656 wed->wlan.txfree_tbit = is_mt798x(&dev->mt76) ? 2 : 1; in mt7915_mmio_wed_init()
657 wed->wlan.token_start = MT7915_TOKEN_SIZE - wed->wlan.nbuf; in mt7915_mmio_wed_init()
658 wed->wlan.wcid_512 = !is_mt7915(&dev->mt76); in mt7915_mmio_wed_init()
660 wed->wlan.rx_nbuf = 65536; in mt7915_mmio_wed_init()
661 wed->wlan.rx_npkt = MT7915_WED_RX_TOKEN_SIZE; in mt7915_mmio_wed_init()
662 wed->wlan.rx_size = SKB_WITH_OVERHEAD(MT_RX_BUF_SIZE); in mt7915_mmio_wed_init()
663 if (is_mt7915(&dev->mt76)) { in mt7915_mmio_wed_init()
664 wed->wlan.rx_tbit[0] = 16; in mt7915_mmio_wed_init()
665 wed->wlan.rx_tbit[1] = 17; in mt7915_mmio_wed_init()
666 } else if (is_mt798x(&dev->mt76)) { in mt7915_mmio_wed_init()
667 wed->wlan.rx_tbit[0] = 22; in mt7915_mmio_wed_init()
668 wed->wlan.rx_tbit[1] = 23; in mt7915_mmio_wed_init()
670 wed->wlan.rx_tbit[0] = 18; in mt7915_mmio_wed_init()
671 wed->wlan.rx_tbit[1] = 19; in mt7915_mmio_wed_init()
674 wed->wlan.init_buf = mt7915_wed_init_buf; in mt7915_mmio_wed_init()
675 wed->wlan.offload_enable = mt76_mmio_wed_offload_enable; in mt7915_mmio_wed_init()
676 wed->wlan.offload_disable = mt76_mmio_wed_offload_disable; in mt7915_mmio_wed_init()
677 wed->wlan.init_rx_buf = mt76_mmio_wed_init_rx_buf; in mt7915_mmio_wed_init()
678 wed->wlan.release_rx_buf = mt76_mmio_wed_release_rx_buf; in mt7915_mmio_wed_init()
679 wed->wlan.update_wo_rx_stats = mt7915_mmio_wed_update_rx_stats; in mt7915_mmio_wed_init()
680 wed->wlan.reset = mt7915_mmio_wed_reset; in mt7915_mmio_wed_init()
681 wed->wlan.reset_complete = mt76_mmio_wed_reset_complete; in mt7915_mmio_wed_init()
683 dev->mt76.rx_token_size = wed->wlan.rx_npkt; in mt7915_mmio_wed_init()
688 *irq = wed->irq; in mt7915_mmio_wed_init()
689 dev->mt76.dma_dev = wed->dev; in mt7915_mmio_wed_init()
691 ret = dma_set_mask(wed->dev, DMA_BIT_MASK(32)); in mt7915_mmio_wed_init()
709 mt76_mmio_init(&dev->mt76, mem_base); in mt7915_mmio_init()
713 dev->reg.reg_rev = mt7915_reg; in mt7915_mmio_init()
714 dev->reg.offs_rev = mt7915_offs; in mt7915_mmio_init()
715 dev->reg.map = mt7915_reg_map; in mt7915_mmio_init()
716 dev->reg.map_size = ARRAY_SIZE(mt7915_reg_map); in mt7915_mmio_init()
719 dev->reg.reg_rev = mt7916_reg; in mt7915_mmio_init()
720 dev->reg.offs_rev = mt7916_offs; in mt7915_mmio_init()
721 dev->reg.map = mt7916_reg_map; in mt7915_mmio_init()
722 dev->reg.map_size = ARRAY_SIZE(mt7916_reg_map); in mt7915_mmio_init()
726 dev->reg.reg_rev = mt7986_reg; in mt7915_mmio_init()
727 dev->reg.offs_rev = mt7916_offs; in mt7915_mmio_init()
728 dev->reg.map = mt7986_reg_map; in mt7915_mmio_init()
729 dev->reg.map_size = ARRAY_SIZE(mt7986_reg_map); in mt7915_mmio_init()
732 return -EINVAL; in mt7915_mmio_init()
735 dev->bus_ops = dev->mt76.bus; in mt7915_mmio_init()
736 bus_ops = devm_kmemdup(dev->mt76.dev, dev->bus_ops, sizeof(*bus_ops), in mt7915_mmio_init()
739 return -ENOMEM; in mt7915_mmio_init()
741 bus_ops->rr = mt7915_rr; in mt7915_mmio_init()
742 bus_ops->wr = mt7915_wr; in mt7915_mmio_init()
743 bus_ops->rmw = mt7915_rmw; in mt7915_mmio_init()
744 dev->mt76.bus = bus_ops; in mt7915_mmio_init()
746 mdev->rev = (device_id << 16) | in mt7915_mmio_init()
748 dev_dbg(mdev->dev, "ASIC revision: %04x\n", mdev->rev); in mt7915_mmio_init()
757 struct mt76_dev *mdev = &dev->mt76; in mt7915_dual_hif_set_irq_mask()
760 spin_lock_irqsave(&mdev->mmio.irq_lock, flags); in mt7915_dual_hif_set_irq_mask()
762 mdev->mmio.irqmask &= ~clear; in mt7915_dual_hif_set_irq_mask()
763 mdev->mmio.irqmask |= set; in mt7915_dual_hif_set_irq_mask()
766 if (mtk_wed_device_active(&mdev->mmio.wed)) in mt7915_dual_hif_set_irq_mask()
767 mtk_wed_device_irq_set_mask(&mdev->mmio.wed, in mt7915_dual_hif_set_irq_mask()
768 mdev->mmio.irqmask); in mt7915_dual_hif_set_irq_mask()
770 mt76_wr(dev, MT_INT_MASK_CSR, mdev->mmio.irqmask); in mt7915_dual_hif_set_irq_mask()
771 mt76_wr(dev, MT_INT1_MASK_CSR, mdev->mmio.irqmask); in mt7915_dual_hif_set_irq_mask()
774 spin_unlock_irqrestore(&mdev->mmio.irq_lock, flags); in mt7915_dual_hif_set_irq_mask()
785 /* TODO: support 2/4/6/8 MSI-X vectors */
789 struct mtk_wed_device *wed = &dev->mt76.mmio.wed; in mt7915_irq_tasklet()
794 if (dev->hif2) in mt7915_irq_tasklet()
796 intr = mtk_wed_device_irq_get(wed, dev->mt76.mmio.irqmask); in mt7915_irq_tasklet()
799 if (dev->hif2) in mt7915_irq_tasklet()
803 intr &= dev->mt76.mmio.irqmask; in mt7915_irq_tasklet()
807 if (dev->hif2) { in mt7915_irq_tasklet()
809 intr1 &= dev->mt76.mmio.irqmask; in mt7915_irq_tasklet()
815 trace_dev_irq(&dev->mt76, intr, dev->mt76.mmio.irqmask); in mt7915_irq_tasklet()
824 napi_schedule(&dev->mt76.tx_napi); in mt7915_irq_tasklet()
827 napi_schedule(&dev->mt76.napi[MT_RXQ_MAIN]); in mt7915_irq_tasklet()
830 napi_schedule(&dev->mt76.napi[MT_RXQ_BAND1]); in mt7915_irq_tasklet()
833 napi_schedule(&dev->mt76.napi[MT_RXQ_MCU]); in mt7915_irq_tasklet()
836 napi_schedule(&dev->mt76.napi[MT_RXQ_MCU_WA]); in mt7915_irq_tasklet()
838 if (!is_mt7915(&dev->mt76) && in mt7915_irq_tasklet()
840 napi_schedule(&dev->mt76.napi[MT_RXQ_MAIN_WA]); in mt7915_irq_tasklet()
843 napi_schedule(&dev->mt76.napi[MT_RXQ_BAND1_WA]); in mt7915_irq_tasklet()
850 dev->recovery.state = val; in mt7915_irq_tasklet()
859 struct mtk_wed_device *wed = &dev->mt76.mmio.wed; in mt7915_irq_handler()
866 if (dev->hif2) in mt7915_irq_handler()
869 if (!test_bit(MT76_STATE_INITIALIZED, &dev->mphy.state)) in mt7915_irq_handler()
872 tasklet_schedule(&dev->mt76.irq_tasklet); in mt7915_irq_handler()
904 return ERR_PTR(-ENOMEM); in mt7915_mmio_probe()
912 tasklet_setup(&mdev->irq_tasklet, mt7915_irq_tasklet); in mt7915_mmio_probe()
917 mt76_free_device(&dev->mt76); in mt7915_mmio_probe()