MIPS: implement architecture-specific 'pci_remap_iospace()'
authorSergio Paracuellos <sergio.paracuellos@gmail.com>
Sat, 25 Sep 2021 20:32:23 +0000 (22:32 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 5 Oct 2021 10:36:25 +0000 (12:36 +0200)
To make PCI IO work we need to properly virtually map IO cpu physical address
and set this virtual address as the address of the first PCI IO port which
is set using function 'set_io_port_base()'.

Acked-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Signed-off-by: Sergio Paracuellos <sergio.paracuellos@gmail.com>
Link: https://lore.kernel.org/r/20210925203224.10419-6-sergio.paracuellos@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/mips/include/asm/pci.h
arch/mips/pci/pci-generic.c

index 9ffc819..3527098 100644 (file)
@@ -20,6 +20,8 @@
 #include <linux/list.h>
 #include <linux/of.h>
 
+#define pci_remap_iospace pci_remap_iospace
+
 #ifdef CONFIG_PCI_DRIVERS_LEGACY
 
 /*
index 95b0001..18eb8a4 100644 (file)
@@ -46,3 +46,17 @@ void pcibios_fixup_bus(struct pci_bus *bus)
 {
        pci_read_bridge_bases(bus);
 }
+
+int pci_remap_iospace(const struct resource *res, phys_addr_t phys_addr)
+{
+       unsigned long vaddr;
+
+       if (res->start != 0) {
+               WARN_ONCE(1, "resource start address is not zero\n");
+               return -ENODEV;
+       }
+
+       vaddr = (unsigned long)ioremap(phys_addr, resource_size(res));
+       set_io_port_base(vaddr);
+       return 0;
+}