Commit 1fce2d01 authored by Kumar Gala's avatar Kumar Gala

powerpc: Fix boot hang regression on MPC8544DS

Commit 00c5372d caused the MPC8544DS
board to hang at boot.  The MPC8544DS is unique in that it doesn't use
the PCI slots on the ULI (unlike the MPC8572DS or MPC8610HPCD).  So
the dummy read at the end of the address space causes us to hang.

We can detect the situation by comparing the bridge's BARs versus
the root complex.
Signed-off-by: default avatarKumar Gala <galak@kernel.crashing.org>
parent 4a770358
...@@ -219,11 +219,21 @@ static void __devinit quirk_final_uli5249(struct pci_dev *dev) ...@@ -219,11 +219,21 @@ static void __devinit quirk_final_uli5249(struct pci_dev *dev)
int i; int i;
u8 *dummy; u8 *dummy;
struct pci_bus *bus = dev->bus; struct pci_bus *bus = dev->bus;
resource_size_t end = 0;
for (i = PCI_BRIDGE_RESOURCES; i < PCI_BRIDGE_RESOURCES+3; i++) {
unsigned long flags = pci_resource_flags(dev, i);
if ((flags & (IORESOURCE_MEM|IORESOURCE_PREFETCH)) == IORESOURCE_MEM)
end = pci_resource_end(dev, i);
}
for (i = 0; i < PCI_BUS_NUM_RESOURCES; i++) { for (i = 0; i < PCI_BUS_NUM_RESOURCES; i++) {
if ((bus->resource[i]) && if ((bus->resource[i]) &&
(bus->resource[i]->flags & IORESOURCE_MEM)) { (bus->resource[i]->flags & IORESOURCE_MEM)) {
dummy = ioremap(bus->resource[i]->end - 3, 0x4); if (bus->resource[i]->end == end)
dummy = ioremap(bus->resource[i]->start, 0x4);
else
dummy = ioremap(bus->resource[i]->end - 3, 0x4);
if (dummy) { if (dummy) {
in_8(dummy); in_8(dummy);
iounmap(dummy); iounmap(dummy);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment