/* * Based on Linux drivers/pci/controller/pci-host-common.c * Based on Linux drivers/pci/controller/pci-host-generic.c * Based on xen/arch/arm/pci/pci-host-generic.c * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include static int __init nwl_cfg_reg_index(struct dt_device_node *np) { return dt_property_match_string(np, "reg-names", "cfg"); } /* ECAM ops */ const struct pci_ecam_ops nwl_pcie_ops = { .bus_shift = 20, .cfg_reg_index = nwl_cfg_reg_index, .pci_ops = { .map_bus = pci_ecam_map_bus, .read = pci_generic_config_read, .write = pci_generic_config_write, .need_p2m_hwdom_mapping = pci_ecam_need_p2m_hwdom_mapping, } }; static const struct dt_device_match __initconstrel nwl_pcie_dt_match[] = { { .compatible = "xlnx,nwl-pcie-2.11" }, { }, }; static int __init pci_host_generic_probe(struct dt_device_node *dev, const void *data) { return pci_host_common_probe(dev, &nwl_pcie_ops); } DT_DEVICE_START(pci_gen, "PCI HOST ZYNQMP", DEVICE_PCI_HOSTBRIDGE) .dt_match = nwl_pcie_dt_match, .init = pci_host_generic_probe, DT_DEVICE_END /* * Local variables: * mode: C * c-file-style: "BSD" * c-basic-offset: 4 * tab-width: 4 * indent-tabs-mode: nil * End: */