• Thomas Petazzoni's avatar
    pci: mvebu: no longer fake the slot location of downstream devices · f4ac9901
    Thomas Petazzoni authored
    By default, the Marvell hardware, for each PCIe interface, exhibits
    the following devices:
    
     * On slot 0, a "Marvell Memory controller", identical on all PCIe
       interfaces, and which isn't useful when the Marvell SoC is the PCIe
       root complex (i.e, the normal case when we run Linux on the Marvell
       SoC).
    
     * On slot 1, the real PCIe card connected into the PCIe slot of the
       board.
    
    So, what the Marvell PCIe driver was doing in its PCI-to-PCI bridge
    emulation is that when the Linux PCI core was trying to access the
    device in slot 0, we were in fact forwarding the configuration
    transaction to the device in slot 1. For all other slots, we were
    telling the Linux PCI core that there was no device connected.
    
    However, new versions of bootloaders from Marvell change the default
    PCIe configuration, and make the real device appear in slot 0, and the
    "Marvell Memory controller" in slot 1.
    
    Therefore, this commit modifies the Marvell PCIe driver to adjust the
    PCIe hardware configuration to make sure that this behavior (real
    device in slot 0, "Marvell Memory controller" in slot 1) is the one
    we'll see regardless of what the bootloader has done. It allows to
    remove the little hack that was forwarding configuration transactions
    on slot 0 to slot 1, which is nice.
    Signed-off-by: default avatarThomas Petazzoni <thomas.petazzoni@free-electrons.com>
    Acked-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    Signed-off-by: default avatarJason Cooper <jason@lakedaemon.net>
    f4ac9901
pci-mvebu.c 22.3 KB