summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergio Paracuellos <sergio.paracuellos@gmail.com>2021-09-25 22:32:23 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2021-10-05 12:36:25 +0200
commit9f76779f24183c5d85a9441016d9dad042411e50 (patch)
tree73812511012f3473f78084bc17aeb147e6ce6111
parent7c2584faa145991558412d135d9e1d3431f47c6d (diff)
downloadlwn-9f76779f24183c5d85a9441016d9dad042411e50.tar.gz
lwn-9f76779f24183c5d85a9441016d9dad042411e50.zip
MIPS: implement architecture-specific 'pci_remap_iospace()'
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>
-rw-r--r--arch/mips/include/asm/pci.h2
-rw-r--r--arch/mips/pci/pci-generic.c14
2 files changed, 16 insertions, 0 deletions
diff --git a/arch/mips/include/asm/pci.h b/arch/mips/include/asm/pci.h
index 9ffc8192adae..35270984a5f0 100644
--- a/arch/mips/include/asm/pci.h
+++ b/arch/mips/include/asm/pci.h
@@ -20,6 +20,8 @@
#include <linux/list.h>
#include <linux/of.h>
+#define pci_remap_iospace pci_remap_iospace
+
#ifdef CONFIG_PCI_DRIVERS_LEGACY
/*
diff --git a/arch/mips/pci/pci-generic.c b/arch/mips/pci/pci-generic.c
index 95b00017886c..18eb8a453a86 100644
--- a/arch/mips/pci/pci-generic.c
+++ b/arch/mips/pci/pci-generic.c
@@ -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;
+}