On 22 April 2014 15:41, Liviu Dudau <Liviu.Dudau@xxxxxxx> wrote: > On Tue, Apr 22, 2014 at 09:58:28AM +0100, Sandeepa Prabhu wrote: >> On 14 March 2014 21:04, Liviu Dudau <Liviu.Dudau@xxxxxxx> wrote: >> > Hi, >> > >> > This patch adds support for PCI to AArch64. It is based on my v7 patch >> > that adds support for creating generic host bridge structure from >> > device tree. With that in place, I was able to boot a platform that >> > has PCIe host bridge support and use a PCIe network card. >> Hi Liviu, >> >> Are these patches (including your other patchset for device tree host >> bridge support ) available on a public git repo I can checkout from? > > Yes, I have pushed them into git://linux-arm.org/linux-ld.git Thanks Liviu, Just to understand, is the X-gene PCIe (https://lwn.net/Articles/589733/) verified using the same patchset? ~Sandeepa > > Best regards, > Liviu > >> >> Thanks, >> ~Sandeepa >> >> > >> > I have dropped the RFC tag from the subject as I now have the ambitious goal >> > of trying to get it mainlined. >> > >> > Changes from v6: >> > - Guard the pci_domain_nr() inline implementation with #ifdef CONFIG_PCI as >> > to avoid conflict with default empty version present in include/linux/pci.h. >> > Thanks to Jingoo Han for catching this. >> > >> > Changes from v5: >> > - Removed pcibios_fixup_bridge_ranges() as the week default version is fine. >> > - Removed the ALIGN() call in pcibios_align_resource() >> > - Stopped exporting pcibios_align_resource() >> > >> > Changes from v4: >> > - Fixed the pci_domain_nr() implementation for arm64. Now we use >> > find_pci_host_bride() to find the host bridge before we retrieve >> > the domain number. >> > >> > Changes from v3: >> > - Added Acks accumulated so far ;) >> > - Still carrying Catalin's patch for moving the PCI_IO_BASE until it >> > lands in linux-next or mainline, in order to ease applying the series >> > >> > Changes from v2: >> > - Implement an arch specific version of pci_register_io_range() and >> > pci_address_to_pio(). >> > - Return 1 from pci_proc_domain(). >> > >> > Changes from v1: >> > - Added Catalin's patch for moving the PCI_IO_BASE location and extend >> > its size to 16MB >> > - Integrated Arnd's version of pci_ioremap_io that uses a bitmap for >> > keeping track of assigned IO space and returns an io_offset. At the >> > moment the code is added in arch/arm64 but it can be moved in drivers/pci. >> > - Added a fix for the generic ioport_map() function when !CONFIG_GENERIC_IOMAP >> > as suggested by Arnd. >> > >> > v6 thread here: https://lkml.org/lkml/2014/3/5/41 >> > v5 thread here: https://lkml.org/lkml/2014/3/4/307 >> > v4 thread here: https://lkml.org/lkml/2014/3/3/298 >> > v3 thread here: https://lkml.org/lkml/2014/2/28/211 >> > v2 thread here: https://lkml.org/lkml/2014/2/27/255 >> > v1 thread here: https://lkml.org/lkml/2014/2/3/389 >> > >> > >> > The API used is different from the one used by ARM architecture. There is >> > no pci_common_init_dev() function and no hw_pci structure, as that is no >> > longer needed. Once the last signature is added to the legal agreement, I >> > will post the host bridge driver code that I am using. Meanwhile, here >> > is an example of what the probe function looks like, posted as an example: >> > >> > static int myhostbridge_probe(struct platform_device *pdev) >> > { >> > int err; >> > struct device_node *dev; >> > struct pci_host_bridge *bridge; >> > struct myhostbridge_port *pp; >> > resource_size_t lastbus; >> > >> > dev = pdev->dev.of_node; >> > >> > if (!of_device_is_available(dev)) { >> > pr_warn("%s: disabled\n", dev->full_name); >> > return -ENODEV; >> > } >> > >> > pp = kzalloc(sizeof(struct myhostbridge_port), GFP_KERNEL); >> > if (!pp) >> > return -ENOMEM; >> > >> > bridge = of_create_pci_host_bridge(&pdev->dev, &myhostbridge_ops, pp); >> > if (IS_ERR(bridge)) { >> > err = PTR_ERR(bridge); >> > goto bridge_create_fail; >> > } >> > >> > err = myhostbridge_setup(bridge->bus); >> > if (err) >> > goto bridge_setup_fail; >> > >> > /* We always enable PCI domains and we keep domain 0 backward >> > * compatible in /proc for video cards >> > */ >> > pci_add_flags(PCI_ENABLE_PROC_DOMAINS); >> > pci_add_flags(PCI_REASSIGN_ALL_BUS | PCI_REASSIGN_ALL_RSRC); >> > >> > lastbus = pci_scan_child_bus(bridge->bus); >> > pci_bus_update_busn_res_end(bridge->bus, lastbus); >> > >> > pci_assign_unassigned_bus_resources(bridge->bus); >> > >> > pci_bus_add_devices(bridge->bus); >> > >> > return 0; >> > >> > bridge_setup_fail: >> > put_device(&bridge->dev); >> > device_unregister(&bridge->dev); >> > bridge_create_fail: >> > kfree(pp); >> > return err; >> > } >> > >> > Best regards, >> > Liviu >> > >> > >> > Catalin Marinas (1): >> > arm64: Extend the PCI I/O space to 16MB >> > >> > Liviu Dudau (2): >> > Fix ioport_map() for !CONFIG_GENERIC_IOMAP cases. >> > arm64: Add architecture support for PCI >> > >> > Documentation/arm64/memory.txt | 16 +-- >> > arch/arm64/Kconfig | 19 +++- >> > arch/arm64/include/asm/Kbuild | 1 + >> > arch/arm64/include/asm/io.h | 5 +- >> > arch/arm64/include/asm/pci.h | 51 +++++++++ >> > arch/arm64/kernel/Makefile | 1 + >> > arch/arm64/kernel/pci.c | 173 +++++++++++++++++++++++++++++++ >> > include/asm-generic/io.h | 2 +- >> > 8 files changed, 258 insertions(+), 10 deletions(-) >> > create mode 100644 arch/arm64/include/asm/pci.h >> > create mode 100644 arch/arm64/kernel/pci.c >> > >> > -- >> > 1.9.0 >> > >> > >> > _______________________________________________ >> > linux-arm-kernel mailing list >> > linux-arm-kernel@xxxxxxxxxxxxxxxxxxx >> > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel >> > > -- > ==================== > | I would like to | > | fix the world, | > | but they're not | > | giving me the | > \ source code! / > --------------- > ¯\_(ツ)_/¯ > -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html