staging: mt7621-pci: stop using of_pci_range_to_resource
authorIlya Lipnitskiy <ilya.lipnitskiy@gmail.com>
Sat, 10 Apr 2021 17:33:31 +0000 (10:33 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 11 Apr 2021 06:43:48 +0000 (08:43 +0200)
The logic here was already overriding the erroneous IO addresses
returned from of_pci_range_to_resource, which is the bulk of the logic.

So stop using it altogether and initialize the fields explicitly, as
done in aeba3731b150 ("powerpc/pci: Fix IO space breakage after
of_pci_range_to_resource() change").

Cc: Sergio Paracuellos <sergio.paracuellos@gmail.com>
Reviewed-by: Sergio Paracuellos <sergio.paracuellos@gmail.com>
Signed-off-by: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com>
Link: https://lore.kernel.org/r/20210410173331.57949-1-ilya.lipnitskiy@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/mt7621-pci/pci-mt7621.c

index 1781c1d..1152501 100644 (file)
@@ -301,18 +301,19 @@ static int mt7621_pci_parse_request_of_pci_ranges(struct pci_host_bridge *host)
 
        /*
         * IO_SPACE_LIMIT for MIPS is 0xffff but this platform uses IO at
-        * upper address 0x001e160000 so we have to get the resource from
-        * the DT because when it has been requested it failed and has been
-        * removed from bridge->dma_ranges and bridge->windows. So parse it
-        * and remap it manually to make things work.
+        * upper address 0x001e160000. of_pci_range_to_resource does not work
+        * well for MIPS platforms that don't define PCI_IOBASE, so set the IO
+        * resource manually instead.
         */
+       pcie->io.name = node->full_name;
+       pcie->io.parent = pcie->io.child = pcie->io.sibling = NULL;
        for_each_of_pci_range(&parser, &range) {
                switch (range.flags & IORESOURCE_TYPE_BITS) {
                case IORESOURCE_IO:
                        pcie->io_map_base =
                                (unsigned long)ioremap(range.cpu_addr,
                                                       range.size);
-                       of_pci_range_to_resource(&range, node, &pcie->io);
+                       pcie->io.flags = range.flags;
                        pcie->io.start = range.cpu_addr;
                        pcie->io.end = range.cpu_addr + range.size - 1;
                        set_io_port_base(pcie->io_map_base);