• Home
  • Raw
  • Download

Lines Matching +full:ecam +full:- +full:based

1 // SPDX-License-Identifier: GPL-2.0+
5 * Copyright (c) 2012 - 2014 Xilinx, Inc.
7 * Based on the Tegra PCIe driver
89 /* ECAM definitions */
97 * struct xilinx_pcie_port - PCIe port information
122 return readl(port->reg_base + reg); in pcie_read()
127 writel(val, port->reg_base + reg); in pcie_write()
137 * xilinx_pcie_clear_err_interrupts - Clear Error Interrupts
142 struct device *dev = port->dev; in xilinx_pcie_clear_err_interrupts()
154 * xilinx_pcie_valid_device - Check if a valid device is present on bus
162 struct xilinx_pcie_port *port = bus->sysdata; in xilinx_pcie_valid_device()
165 if (bus->number != port->root_busno) in xilinx_pcie_valid_device()
170 if (bus->number == port->root_busno && devfn > 0) in xilinx_pcie_valid_device()
177 * xilinx_pcie_map_bus - Get configuration base
188 struct xilinx_pcie_port *port = bus->sysdata; in xilinx_pcie_map_bus()
194 relbus = (bus->number << ECAM_BUS_NUM_SHIFT) | in xilinx_pcie_map_bus()
197 return port->reg_base + relbus + where; in xilinx_pcie_map_bus()
210 * xilinx_pcie_destroy_msi - Free MSI number
223 dev_err(port->dev, "Trying to free unused MSI#%d\n", irq); in xilinx_pcie_destroy_msi()
230 * xilinx_pcie_assign_msi - Allocate MSI number
242 return -ENOSPC; in xilinx_pcie_assign_msi()
248 * xilinx_msi_teardown_irq - Destroy the MSI
260 * xilinx_pcie_msi_setup_irq - Setup MSI request
271 struct xilinx_pcie_port *port = pdev->bus->sysdata; in xilinx_pcie_msi_setup_irq()
281 irq = irq_create_mapping(port->msi_domain, hwirq); in xilinx_pcie_msi_setup_irq()
283 return -EINVAL; in xilinx_pcie_msi_setup_irq()
287 msg_addr = virt_to_phys((void *)port->msi_pages); in xilinx_pcie_msi_setup_irq()
314 * xilinx_pcie_msi_map - Set the handler for the MSI and mark IRQ as valid
325 irq_set_chip_data(irq, domain->host_data); in xilinx_pcie_msi_map()
336 * xilinx_pcie_enable_msi - Enable MSI support
343 port->msi_pages = __get_free_pages(GFP_KERNEL, 0); in xilinx_pcie_enable_msi()
344 if (!port->msi_pages) in xilinx_pcie_enable_msi()
345 return -ENOMEM; in xilinx_pcie_enable_msi()
347 msg_addr = virt_to_phys((void *)port->msi_pages); in xilinx_pcie_enable_msi()
357 * xilinx_pcie_intx_map - Set the handler for the INTx and mark IRQ as valid
368 irq_set_chip_data(irq, domain->host_data); in xilinx_pcie_intx_map()
382 * xilinx_pcie_intr_handler - Interrupt Service Handler
391 struct device *dev = port->dev; in xilinx_pcie_intr_handler()
415 dev_warn(dev, "ECAM access timeout\n"); in xilinx_pcie_intr_handler()
448 val = irq_find_mapping(port->leg_domain, val); in xilinx_pcie_intr_handler()
496 * xilinx_pcie_init_irq_domain - Initialize IRQ domain
503 struct device *dev = port->dev; in xilinx_pcie_init_irq_domain()
504 struct device_node *node = dev->of_node; in xilinx_pcie_init_irq_domain()
512 return -ENODEV; in xilinx_pcie_init_irq_domain()
515 port->leg_domain = irq_domain_add_linear(pcie_intc_node, PCI_NUM_INTX, in xilinx_pcie_init_irq_domain()
519 if (!port->leg_domain) { in xilinx_pcie_init_irq_domain()
521 return -ENODEV; in xilinx_pcie_init_irq_domain()
526 port->msi_domain = irq_domain_add_linear(node, in xilinx_pcie_init_irq_domain()
530 if (!port->msi_domain) { in xilinx_pcie_init_irq_domain()
532 return -ENODEV; in xilinx_pcie_init_irq_domain()
544 * xilinx_pcie_init_port - Initialize hardware
549 struct device *dev = port->dev; in xilinx_pcie_init_port()
575 * xilinx_pcie_parse_dt - Parse Device tree
582 struct device *dev = port->dev; in xilinx_pcie_parse_dt()
583 struct device_node *node = dev->of_node; in xilinx_pcie_parse_dt()
591 return -EINVAL; in xilinx_pcie_parse_dt()
600 port->reg_base = devm_pci_remap_cfg_resource(dev, &regs); in xilinx_pcie_parse_dt()
601 if (IS_ERR(port->reg_base)) in xilinx_pcie_parse_dt()
602 return PTR_ERR(port->reg_base); in xilinx_pcie_parse_dt()
604 port->irq = irq_of_parse_and_map(node, 0); in xilinx_pcie_parse_dt()
605 err = devm_request_irq(dev, port->irq, xilinx_pcie_intr_handler, in xilinx_pcie_parse_dt()
607 "xilinx-pcie", port); in xilinx_pcie_parse_dt()
609 dev_err(dev, "unable to request irq %d\n", port->irq); in xilinx_pcie_parse_dt()
617 * xilinx_pcie_probe - Probe function
624 struct device *dev = &pdev->dev; in xilinx_pcie_probe()
632 if (!dev->of_node) in xilinx_pcie_probe()
633 return -ENODEV; in xilinx_pcie_probe()
637 return -ENODEV; in xilinx_pcie_probe()
641 port->dev = dev; in xilinx_pcie_probe()
669 list_splice_init(&res, &bridge->windows); in xilinx_pcie_probe()
670 bridge->dev.parent = dev; in xilinx_pcie_probe()
671 bridge->sysdata = port; in xilinx_pcie_probe()
672 bridge->busnr = 0; in xilinx_pcie_probe()
673 bridge->ops = &xilinx_pcie_ops; in xilinx_pcie_probe()
674 bridge->map_irq = of_irq_parse_and_map_pci; in xilinx_pcie_probe()
675 bridge->swizzle_irq = pci_common_swizzle; in xilinx_pcie_probe()
679 bridge->msi = &xilinx_pcie_msi_chip; in xilinx_pcie_probe()
685 bus = bridge->bus; in xilinx_pcie_probe()
688 list_for_each_entry(child, &bus->children, node) in xilinx_pcie_probe()
699 { .compatible = "xlnx,axi-pcie-host-1.00.a", },
705 .name = "xilinx-pcie",