Lines Matching refs:pcie

146 	struct apple_pcie	*pcie;
207 struct apple_pcie *pcie = domain->host_data;
208 struct irq_fwspec fwspec = pcie->fwspec;
212 mutex_lock(&pcie->lock);
214 hwirq = bitmap_find_free_region(pcie->bitmap, pcie->nvecs,
217 mutex_unlock(&pcie->lock);
241 struct apple_pcie *pcie = domain->host_data;
243 mutex_lock(&pcie->lock);
245 bitmap_release_region(pcie->bitmap, d->hwirq, order_base_2(nr_irqs));
247 mutex_unlock(&pcie->lock);
379 irq = irq_of_parse_and_map(to_of_node(dev_fwnode(port->pcie->dev)),
402 writel_relaxed((ilog2(port->pcie->nvecs) << PORT_MSICFG_L2MSINUM_SHIFT) |
415 dev_info_ratelimited(port->pcie->dev, "Link up on %pOF\n",
417 complete_all(&port->pcie->event);
420 dev_info_ratelimited(port->pcie->dev, "Link down on %pOF\n",
465 static int apple_pcie_setup_refclk(struct apple_pcie *pcie,
471 res = readl_relaxed_poll_timeout(pcie->base + CORE_RC_PHYIF_STAT, stat,
477 rmw_set(CORE_LANE_CTL_CFGACC, pcie->base + CORE_LANE_CTL(port->idx));
478 rmw_set(CORE_LANE_CFG_REFCLK0REQ, pcie->base + CORE_LANE_CFG(port->idx));
480 res = readl_relaxed_poll_timeout(pcie->base + CORE_LANE_CFG(port->idx),
486 rmw_set(CORE_LANE_CFG_REFCLK1REQ, pcie->base + CORE_LANE_CFG(port->idx));
487 res = readl_relaxed_poll_timeout(pcie->base + CORE_LANE_CFG(port->idx),
494 rmw_clear(CORE_LANE_CTL_CFGACC, pcie->base + CORE_LANE_CTL(port->idx));
496 rmw_set(CORE_LANE_CFG_REFCLKEN, pcie->base + CORE_LANE_CFG(port->idx));
510 static int apple_pcie_setup_port(struct apple_pcie *pcie,
513 struct platform_device *platform = to_platform_device(pcie->dev);
519 reset = devm_fwnode_gpiod_get(pcie->dev, of_fwnode_handle(np), "reset",
524 port = devm_kzalloc(pcie->dev, sizeof(*port), GFP_KERNEL);
534 port->pcie = pcie;
546 ret = apple_pcie_setup_refclk(pcie, port);
563 dev_err(pcie->dev, "port %pOF ready wait timeout\n", np);
581 dev_dbg(pcie->dev, "%pOF: %d RID/SID mapping entries\n", np, i);
585 list_add_tail(&port->entry, &pcie->ports);
586 init_completion(&pcie->event);
593 if (!wait_for_completion_timeout(&pcie->event, HZ / 10))
594 dev_warn(pcie->dev, "%pOF link didn't come up\n", np);
599 static int apple_msi_init(struct apple_pcie *pcie)
601 struct fwnode_handle *fwnode = dev_fwnode(pcie->dev);
612 args.args_count + 1, &pcie->nvecs);
617 &pcie->fwspec);
619 pcie->bitmap = devm_bitmap_zalloc(pcie->dev, pcie->nvecs, GFP_KERNEL);
620 if (!pcie->bitmap)
623 parent = irq_find_matching_fwspec(&pcie->fwspec, DOMAIN_BUS_WIRED);
625 dev_err(pcie->dev, "failed to find parent domain\n");
629 parent = irq_domain_create_hierarchy(parent, 0, pcie->nvecs, fwnode,
630 &apple_msi_domain_ops, pcie);
632 dev_err(pcie->dev, "failed to create IRQ domain\n");
637 pcie->domain = pci_msi_create_irq_domain(fwnode, &apple_msi_info,
639 if (!pcie->domain) {
640 dev_err(pcie->dev, "failed to create MSI domain\n");
651 struct apple_pcie *pcie = cfg->priv;
662 list_for_each_entry(port, &pcie->ports, entry) {
679 err = of_map_id(port->pcie->dev->of_node, rid, "iommu-map",
684 mutex_lock(&port->pcie->lock);
696 mutex_unlock(&port->pcie->lock);
707 mutex_lock(&port->pcie->lock);
721 mutex_unlock(&port->pcie->lock);
768 struct apple_pcie *pcie;
771 pcie = devm_kzalloc(dev, sizeof(*pcie), GFP_KERNEL);
772 if (!pcie)
775 pcie->dev = dev;
777 mutex_init(&pcie->lock);
779 pcie->base = devm_platform_ioremap_resource(platform, 1);
780 if (IS_ERR(pcie->base))
781 return PTR_ERR(pcie->base);
783 cfg->priv = pcie;
784 INIT_LIST_HEAD(&pcie->ports);
786 ret = apple_msi_init(pcie);
791 ret = apple_pcie_setup_port(pcie, of_port);
793 dev_err(pcie->dev, "Port %pOF setup fail: %d\n", of_port, ret);
827 { .compatible = "apple,pcie", .data = &apple_pcie_cfg_ecam_ops },
835 .name = "pcie-apple",