• Thomas Petazzoni's avatar
    PCI: mvebu: Fix PCI I/O mapping creation sequence · 95375f2a
    Thomas Petazzoni authored
    Commit ee160438 ("PCI: mvebu: Only remap I/O space if configured") had
    the side effect that the PCI I/O mapping was created much earlier than
    before, at a point where the probe() of the driver could still fail. This
    is for example a problem if one gets an -EPROBE_DEFER at some point during
    probe(), after pci_ioremap_io() has been called.
    
    Indeed, there is currently no function to undo what pci_ioremap_io() did,
    and switching to pci_remap_iospace() is not an option in pci-mvebu due to
    the need for special memory attributes on Armada 38x.
    
    Reverting ee160438 ("PCI: mvebu: Only remap I/O space if configured")
    would be a possibility, but it would require also reverting 42342073
    ("PCI: mvebu: Convert to use pci_host_bridge directly"). So instead, we use
    an open-coded version of pci_host_probe() that creates the PCI I/O mapping
    at a point where we are guaranteed not to fail anymore.
    
    Fixes: ee160438 ("PCI: mvebu: Only remap I/O space if configured")
    Reported-by: Jan Kundrát's avatarJan Kundrát <[email protected]>
    Tested-by: Jan Kundrát's avatarJan Kundrát <[email protected]>
    Signed-off-by: Thomas Petazzoni's avatarThomas Petazzoni <[email protected]>
    Signed-off-by: default avatarBjorn Helgaas <[email protected]>
    Acked-by: default avatarLorenzo Pieralisi <[email protected]>
    95375f2a
pci-mvebu.c 33.4 KB