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