OSDN Git Service

PCI: mvebu: Fix PCI I/O mapping creation sequence
authorThomas Petazzoni <thomas.petazzoni@bootlin.com>
Mon, 1 Oct 2018 12:49:34 +0000 (14:49 +0200)
committerBjorn Helgaas <bhelgaas@google.com>
Mon, 1 Oct 2018 20:42:09 +0000 (15:42 -0500)
commit95375f2ab2960c135484d83ea9f8f357cb1be26a
tree353bdc9e437a696eb1f29ab34b01016544643ac7
parent573bcd380921b5216b62dcd072ec426f5ecbeb9d
PCI: mvebu: Fix PCI I/O mapping creation sequence

Commit ee1604381a371 ("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 ee1604381a371 ("PCI: mvebu: Only remap I/O space if configured")
would be a possibility, but it would require also reverting 42342073e38b5
("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: ee1604381a371 ("PCI: mvebu: Only remap I/O space if configured")
Reported-by: Jan Kundrát <jan.kundrat@cesnet.cz>
Tested-by: Jan Kundrát <jan.kundrat@cesnet.cz>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
drivers/pci/controller/pci-mvebu.c