1 | // SPDX-License-Identifier: GPL-2.0 |
2 | /* |
3 | * Implement the default iomap interfaces |
4 | * |
5 | * (C) Copyright 2004 Linus Torvalds |
6 | * (C) Copyright 2006 Ralf Baechle <ralf@linux-mips.org> |
7 | * (C) Copyright 2007 MIPS Technologies, Inc. |
8 | * written by Ralf Baechle <ralf@linux-mips.org> |
9 | */ |
10 | #include <linux/pci.h> |
11 | #include <linux/export.h> |
12 | #include <asm/io.h> |
13 | |
14 | #ifdef CONFIG_PCI_DRIVERS_LEGACY |
15 | |
16 | void __iomem *__pci_ioport_map(struct pci_dev *dev, |
17 | unsigned long port, unsigned int nr) |
18 | { |
19 | struct pci_controller *ctrl = dev->bus->sysdata; |
20 | unsigned long base = ctrl->io_map_base; |
21 | |
22 | /* This will eventually become a BUG_ON but for now be gentle */ |
23 | if (unlikely(!ctrl->io_map_base)) { |
24 | struct pci_bus *bus = dev->bus; |
25 | char name[8]; |
26 | |
27 | while (bus->parent) |
28 | bus = bus->parent; |
29 | |
30 | ctrl->io_map_base = base = mips_io_port_base; |
31 | |
32 | sprintf(name, "%04x:%02x" , pci_domain_nr(bus), bus->number); |
33 | printk(KERN_WARNING "io_map_base of root PCI bus %s unset. " |
34 | "Trying to continue but you better\nfix this issue or " |
35 | "report it to linux-mips@vger.kernel.org or your " |
36 | "vendor.\n" , name); |
37 | #ifdef CONFIG_PCI_DOMAINS |
38 | panic("To avoid data corruption io_map_base MUST be set with " |
39 | "multiple PCI domains." ); |
40 | #endif |
41 | } |
42 | |
43 | return (void __iomem *) (ctrl->io_map_base + port); |
44 | } |
45 | |
46 | #endif /* CONFIG_PCI_DRIVERS_LEGACY */ |
47 | |