| From 88db7186bb95d95d3c587cd4a359b39a7fad9846 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 13 Apr 2021 20:12:37 -0700 |
| Subject: MIPS: pci-legacy: stop using of_pci_range_to_resource |
| |
| From: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com> |
| |
| [ Upstream commit 3ecb9dc1581eebecaee56decac70e35365260866 ] |
| |
| 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> |
| Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| 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; |
| + } |
| } |
| } |
| |
| -- |
| 2.30.2 |
| |