mirror of https://gitee.com/openkylin/linux.git
powerpc/pci: Fix IO space breakage after of_pci_range_to_resource() change
Commit0b0b0893d4
"of/pci: Fix the conversion of IO ranges into IO resources" changed the behaviour of of_pci_range_to_resource(). Previously it simply populated the resource based on the arguments. Now it calls pci_register_io_range() and pci_address_to_pio(). These both have two implementations depending on whether PCI_IOBASE is defined, which it is not for powerpc. Further complicating matters, both routines are weak, and powerpc implements it's own version of one - pci_address_to_pio(). However powerpc's implementation depends on other initialisations which are done later in boot. The end result is incorrectly initialised IO space. Often we can get away with that, because we don't make much use of IO space. However virtio requires it, so we see eg: pci_bus 0000:00: root bus resource [io 0xffff] (bus address [0xffffffffffffffff-0xffffffffffffffff]) PCI: Cannot allocate resource region 0 of device 0000:00:01.0, will remap virtio-pci 0000:00:01.0: can't enable device: BAR 0 [io size 0x0020] not assigned The simplest fix for now is to just stop using of_pci_range_to_resource(), and open-code the original implementation, that's all we want it to do. Fixes:0b0b0893d4
("of/pci: Fix the conversion of IO ranges into IO resources") Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
0429fbc0bd
commit
aeba3731b1
|
@ -747,7 +747,11 @@ void pci_process_bridge_OF_ranges(struct pci_controller *hose,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (res != NULL) {
|
if (res != NULL) {
|
||||||
of_pci_range_to_resource(&range, dev, res);
|
res->name = dev->full_name;
|
||||||
|
res->flags = range.flags;
|
||||||
|
res->start = range.cpu_addr;
|
||||||
|
res->end = range.cpu_addr + range.size - 1;
|
||||||
|
res->parent = res->child = res->sibling = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue