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

1 // SPDX-License-Identifier: GPL-2.0
5 #include <linux/clk-provider.h>
8 #include "dwmac-intel.h"
44 int func = PCI_FUNC(pdev->devfn); in stmmac_pci_find_phy_addr()
49 return -ENODEV; in stmmac_pci_find_phy_addr()
51 dmi_data = dmi_id->driver_data; in stmmac_pci_find_phy_addr()
52 func_data = dmi_data->func; in stmmac_pci_find_phy_addr()
54 for (n = 0; n < dmi_data->nfuncs; n++, func_data++) in stmmac_pci_find_phy_addr()
55 if (func_data->func == func) in stmmac_pci_find_phy_addr()
56 return func_data->phy_addr; in stmmac_pci_find_phy_addr()
58 return -ENODEV; in stmmac_pci_find_phy_addr()
68 val_rd = mdiobus_read(priv->mii, phyaddr, phyreg); in serdes_status_poll()
72 } while (--retries); in serdes_status_poll()
74 return -ETIMEDOUT; in serdes_status_poll()
84 if (!intel_priv->mdio_adhoc_addr) in intel_serdes_powerup()
87 serdes_phy_addr = intel_priv->mdio_adhoc_addr; in intel_serdes_powerup()
90 data = mdiobus_read(priv->mii, serdes_phy_addr, in intel_serdes_powerup()
96 if (priv->plat->max_speed == 2500) in intel_serdes_powerup()
103 mdiobus_write(priv->mii, serdes_phy_addr, SERDES_GCR0, data); in intel_serdes_powerup()
106 data = mdiobus_read(priv->mii, serdes_phy_addr, SERDES_GCR0); in intel_serdes_powerup()
108 mdiobus_write(priv->mii, serdes_phy_addr, SERDES_GCR0, data); in intel_serdes_powerup()
117 dev_err(priv->device, "Serdes PLL clk request timeout\n"); in intel_serdes_powerup()
122 data = mdiobus_read(priv->mii, serdes_phy_addr, SERDES_GCR0); in intel_serdes_powerup()
124 mdiobus_write(priv->mii, serdes_phy_addr, SERDES_GCR0, data); in intel_serdes_powerup()
133 dev_err(priv->device, "Serdes assert lane reset timeout\n"); in intel_serdes_powerup()
138 data = mdiobus_read(priv->mii, serdes_phy_addr, SERDES_GCR0); in intel_serdes_powerup()
143 mdiobus_write(priv->mii, serdes_phy_addr, SERDES_GCR0, data); in intel_serdes_powerup()
152 dev_err(priv->device, "Serdes power state P0 timeout.\n"); in intel_serdes_powerup()
156 /* PSE only - ungate SGMII PHY Rx Clock */ in intel_serdes_powerup()
157 if (intel_priv->is_pse) in intel_serdes_powerup()
158 mdiobus_modify(priv->mii, serdes_phy_addr, SERDES_GCR0, in intel_serdes_powerup()
171 if (!intel_priv->mdio_adhoc_addr) in intel_serdes_powerdown()
174 serdes_phy_addr = intel_priv->mdio_adhoc_addr; in intel_serdes_powerdown()
176 /* PSE only - gate SGMII PHY Rx Clock */ in intel_serdes_powerdown()
177 if (intel_priv->is_pse) in intel_serdes_powerdown()
178 mdiobus_modify(priv->mii, serdes_phy_addr, SERDES_GCR0, in intel_serdes_powerdown()
182 data = mdiobus_read(priv->mii, serdes_phy_addr, SERDES_GCR0); in intel_serdes_powerdown()
187 mdiobus_write(priv->mii, serdes_phy_addr, SERDES_GCR0, data); in intel_serdes_powerdown()
196 dev_err(priv->device, "Serdes power state P3 timeout\n"); in intel_serdes_powerdown()
200 /* de-assert clk_req */ in intel_serdes_powerdown()
201 data = mdiobus_read(priv->mii, serdes_phy_addr, SERDES_GCR0); in intel_serdes_powerdown()
203 mdiobus_write(priv->mii, serdes_phy_addr, SERDES_GCR0, data); in intel_serdes_powerdown()
205 /* check for clk_ack de-assert */ in intel_serdes_powerdown()
212 dev_err(priv->device, "Serdes PLL clk de-assert timeout\n"); in intel_serdes_powerdown()
216 /* de-assert lane reset */ in intel_serdes_powerdown()
217 data = mdiobus_read(priv->mii, serdes_phy_addr, SERDES_GCR0); in intel_serdes_powerdown()
219 mdiobus_write(priv->mii, serdes_phy_addr, SERDES_GCR0, data); in intel_serdes_powerdown()
221 /* check for de-assert lane reset reflection */ in intel_serdes_powerdown()
228 dev_err(priv->device, "Serdes de-assert lane reset timeout\n"); in intel_serdes_powerdown()
240 serdes_phy_addr = intel_priv->mdio_adhoc_addr; in intel_speed_mode_2500()
243 data = mdiobus_read(priv->mii, serdes_phy_addr, in intel_speed_mode_2500()
248 dev_info(priv->device, "Link Speed Mode: 2.5Gbps\n"); in intel_speed_mode_2500()
249 priv->plat->max_speed = 2500; in intel_speed_mode_2500()
250 priv->plat->phy_interface = PHY_INTERFACE_MODE_2500BASEX; in intel_speed_mode_2500()
251 priv->plat->mdio_bus_data->xpcs_an_inband = false; in intel_speed_mode_2500()
253 priv->plat->max_speed = 1000; in intel_speed_mode_2500()
254 priv->plat->mdio_bus_data->xpcs_an_inband = true; in intel_speed_mode_2500()
267 intel_priv = (struct intel_priv_data *)priv->plat->bsp_priv; in intel_mgbe_ptp_clk_freq_config()
269 gpio_value = readl(priv->ioaddr + GMAC_GPIO_STATUS); in intel_mgbe_ptp_clk_freq_config()
271 if (intel_priv->is_pse) { in intel_mgbe_ptp_clk_freq_config()
272 /* For PSE GbE, use 200MHz */ in intel_mgbe_ptp_clk_freq_config()
281 writel(gpio_value, priv->ioaddr + GMAC_GPIO_STATUS); in intel_mgbe_ptp_clk_freq_config()
302 return (readl(priv->ioaddr + GMAC_INT_STATUS) & GMAC_INT_TSIE); in stmmac_cross_ts_isr()
312 void __iomem *ptpaddr = priv->ptpaddr; in intel_crosststamp()
313 void __iomem *ioaddr = priv->hw->pcsr; in intel_crosststamp()
323 return -EOPNOTSUPP; in intel_crosststamp()
325 intel_priv = priv->plat->bsp_priv; in intel_crosststamp()
330 if (priv->plat->ext_snapshot_en) in intel_crosststamp()
331 return -EBUSY; in intel_crosststamp()
333 priv->plat->int_snapshot_en = 1; in intel_crosststamp()
335 mutex_lock(&priv->aux_ts_lock); in intel_crosststamp()
339 switch (priv->plat->int_snapshot_num) { in intel_crosststamp()
353 mutex_unlock(&priv->aux_ts_lock); in intel_crosststamp()
354 priv->plat->int_snapshot_en = 0; in intel_crosststamp()
355 return -EINVAL; in intel_crosststamp()
364 mutex_unlock(&priv->aux_ts_lock); in intel_crosststamp()
376 /* Time sync done Indication - Interrupt method */ in intel_crosststamp()
377 if (!wait_event_interruptible_timeout(priv->tstamp_busy_wait, in intel_crosststamp()
380 priv->plat->int_snapshot_en = 0; in intel_crosststamp()
381 return -ETIMEDOUT; in intel_crosststamp()
390 read_lock_irqsave(&priv->ptp_lock, flags); in intel_crosststamp()
393 read_unlock_irqrestore(&priv->ptp_lock, flags); in intel_crosststamp()
394 get_arttime(priv->mii, intel_priv->mdio_adhoc_addr, &art_time); in intel_crosststamp()
398 system->cycles *= intel_priv->crossts_adj; in intel_crosststamp()
399 priv->plat->int_snapshot_en = 0; in intel_crosststamp()
415 intel_priv->crossts_adj = art_freq; in intel_mgbe_pse_crossts_adj()
421 plat->clk_csr = 2; /* clk_csr_i = 20-35MHz & MDC = clk_csr_i/16 */ in common_default_data()
422 plat->has_gmac = 1; in common_default_data()
423 plat->force_sf_dma_mode = 1; in common_default_data()
425 plat->mdio_bus_data->needs_reset = true; in common_default_data()
428 plat->multicast_filter_bins = HASH_TABLE_SIZE; in common_default_data()
431 plat->unicast_filter_entries = 1; in common_default_data()
434 plat->maxmtu = JUMBO_LEN; in common_default_data()
437 plat->tx_queues_to_use = 1; in common_default_data()
438 plat->rx_queues_to_use = 1; in common_default_data()
441 plat->tx_queues_cfg[0].use_prio = false; in common_default_data()
442 plat->rx_queues_cfg[0].use_prio = false; in common_default_data()
445 plat->rx_queues_cfg[0].pkt_route = 0x0; in common_default_data()
456 plat->pdev = pdev; in intel_mgbe_common_data()
457 plat->phy_addr = -1; in intel_mgbe_common_data()
458 plat->clk_csr = 5; in intel_mgbe_common_data()
459 plat->has_gmac = 0; in intel_mgbe_common_data()
460 plat->has_gmac4 = 1; in intel_mgbe_common_data()
461 plat->force_sf_dma_mode = 0; in intel_mgbe_common_data()
462 plat->tso_en = 1; in intel_mgbe_common_data()
463 plat->sph_disable = 1; in intel_mgbe_common_data()
474 plat->mult_fact_100ns = 1; in intel_mgbe_common_data()
476 plat->rx_sched_algorithm = MTL_RX_ALGORITHM_SP; in intel_mgbe_common_data()
478 for (i = 0; i < plat->rx_queues_to_use; i++) { in intel_mgbe_common_data()
479 plat->rx_queues_cfg[i].mode_to_use = MTL_QUEUE_DCB; in intel_mgbe_common_data()
480 plat->rx_queues_cfg[i].chan = i; in intel_mgbe_common_data()
483 plat->rx_queues_cfg[i].use_prio = false; in intel_mgbe_common_data()
486 plat->rx_queues_cfg[i].pkt_route = 0x0; in intel_mgbe_common_data()
489 for (i = 0; i < plat->tx_queues_to_use; i++) { in intel_mgbe_common_data()
490 plat->tx_queues_cfg[i].mode_to_use = MTL_QUEUE_DCB; in intel_mgbe_common_data()
493 plat->tx_queues_cfg[i].use_prio = false; in intel_mgbe_common_data()
496 plat->tx_queues_cfg[i].tbs_en = 1; in intel_mgbe_common_data()
500 plat->tx_fifo_size = plat->tx_queues_to_use * 4096; in intel_mgbe_common_data()
501 plat->rx_fifo_size = plat->rx_queues_to_use * 4096; in intel_mgbe_common_data()
503 plat->tx_sched_algorithm = MTL_TX_ALGORITHM_WRR; in intel_mgbe_common_data()
504 plat->tx_queues_cfg[0].weight = 0x09; in intel_mgbe_common_data()
505 plat->tx_queues_cfg[1].weight = 0x0A; in intel_mgbe_common_data()
506 plat->tx_queues_cfg[2].weight = 0x0B; in intel_mgbe_common_data()
507 plat->tx_queues_cfg[3].weight = 0x0C; in intel_mgbe_common_data()
508 plat->tx_queues_cfg[4].weight = 0x0D; in intel_mgbe_common_data()
509 plat->tx_queues_cfg[5].weight = 0x0E; in intel_mgbe_common_data()
510 plat->tx_queues_cfg[6].weight = 0x0F; in intel_mgbe_common_data()
511 plat->tx_queues_cfg[7].weight = 0x10; in intel_mgbe_common_data()
513 plat->dma_cfg->pbl = 32; in intel_mgbe_common_data()
514 plat->dma_cfg->pblx8 = true; in intel_mgbe_common_data()
515 plat->dma_cfg->fixed_burst = 0; in intel_mgbe_common_data()
516 plat->dma_cfg->mixed_burst = 0; in intel_mgbe_common_data()
517 plat->dma_cfg->aal = 0; in intel_mgbe_common_data()
518 plat->dma_cfg->dche = true; in intel_mgbe_common_data()
520 plat->axi = devm_kzalloc(&pdev->dev, sizeof(*plat->axi), in intel_mgbe_common_data()
522 if (!plat->axi) in intel_mgbe_common_data()
523 return -ENOMEM; in intel_mgbe_common_data()
525 plat->axi->axi_lpi_en = 0; in intel_mgbe_common_data()
526 plat->axi->axi_xit_frm = 0; in intel_mgbe_common_data()
527 plat->axi->axi_wr_osr_lmt = 1; in intel_mgbe_common_data()
528 plat->axi->axi_rd_osr_lmt = 1; in intel_mgbe_common_data()
529 plat->axi->axi_blen[0] = 4; in intel_mgbe_common_data()
530 plat->axi->axi_blen[1] = 8; in intel_mgbe_common_data()
531 plat->axi->axi_blen[2] = 16; in intel_mgbe_common_data()
533 plat->ptp_max_adj = plat->clk_ptp_rate; in intel_mgbe_common_data()
534 plat->eee_usecs_rate = plat->clk_ptp_rate; in intel_mgbe_common_data()
537 sprintf(clk_name, "%s-%s", "stmmac", pci_name(pdev)); in intel_mgbe_common_data()
539 plat->stmmac_clk = clk_register_fixed_rate(&pdev->dev, in intel_mgbe_common_data()
541 plat->clk_ptp_rate); in intel_mgbe_common_data()
543 if (IS_ERR(plat->stmmac_clk)) { in intel_mgbe_common_data()
544 dev_warn(&pdev->dev, "Fail to register stmmac-clk\n"); in intel_mgbe_common_data()
545 plat->stmmac_clk = NULL; in intel_mgbe_common_data()
548 ret = clk_prepare_enable(plat->stmmac_clk); in intel_mgbe_common_data()
550 clk_unregister_fixed_rate(plat->stmmac_clk); in intel_mgbe_common_data()
554 plat->ptp_clk_freq_config = intel_mgbe_ptp_clk_freq_config; in intel_mgbe_common_data()
557 plat->multicast_filter_bins = HASH_TABLE_SIZE; in intel_mgbe_common_data()
560 plat->unicast_filter_entries = 1; in intel_mgbe_common_data()
563 plat->maxmtu = JUMBO_LEN; in intel_mgbe_common_data()
565 plat->vlan_fail_q_en = true; in intel_mgbe_common_data()
568 plat->vlan_fail_q = plat->rx_queues_to_use - 1; in intel_mgbe_common_data()
570 /* For fixed-link setup, we allow phy-mode setting */ in intel_mgbe_common_data()
571 fwnode = dev_fwnode(&pdev->dev); in intel_mgbe_common_data()
575 /* "phy-mode" setting is optional. If it is set, in intel_mgbe_common_data()
576 * we allow either sgmii or 1000base-x for now. in intel_mgbe_common_data()
582 plat->phy_interface = phy_mode; in intel_mgbe_common_data()
584 dev_warn(&pdev->dev, "Invalid phy-mode\n"); in intel_mgbe_common_data()
588 /* Intel mgbe SGMII interface uses pcs-xcps */ in intel_mgbe_common_data()
589 if (plat->phy_interface == PHY_INTERFACE_MODE_SGMII || in intel_mgbe_common_data()
590 plat->phy_interface == PHY_INTERFACE_MODE_1000BASEX) { in intel_mgbe_common_data()
591 plat->mdio_bus_data->has_xpcs = true; in intel_mgbe_common_data()
592 plat->mdio_bus_data->xpcs_an_inband = true; in intel_mgbe_common_data()
595 /* For fixed-link setup, we clear xpcs_an_inband */ in intel_mgbe_common_data()
599 fixed_node = fwnode_get_named_child_node(fwnode, "fixed-link"); in intel_mgbe_common_data()
601 plat->mdio_bus_data->xpcs_an_inband = false; in intel_mgbe_common_data()
606 /* Ensure mdio bus scan skips intel serdes and pcs-xpcs */ in intel_mgbe_common_data()
607 plat->mdio_bus_data->phy_mask = 1 << INTEL_MGBE_ADHOC_ADDR; in intel_mgbe_common_data()
608 plat->mdio_bus_data->phy_mask |= 1 << INTEL_MGBE_XPCS_ADDR; in intel_mgbe_common_data()
610 plat->int_snapshot_num = AUX_SNAPSHOT1; in intel_mgbe_common_data()
611 plat->ext_snapshot_num = AUX_SNAPSHOT0; in intel_mgbe_common_data()
613 plat->crosststamp = intel_crosststamp; in intel_mgbe_common_data()
614 plat->int_snapshot_en = 0; in intel_mgbe_common_data()
617 plat->msi_mac_vec = 29; in intel_mgbe_common_data()
618 plat->msi_lpi_vec = 28; in intel_mgbe_common_data()
619 plat->msi_sfty_ce_vec = 27; in intel_mgbe_common_data()
620 plat->msi_sfty_ue_vec = 26; in intel_mgbe_common_data()
621 plat->msi_rx_base_vec = 0; in intel_mgbe_common_data()
622 plat->msi_tx_base_vec = 1; in intel_mgbe_common_data()
630 plat->rx_queues_to_use = 8; in ehl_common_data()
631 plat->tx_queues_to_use = 8; in ehl_common_data()
632 plat->use_phy_wol = 1; in ehl_common_data()
634 plat->safety_feat_cfg->tsoee = 1; in ehl_common_data()
635 plat->safety_feat_cfg->mrxpee = 1; in ehl_common_data()
636 plat->safety_feat_cfg->mestee = 1; in ehl_common_data()
637 plat->safety_feat_cfg->mrxee = 1; in ehl_common_data()
638 plat->safety_feat_cfg->mtxee = 1; in ehl_common_data()
639 plat->safety_feat_cfg->epsi = 0; in ehl_common_data()
640 plat->safety_feat_cfg->edpp = 0; in ehl_common_data()
641 plat->safety_feat_cfg->prtyen = 0; in ehl_common_data()
642 plat->safety_feat_cfg->tmouten = 0; in ehl_common_data()
650 plat->bus_id = 1; in ehl_sgmii_data()
651 plat->phy_interface = PHY_INTERFACE_MODE_SGMII; in ehl_sgmii_data()
652 plat->speed_mode_2500 = intel_speed_mode_2500; in ehl_sgmii_data()
653 plat->serdes_powerup = intel_serdes_powerup; in ehl_sgmii_data()
654 plat->serdes_powerdown = intel_serdes_powerdown; in ehl_sgmii_data()
656 plat->clk_ptp_rate = 204800000; in ehl_sgmii_data()
668 plat->bus_id = 1; in ehl_rgmii_data()
669 plat->phy_interface = PHY_INTERFACE_MODE_RGMII; in ehl_rgmii_data()
671 plat->clk_ptp_rate = 204800000; in ehl_rgmii_data()
683 struct intel_priv_data *intel_priv = plat->bsp_priv; in ehl_pse0_common_data()
685 intel_priv->is_pse = true; in ehl_pse0_common_data()
686 plat->bus_id = 2; in ehl_pse0_common_data()
687 plat->addr64 = 32; in ehl_pse0_common_data()
689 plat->clk_ptp_rate = 200000000; in ehl_pse0_common_data()
699 plat->phy_interface = PHY_INTERFACE_MODE_RGMII_ID; in ehl_pse0_rgmii1g_data()
710 plat->phy_interface = PHY_INTERFACE_MODE_SGMII; in ehl_pse0_sgmii1g_data()
711 plat->speed_mode_2500 = intel_speed_mode_2500; in ehl_pse0_sgmii1g_data()
712 plat->serdes_powerup = intel_serdes_powerup; in ehl_pse0_sgmii1g_data()
713 plat->serdes_powerdown = intel_serdes_powerdown; in ehl_pse0_sgmii1g_data()
724 struct intel_priv_data *intel_priv = plat->bsp_priv; in ehl_pse1_common_data()
726 intel_priv->is_pse = true; in ehl_pse1_common_data()
727 plat->bus_id = 3; in ehl_pse1_common_data()
728 plat->addr64 = 32; in ehl_pse1_common_data()
730 plat->clk_ptp_rate = 200000000; in ehl_pse1_common_data()
740 plat->phy_interface = PHY_INTERFACE_MODE_RGMII_ID; in ehl_pse1_rgmii1g_data()
751 plat->phy_interface = PHY_INTERFACE_MODE_SGMII; in ehl_pse1_sgmii1g_data()
752 plat->speed_mode_2500 = intel_speed_mode_2500; in ehl_pse1_sgmii1g_data()
753 plat->serdes_powerup = intel_serdes_powerup; in ehl_pse1_sgmii1g_data()
754 plat->serdes_powerdown = intel_serdes_powerdown; in ehl_pse1_sgmii1g_data()
765 plat->rx_queues_to_use = 6; in tgl_common_data()
766 plat->tx_queues_to_use = 4; in tgl_common_data()
767 plat->clk_ptp_rate = 204800000; in tgl_common_data()
768 plat->speed_mode_2500 = intel_speed_mode_2500; in tgl_common_data()
770 plat->safety_feat_cfg->tsoee = 1; in tgl_common_data()
771 plat->safety_feat_cfg->mrxpee = 0; in tgl_common_data()
772 plat->safety_feat_cfg->mestee = 1; in tgl_common_data()
773 plat->safety_feat_cfg->mrxee = 1; in tgl_common_data()
774 plat->safety_feat_cfg->mtxee = 1; in tgl_common_data()
775 plat->safety_feat_cfg->epsi = 0; in tgl_common_data()
776 plat->safety_feat_cfg->edpp = 0; in tgl_common_data()
777 plat->safety_feat_cfg->prtyen = 0; in tgl_common_data()
778 plat->safety_feat_cfg->tmouten = 0; in tgl_common_data()
786 plat->bus_id = 1; in tgl_sgmii_phy0_data()
787 plat->phy_interface = PHY_INTERFACE_MODE_SGMII; in tgl_sgmii_phy0_data()
788 plat->serdes_powerup = intel_serdes_powerup; in tgl_sgmii_phy0_data()
789 plat->serdes_powerdown = intel_serdes_powerdown; in tgl_sgmii_phy0_data()
800 plat->bus_id = 2; in tgl_sgmii_phy1_data()
801 plat->phy_interface = PHY_INTERFACE_MODE_SGMII; in tgl_sgmii_phy1_data()
802 plat->serdes_powerup = intel_serdes_powerup; in tgl_sgmii_phy1_data()
803 plat->serdes_powerdown = intel_serdes_powerdown; in tgl_sgmii_phy1_data()
814 plat->bus_id = 1; in adls_sgmii_phy0_data()
815 plat->phy_interface = PHY_INTERFACE_MODE_SGMII; in adls_sgmii_phy0_data()
829 plat->bus_id = 2; in adls_sgmii_phy1_data()
830 plat->phy_interface = PHY_INTERFACE_MODE_SGMII; in adls_sgmii_phy1_data()
882 * The asset tag "6ES7647-0AA00-0YA2" is only for IOT2020 which
890 "6ES7647-0AA00-0YA2"),
927 plat->bus_id = pci_dev_id(pdev); in quark_default_data()
928 plat->phy_addr = ret; in quark_default_data()
929 plat->phy_interface = PHY_INTERFACE_MODE_RMII; in quark_default_data()
931 plat->dma_cfg->pbl = 16; in quark_default_data()
932 plat->dma_cfg->pblx8 = true; in quark_default_data()
933 plat->dma_cfg->fixed_burst = 1; in quark_default_data()
951 dev_info(&pdev->dev, "%s: Single IRQ enablement failed\n", in stmmac_config_single_msi()
956 res->irq = pci_irq_vector(pdev, 0); in stmmac_config_single_msi()
957 res->wol_irq = res->irq; in stmmac_config_single_msi()
958 plat->multi_msi_en = 0; in stmmac_config_single_msi()
959 dev_info(&pdev->dev, "%s: Single IRQ enablement successful\n", in stmmac_config_single_msi()
972 if (plat->msi_rx_base_vec >= STMMAC_MSI_VEC_MAX || in stmmac_config_multi_msi()
973 plat->msi_tx_base_vec >= STMMAC_MSI_VEC_MAX) { in stmmac_config_multi_msi()
974 dev_info(&pdev->dev, "%s: Invalid RX & TX vector defined\n", in stmmac_config_multi_msi()
976 return -1; in stmmac_config_multi_msi()
982 dev_info(&pdev->dev, "%s: multi MSI enablement failed\n", in stmmac_config_multi_msi()
988 for (i = 0; i < plat->rx_queues_to_use; i++) { in stmmac_config_multi_msi()
989 res->rx_irq[i] = pci_irq_vector(pdev, in stmmac_config_multi_msi()
990 plat->msi_rx_base_vec + i * 2); in stmmac_config_multi_msi()
994 for (i = 0; i < plat->tx_queues_to_use; i++) { in stmmac_config_multi_msi()
995 res->tx_irq[i] = pci_irq_vector(pdev, in stmmac_config_multi_msi()
996 plat->msi_tx_base_vec + i * 2); in stmmac_config_multi_msi()
999 if (plat->msi_mac_vec < STMMAC_MSI_VEC_MAX) in stmmac_config_multi_msi()
1000 res->irq = pci_irq_vector(pdev, plat->msi_mac_vec); in stmmac_config_multi_msi()
1001 if (plat->msi_wol_vec < STMMAC_MSI_VEC_MAX) in stmmac_config_multi_msi()
1002 res->wol_irq = pci_irq_vector(pdev, plat->msi_wol_vec); in stmmac_config_multi_msi()
1003 if (plat->msi_lpi_vec < STMMAC_MSI_VEC_MAX) in stmmac_config_multi_msi()
1004 res->lpi_irq = pci_irq_vector(pdev, plat->msi_lpi_vec); in stmmac_config_multi_msi()
1005 if (plat->msi_sfty_ce_vec < STMMAC_MSI_VEC_MAX) in stmmac_config_multi_msi()
1006 res->sfty_ce_irq = pci_irq_vector(pdev, plat->msi_sfty_ce_vec); in stmmac_config_multi_msi()
1007 if (plat->msi_sfty_ue_vec < STMMAC_MSI_VEC_MAX) in stmmac_config_multi_msi()
1008 res->sfty_ue_irq = pci_irq_vector(pdev, plat->msi_sfty_ue_vec); in stmmac_config_multi_msi()
1010 plat->multi_msi_en = 1; in stmmac_config_multi_msi()
1011 dev_info(&pdev->dev, "%s: multi MSI enablement successful\n", __func__); in stmmac_config_multi_msi()
1026 * to take "ownership" of the device or an error code(-ve no) otherwise.
1031 struct stmmac_pci_info *info = (struct stmmac_pci_info *)id->driver_data; in intel_eth_pci_probe()
1037 intel_priv = devm_kzalloc(&pdev->dev, sizeof(*intel_priv), GFP_KERNEL); in intel_eth_pci_probe()
1039 return -ENOMEM; in intel_eth_pci_probe()
1041 plat = devm_kzalloc(&pdev->dev, sizeof(*plat), GFP_KERNEL); in intel_eth_pci_probe()
1043 return -ENOMEM; in intel_eth_pci_probe()
1045 plat->mdio_bus_data = devm_kzalloc(&pdev->dev, in intel_eth_pci_probe()
1046 sizeof(*plat->mdio_bus_data), in intel_eth_pci_probe()
1048 if (!plat->mdio_bus_data) in intel_eth_pci_probe()
1049 return -ENOMEM; in intel_eth_pci_probe()
1051 plat->dma_cfg = devm_kzalloc(&pdev->dev, sizeof(*plat->dma_cfg), in intel_eth_pci_probe()
1053 if (!plat->dma_cfg) in intel_eth_pci_probe()
1054 return -ENOMEM; in intel_eth_pci_probe()
1056 plat->safety_feat_cfg = devm_kzalloc(&pdev->dev, in intel_eth_pci_probe()
1057 sizeof(*plat->safety_feat_cfg), in intel_eth_pci_probe()
1059 if (!plat->safety_feat_cfg) in intel_eth_pci_probe()
1060 return -ENOMEM; in intel_eth_pci_probe()
1065 dev_err(&pdev->dev, "%s: ERROR: failed to enable device\n", in intel_eth_pci_probe()
1076 plat->bsp_priv = intel_priv; in intel_eth_pci_probe()
1077 intel_priv->mdio_adhoc_addr = INTEL_MGBE_ADHOC_ADDR; in intel_eth_pci_probe()
1078 intel_priv->crossts_adj = 1; in intel_eth_pci_probe()
1084 plat->msi_mac_vec = STMMAC_MSI_VEC_MAX; in intel_eth_pci_probe()
1085 plat->msi_wol_vec = STMMAC_MSI_VEC_MAX; in intel_eth_pci_probe()
1086 plat->msi_lpi_vec = STMMAC_MSI_VEC_MAX; in intel_eth_pci_probe()
1087 plat->msi_sfty_ce_vec = STMMAC_MSI_VEC_MAX; in intel_eth_pci_probe()
1088 plat->msi_sfty_ue_vec = STMMAC_MSI_VEC_MAX; in intel_eth_pci_probe()
1089 plat->msi_rx_base_vec = STMMAC_MSI_VEC_MAX; in intel_eth_pci_probe()
1090 plat->msi_tx_base_vec = STMMAC_MSI_VEC_MAX; in intel_eth_pci_probe()
1092 ret = info->setup(pdev, plat); in intel_eth_pci_probe()
1099 if (plat->eee_usecs_rate > 0) { in intel_eth_pci_probe()
1102 tx_lpi_usec = (plat->eee_usecs_rate / 1000000) - 1; in intel_eth_pci_probe()
1110 dev_err(&pdev->dev, "%s: ERROR: failed to enable IRQ\n", in intel_eth_pci_probe()
1116 ret = stmmac_dvr_probe(&pdev->dev, plat, &res); in intel_eth_pci_probe()
1124 clk_disable_unprepare(plat->stmmac_clk); in intel_eth_pci_probe()
1125 clk_unregister_fixed_rate(plat->stmmac_clk); in intel_eth_pci_probe()
1138 struct net_device *ndev = dev_get_drvdata(&pdev->dev); in intel_eth_pci_remove()
1141 stmmac_dvr_remove(&pdev->dev); in intel_eth_pci_remove()
1143 clk_disable_unprepare(priv->plat->stmmac_clk); in intel_eth_pci_remove()
1144 clk_unregister_fixed_rate(priv->plat->stmmac_clk); in intel_eth_pci_remove()
1189 /* Intel(R) Programmable Services Engine (Intel(R) PSE) consist of 2 MAC
1229 .name = "intel-eth-pci",
1240 MODULE_DESCRIPTION("INTEL 10/100/1000 Ethernet PCI driver");