Message ID | 20210414031240.313852-6-ilya.lipnitskiy@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 3ecb9dc1581eebecaee56decac70e35365260866 |
Headers | show |
Series | MIPS: fixes for PCI legacy drivers (rt2880, rt3883) | expand |
Hi Ilya, On Tue, Apr 13, 2021 at 08:12:37PM -0700, Ilya Lipnitskiy wrote: > Mirror commit aeba3731b150 ("powerpc/pci: Fix IO space breakage after > of_pci_range_to_resource() change"). > > Most MIPS platforms do not define PCI_IOBASE, nor implement > pci_address_to_pio(). Moreover, IO_SPACE_LIMIT is 0xffff for most MIPS > platforms. of_pci_range_to_resource passes the _start address_ of the IO > range into pci_address_to_pio, which then checks it against > IO_SPACE_LIMIT and fails, because for MIPS platforms that use > pci-legacy (pci-lantiq, pci-rt3883, pci-mt7620), IO ranges start much > higher than 0xffff. I think defining PCI_IOBASE and implementing pci_address_to_pio() would be easier in the long run as you will then let the core PCI code do most of the work, but given that this is legacy code I can understand that testing it would not be simple. > > In fact, pci-mt7621 in staging already works around this problem, see > commit 09dd629eeabb ("staging: mt7621-pci: fix io space and properly set > resource limits") > > So just stop using of_pci_range_to_resource, which does not work for > MIPS. > > Fixes PCI errors like: > pci_bus 0000:00: root bus resource [io 0xffffffff] > > Fixes: 0b0b0893d49b ("of/pci: Fix the conversion of IO ranges into IO resources") > Signed-off-by: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com> > Cc: Liviu Dudau <Liviu.Dudau@arm.com> > --- > arch/mips/pci/pci-legacy.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/arch/mips/pci/pci-legacy.c b/arch/mips/pci/pci-legacy.c > index 39052de915f3..3a909194284a 100644 > --- a/arch/mips/pci/pci-legacy.c > +++ b/arch/mips/pci/pci-legacy.c > @@ -166,8 +166,13 @@ void pci_load_of_ranges(struct pci_controller *hose, struct device_node *node) > res = hose->mem_resource; > break; > } > - if (res != NULL) > - of_pci_range_to_resource(&range, node, res); > + if (res != NULL) { > + res->name = node->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; > + } Change looks reasonable to me. Reviewed-by: Liviu Dudau <liviu.dudau@arm.com> Best regards, Liviu > } > } > > -- > 2.31.1 >
diff --git a/arch/mips/pci/pci-legacy.c b/arch/mips/pci/pci-legacy.c index 39052de915f3..3a909194284a 100644 --- a/arch/mips/pci/pci-legacy.c +++ b/arch/mips/pci/pci-legacy.c @@ -166,8 +166,13 @@ void pci_load_of_ranges(struct pci_controller *hose, struct device_node *node) res = hose->mem_resource; break; } - if (res != NULL) - of_pci_range_to_resource(&range, node, res); + if (res != NULL) { + res->name = node->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; + } } }
Mirror commit aeba3731b150 ("powerpc/pci: Fix IO space breakage after of_pci_range_to_resource() change"). Most MIPS platforms do not define PCI_IOBASE, nor implement pci_address_to_pio(). Moreover, IO_SPACE_LIMIT is 0xffff for most MIPS platforms. of_pci_range_to_resource passes the _start address_ of the IO range into pci_address_to_pio, which then checks it against IO_SPACE_LIMIT and fails, because for MIPS platforms that use pci-legacy (pci-lantiq, pci-rt3883, pci-mt7620), IO ranges start much higher than 0xffff. In fact, pci-mt7621 in staging already works around this problem, see commit 09dd629eeabb ("staging: mt7621-pci: fix io space and properly set resource limits") So just stop using of_pci_range_to_resource, which does not work for MIPS. Fixes PCI errors like: pci_bus 0000:00: root bus resource [io 0xffffffff] Fixes: 0b0b0893d49b ("of/pci: Fix the conversion of IO ranges into IO resources") Signed-off-by: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com> Cc: Liviu Dudau <Liviu.Dudau@arm.com> --- arch/mips/pci/pci-legacy.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)