Lines Matching defs:geth

108 	struct gemini_ethernet *geth;
545 struct gemini_ethernet *geth = port->geth;
561 desc_ring = dma_alloc_coherent(geth->dev, len * sizeof(*desc_ring),
570 dev_warn(geth->dev, "TX queue base is not aligned\n");
571 dma_free_coherent(geth->dev, len * sizeof(*desc_ring),
604 struct gemini_ethernet *geth = port->geth;
627 dma_unmap_single(geth->dev, mapping,
675 struct gemini_ethernet *geth = port->geth;
692 dma_free_coherent(geth->dev,
700 struct gemini_ethernet *geth = port->geth;
703 qhdr = geth->base + TOE_DEFAULT_Q_HDR_BASE(netdev->dev_id);
707 port->rxq_ring = dma_alloc_coherent(geth->dev,
713 dev_warn(geth->dev, "RX queue base is not aligned\n");
723 gmac_get_queue_page(struct gemini_ethernet *geth,
734 if (!geth->freeq_pages) {
735 dev_err(geth->dev, "try to get page with no page list\n");
740 for (i = 0; i < geth->num_freeq_pages; i++) {
741 gpage = &geth->freeq_pages[i];
752 struct gemini_ethernet *geth = port->geth;
762 qhdr = geth->base +
786 gpage = gmac_get_queue_page(geth, port, mapping + PAGE_SIZE);
788 dev_err(geth->dev, "could not find page\n");
795 dma_free_coherent(geth->dev, sizeof(*port->rxq_ring) << port->rxq_order,
799 static struct page *geth_freeq_alloc_map_page(struct gemini_ethernet *geth,
815 mapping = dma_map_single(geth->dev, page_address(page),
817 if (dma_mapping_error(geth->dev, mapping)) {
828 frag_len = 1 << geth->freeq_frag_order; /* Usually 2048 */
829 fpp_order = PAGE_SHIFT - geth->freeq_frag_order;
830 freeq_entry = geth->freeq_ring + (pn << fpp_order);
831 dev_dbg(geth->dev, "allocate page %d fragment length %d fragments per page %d, freeq entry %p\n",
840 gpage = &geth->freeq_pages[pn];
842 mapping = geth->freeq_ring[pn << fpp_order].word2.buf_adr;
843 dma_unmap_single(geth->dev, mapping, frag_len, DMA_FROM_DEVICE);
851 dev_dbg(geth->dev, "page %d, DMA addr: %08x, page %p\n",
861 * @geth: the ethernet adapter
866 static unsigned int geth_fill_freeq(struct gemini_ethernet *geth, bool refill)
868 unsigned int fpp_order = PAGE_SHIFT - geth->freeq_frag_order;
876 m_pn = (1 << (geth->freeq_order - fpp_order)) - 1;
878 spin_lock_irqsave(&geth->freeq_lock, flags);
880 rw.bits32 = readl(geth->base + GLOBAL_SWFQ_RWPTR_REG);
890 gpage = &geth->freeq_pages[pn];
893 dev_dbg(geth->dev, "fill entry %d page ref count %d add %d refs\n",
902 page = geth_freeq_alloc_map_page(geth, pn);
914 writew(pn << fpp_order, geth->base + GLOBAL_SWFQ_RWPTR_REG + 2);
916 spin_unlock_irqrestore(&geth->freeq_lock, flags);
921 static int geth_setup_freeq(struct gemini_ethernet *geth)
923 unsigned int fpp_order = PAGE_SHIFT - geth->freeq_frag_order;
924 unsigned int frag_len = 1 << geth->freeq_frag_order;
925 unsigned int len = 1 << geth->freeq_order;
932 geth->freeq_ring = dma_alloc_coherent(geth->dev,
933 sizeof(*geth->freeq_ring) << geth->freeq_order,
934 &geth->freeq_dma_base, GFP_KERNEL);
935 if (!geth->freeq_ring)
937 if (geth->freeq_dma_base & ~DMA_Q_BASE_MASK) {
938 dev_warn(geth->dev, "queue ring base is not aligned\n");
943 geth->freeq_pages = kcalloc(pages, sizeof(*geth->freeq_pages),
945 if (!geth->freeq_pages)
947 geth->num_freeq_pages = pages;
949 dev_info(geth->dev, "allocate %d pages for queue\n", pages);
951 if (!geth_freeq_alloc_map_page(geth, pn))
954 filled = geth_fill_freeq(geth, false);
958 qt.bits32 = readl(geth->base + GLOBAL_QUEUE_THRESHOLD_REG);
960 writel(qt.bits32, geth->base + GLOBAL_QUEUE_THRESHOLD_REG);
962 skbsz.bits.sw_skb_size = 1 << geth->freeq_frag_order;
963 writel(skbsz.bits32, geth->base + GLOBAL_DMA_SKB_SIZE_REG);
964 writel(geth->freeq_dma_base | geth->freeq_order,
965 geth->base + GLOBAL_SW_FREEQ_BASE_SIZE_REG);
975 mapping = geth->freeq_ring[pn << fpp_order].word2.buf_adr;
976 dma_unmap_single(geth->dev, mapping, frag_len, DMA_FROM_DEVICE);
977 gpage = &geth->freeq_pages[pn];
981 kfree(geth->freeq_pages);
983 dma_free_coherent(geth->dev,
984 sizeof(*geth->freeq_ring) << geth->freeq_order,
985 geth->freeq_ring, geth->freeq_dma_base);
986 geth->freeq_ring = NULL;
992 * @geth: the Gemini global ethernet state
994 static void geth_cleanup_freeq(struct gemini_ethernet *geth)
996 unsigned int fpp_order = PAGE_SHIFT - geth->freeq_frag_order;
997 unsigned int frag_len = 1 << geth->freeq_frag_order;
998 unsigned int len = 1 << geth->freeq_order;
1002 writew(readw(geth->base + GLOBAL_SWFQ_RWPTR_REG),
1003 geth->base + GLOBAL_SWFQ_RWPTR_REG + 2);
1004 writel(0, geth->base + GLOBAL_SW_FREEQ_BASE_SIZE_REG);
1010 mapping = geth->freeq_ring[pn << fpp_order].word2.buf_adr;
1011 dma_unmap_single(geth->dev, mapping, frag_len, DMA_FROM_DEVICE);
1013 gpage = &geth->freeq_pages[pn];
1018 kfree(geth->freeq_pages);
1020 dma_free_coherent(geth->dev,
1021 sizeof(*geth->freeq_ring) << geth->freeq_order,
1022 geth->freeq_ring, geth->freeq_dma_base);
1036 struct gemini_ethernet *geth = port->geth;
1047 other_netdev = geth->port1->netdev;
1049 other_netdev = geth->port0->netdev;
1069 dev_dbg(geth->dev, "set shared queue to size %d order %d\n",
1071 if (geth->freeq_order == new_order)
1074 spin_lock_irqsave(&geth->irq_lock, flags);
1077 en = readl(geth->base + GLOBAL_INTERRUPT_ENABLE_4_REG);
1079 writel(en, geth->base + GLOBAL_INTERRUPT_ENABLE_4_REG);
1080 spin_unlock_irqrestore(&geth->irq_lock, flags);
1083 if (geth->freeq_ring)
1084 geth_cleanup_freeq(geth);
1087 geth->freeq_order = new_order;
1088 ret = geth_setup_freeq(geth);
1094 spin_lock_irqsave(&geth->irq_lock, flags);
1096 writel(en, geth->base + GLOBAL_INTERRUPT_ENABLE_4_REG);
1097 spin_unlock_irqrestore(&geth->irq_lock, flags);
1106 struct gemini_ethernet *geth = port->geth;
1112 spin_lock_irqsave(&geth->irq_lock, flags);
1117 writel(mask, geth->base + GLOBAL_INTERRUPT_STATUS_0_REG);
1119 val = readl(geth->base + GLOBAL_INTERRUPT_ENABLE_0_REG);
1121 writel(val, geth->base + GLOBAL_INTERRUPT_ENABLE_0_REG);
1123 spin_unlock_irqrestore(&geth->irq_lock, flags);
1141 struct gemini_ethernet *geth = port->geth;
1240 mapping = dma_map_single(geth->dev, buffer, buflen,
1242 if (dma_mapping_error(geth->dev, mapping))
1265 dma_unmap_page(geth->dev, txq->ring[w].word2.buf_adr,
1355 struct gemini_ethernet *geth = port->geth;
1361 spin_lock_irqsave(&geth->irq_lock, flags);
1364 val = readl(geth->base + GLOBAL_INTERRUPT_ENABLE_0_REG);
1366 writel(val, geth->base + GLOBAL_INTERRUPT_ENABLE_0_REG);
1369 val = readl(geth->base + GLOBAL_INTERRUPT_ENABLE_1_REG);
1371 writel(val, geth->base + GLOBAL_INTERRUPT_ENABLE_1_REG);
1374 val = readl(geth->base + GLOBAL_INTERRUPT_ENABLE_4_REG);
1376 writel(val, geth->base + GLOBAL_INTERRUPT_ENABLE_4_REG);
1378 spin_unlock_irqrestore(&geth->irq_lock, flags);
1384 struct gemini_ethernet *geth = port->geth;
1390 spin_lock_irqsave(&geth->irq_lock, flags);
1393 val = readl(geth->base + GLOBAL_INTERRUPT_ENABLE_1_REG);
1395 writel(val, geth->base + GLOBAL_INTERRUPT_ENABLE_1_REG);
1397 spin_unlock_irqrestore(&geth->irq_lock, flags);
1444 struct gemini_ethernet *geth = port->geth;
1461 spin_lock_irqsave(&geth->irq_lock, flags);
1465 geth->base + GLOBAL_INTERRUPT_STATUS_1_REG);
1466 spin_unlock_irqrestore(&geth->irq_lock, flags);
1492 gpage = gmac_get_queue_page(geth, port, mapping + PAGE_SIZE);
1494 dev_err(geth->dev, "could not find mapping\n");
1560 struct gemini_ethernet *geth = port->geth;
1564 freeq_threshold = 1 << (geth->freeq_order - 1);
1578 geth_fill_freeq(geth, true);
1588 struct gemini_ethernet *geth = port->geth;
1593 reg[0] = readl(geth->base + GLOBAL_INTERRUPT_STATUS_0_REG);
1594 reg[1] = readl(geth->base + GLOBAL_INTERRUPT_STATUS_1_REG);
1595 reg[2] = readl(geth->base + GLOBAL_INTERRUPT_STATUS_2_REG);
1596 reg[3] = readl(geth->base + GLOBAL_INTERRUPT_STATUS_3_REG);
1597 reg[4] = readl(geth->base + GLOBAL_INTERRUPT_STATUS_4_REG);
1602 reg[0] = readl(geth->base + GLOBAL_INTERRUPT_ENABLE_0_REG);
1603 reg[1] = readl(geth->base + GLOBAL_INTERRUPT_ENABLE_1_REG);
1604 reg[2] = readl(geth->base + GLOBAL_INTERRUPT_ENABLE_2_REG);
1605 reg[3] = readl(geth->base + GLOBAL_INTERRUPT_ENABLE_3_REG);
1606 reg[4] = readl(geth->base + GLOBAL_INTERRUPT_ENABLE_4_REG);
1643 ptr_reg = geth->base + GLOBAL_SWFQ_RWPTR_REG;
1648 ptr_reg = geth->base + GLOBAL_HWFQ_RWPTR_REG;
1660 struct gemini_ethernet *geth = port->geth;
1663 spin_lock_irqsave(&geth->irq_lock, flags);
1681 geth->base + GLOBAL_INTERRUPT_STATUS_4_REG);
1684 spin_unlock_irqrestore(&geth->irq_lock, flags);
1695 struct gemini_ethernet *geth = port->geth;
1703 irqif_reg = geth->base + GLOBAL_INTERRUPT_STATUS_0_REG + offs;
1704 irqen_reg = geth->base + GLOBAL_INTERRUPT_ENABLE_0_REG + offs;
1724 struct gemini_ethernet *geth;
1728 geth = port->geth;
1770 spin_lock(&geth->irq_lock);
1772 geth->base + GLOBAL_INTERRUPT_STATUS_4_REG);
1776 spin_unlock(&geth->irq_lock);
2297 struct gemini_ethernet *geth;
2300 geth = port->geth;
2302 geth_fill_freeq(geth, true);
2304 spin_lock_irqsave(&geth->irq_lock, flags);
2306 writel(irqmask, geth->base + GLOBAL_INTERRUPT_STATUS_4_REG);
2308 irqmask |= readl(geth->base + GLOBAL_INTERRUPT_ENABLE_4_REG);
2309 writel(irqmask, geth->base + GLOBAL_INTERRUPT_ENABLE_4_REG);
2310 spin_unlock_irqrestore(&geth->irq_lock, flags);
2318 struct gemini_ethernet *geth;
2322 geth = port->geth;
2323 spin_lock(&geth->irq_lock);
2325 val = readl(geth->base + GLOBAL_INTERRUPT_STATUS_4_REG);
2326 en = readl(geth->base + GLOBAL_INTERRUPT_ENABLE_4_REG);
2335 writel(en, geth->base + GLOBAL_INTERRUPT_ENABLE_4_REG);
2339 spin_unlock(&geth->irq_lock);
2351 geth_cleanup_freeq(port->geth);
2354 static void gemini_ethernet_init(struct gemini_ethernet *geth)
2357 if (geth->initialized)
2359 if (geth->port0 && geth->port1)
2360 geth->initialized = true;
2364 writel(0, geth->base + GLOBAL_INTERRUPT_ENABLE_0_REG);
2365 writel(0, geth->base + GLOBAL_INTERRUPT_ENABLE_1_REG);
2366 writel(0, geth->base + GLOBAL_INTERRUPT_ENABLE_2_REG);
2367 writel(0, geth->base + GLOBAL_INTERRUPT_ENABLE_3_REG);
2368 writel(0, geth->base + GLOBAL_INTERRUPT_ENABLE_4_REG);
2380 writel(0xCCFC0FC0, geth->base + GLOBAL_INTERRUPT_SELECT_0_REG);
2381 writel(0x00F00002, geth->base + GLOBAL_INTERRUPT_SELECT_1_REG);
2382 writel(0xFFFFFFFF, geth->base + GLOBAL_INTERRUPT_SELECT_2_REG);
2383 writel(0xFFFFFFFF, geth->base + GLOBAL_INTERRUPT_SELECT_3_REG);
2384 writel(0xFF000003, geth->base + GLOBAL_INTERRUPT_SELECT_4_REG);
2387 writel(~0, geth->base + GLOBAL_INTERRUPT_STATUS_0_REG);
2388 writel(~0, geth->base + GLOBAL_INTERRUPT_STATUS_1_REG);
2389 writel(~0, geth->base + GLOBAL_INTERRUPT_STATUS_2_REG);
2390 writel(~0, geth->base + GLOBAL_INTERRUPT_STATUS_3_REG);
2391 writel(~0, geth->base + GLOBAL_INTERRUPT_STATUS_4_REG);
2394 writel(0, geth->base + GLOBAL_SW_FREEQ_BASE_SIZE_REG);
2395 writel(0, geth->base + GLOBAL_HW_FREEQ_BASE_SIZE_REG);
2396 writel(0, geth->base + GLOBAL_SWFQ_RWPTR_REG);
2397 writel(0, geth->base + GLOBAL_HWFQ_RWPTR_REG);
2399 geth->freeq_frag_order = DEFAULT_RX_BUF_ORDER;
2403 geth->freeq_order = 1;
2422 struct gemini_ethernet *geth;
2431 geth = dev_get_drvdata(parent);
2452 port->geth = geth;
2501 geth->port0 = port;
2503 geth->port1 = port;
2506 gemini_ethernet_init(geth);
2603 struct gemini_ethernet *geth;
2608 geth = devm_kzalloc(dev, sizeof(*geth), GFP_KERNEL);
2609 if (!geth)
2611 geth->base = devm_platform_get_and_ioremap_resource(pdev, 0, NULL);
2612 if (IS_ERR(geth->base))
2613 return PTR_ERR(geth->base);
2614 geth->dev = dev;
2619 val = readl(geth->base + GLOBAL_TOE_VERSION_REG);
2629 spin_lock_init(&geth->irq_lock);
2630 spin_lock_init(&geth->freeq_lock);
2633 platform_set_drvdata(pdev, geth);
2641 struct gemini_ethernet *geth = platform_get_drvdata(pdev);
2643 geth_cleanup_freeq(geth);
2644 geth->initialized = false;