linux/arch/mips/lib/iomap-pci.c
<<
>>
Prefs
   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
  16void __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