1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0
21da177e4SLinus Torvalds /*
31da177e4SLinus Torvalds * linux/arch/arm/mach-footbridge/ebsa285-pci.c
41da177e4SLinus Torvalds *
51da177e4SLinus Torvalds * PCI bios-type initialisation for PCI machines
61da177e4SLinus Torvalds *
71da177e4SLinus Torvalds * Bits taken from various places.
81da177e4SLinus Torvalds */
91da177e4SLinus Torvalds #include <linux/kernel.h>
101da177e4SLinus Torvalds #include <linux/pci.h>
111da177e4SLinus Torvalds #include <linux/init.h>
121da177e4SLinus Torvalds
131da177e4SLinus Torvalds #include <asm/irq.h>
141da177e4SLinus Torvalds #include <asm/mach/pci.h>
151da177e4SLinus Torvalds #include <asm/mach-types.h>
161da177e4SLinus Torvalds
17*30e3b4f2SRussell King static int irqmap_ebsa285[] = { IRQ_IN3, IRQ_IN1, IRQ_IN0, IRQ_PCI };
181da177e4SLinus Torvalds
ebsa285_map_irq(const struct pci_dev * dev,u8 slot,u8 pin)19*30e3b4f2SRussell King static int ebsa285_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
201da177e4SLinus Torvalds {
211da177e4SLinus Torvalds if (dev->vendor == PCI_VENDOR_ID_CONTAQ &&
221da177e4SLinus Torvalds dev->device == PCI_DEVICE_ID_CONTAQ_82C693)
231da177e4SLinus Torvalds switch (PCI_FUNC(dev->devfn)) {
241da177e4SLinus Torvalds case 1: return 14;
251da177e4SLinus Torvalds case 2: return 15;
261da177e4SLinus Torvalds case 3: return 12;
271da177e4SLinus Torvalds }
281da177e4SLinus Torvalds
291da177e4SLinus Torvalds return irqmap_ebsa285[(slot + pin) & 3];
301da177e4SLinus Torvalds }
311da177e4SLinus Torvalds
321da177e4SLinus Torvalds static struct hw_pci ebsa285_pci __initdata = {
331da177e4SLinus Torvalds .map_irq = ebsa285_map_irq,
341da177e4SLinus Torvalds .nr_controllers = 1,
35c23bfc38SRussell King .ops = &dc21285_ops,
361da177e4SLinus Torvalds .setup = dc21285_setup,
371da177e4SLinus Torvalds .preinit = dc21285_preinit,
381da177e4SLinus Torvalds .postinit = dc21285_postinit,
391da177e4SLinus Torvalds };
401da177e4SLinus Torvalds
ebsa285_init_pci(void)411da177e4SLinus Torvalds static int __init ebsa285_init_pci(void)
421da177e4SLinus Torvalds {
431da177e4SLinus Torvalds if (machine_is_ebsa285())
441da177e4SLinus Torvalds pci_common_init(&ebsa285_pci);
451da177e4SLinus Torvalds return 0;
461da177e4SLinus Torvalds }
471da177e4SLinus Torvalds
481da177e4SLinus Torvalds subsys_initcall(ebsa285_init_pci);
49