1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0
21da177e4SLinus Torvalds /*
31da177e4SLinus Torvalds  * linux/arch/arm/mach-footbridge/netwinder-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 
171da177e4SLinus Torvalds /*
181da177e4SLinus Torvalds  * We now use the slot ID instead of the device identifiers to select
191da177e4SLinus Torvalds  * which interrupt is routed where.
201da177e4SLinus Torvalds  */
netwinder_map_irq(const struct pci_dev * dev,u8 slot,u8 pin)21*30e3b4f2SRussell King static int netwinder_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
221da177e4SLinus Torvalds {
231da177e4SLinus Torvalds 	switch (slot) {
241da177e4SLinus Torvalds 	case 0:  /* host bridge */
251da177e4SLinus Torvalds 		return 0;
261da177e4SLinus Torvalds 
271da177e4SLinus Torvalds 	case 9:  /* CyberPro */
281da177e4SLinus Torvalds 		return IRQ_NETWINDER_VGA;
291da177e4SLinus Torvalds 
301da177e4SLinus Torvalds 	case 10: /* DC21143 */
311da177e4SLinus Torvalds 		return IRQ_NETWINDER_ETHER100;
321da177e4SLinus Torvalds 
331da177e4SLinus Torvalds 	case 12: /* Winbond 553 */
341da177e4SLinus Torvalds 		return IRQ_ISA_HARDDISK1;
351da177e4SLinus Torvalds 
361da177e4SLinus Torvalds 	case 13: /* Winbond 89C940F */
371da177e4SLinus Torvalds 		return IRQ_NETWINDER_ETHER10;
381da177e4SLinus Torvalds 
391da177e4SLinus Torvalds 	default:
401da177e4SLinus Torvalds 		printk(KERN_ERR "PCI: unknown device in slot %s\n",
411da177e4SLinus Torvalds 			pci_name(dev));
421da177e4SLinus Torvalds 		return 0;
431da177e4SLinus Torvalds 	}
441da177e4SLinus Torvalds }
451da177e4SLinus Torvalds 
461da177e4SLinus Torvalds static struct hw_pci netwinder_pci __initdata = {
471da177e4SLinus Torvalds 	.map_irq		= netwinder_map_irq,
481da177e4SLinus Torvalds 	.nr_controllers		= 1,
49c23bfc38SRussell King 	.ops			= &dc21285_ops,
501da177e4SLinus Torvalds 	.setup			= dc21285_setup,
511da177e4SLinus Torvalds 	.preinit		= dc21285_preinit,
521da177e4SLinus Torvalds 	.postinit		= dc21285_postinit,
531da177e4SLinus Torvalds };
541da177e4SLinus Torvalds 
netwinder_pci_init(void)551da177e4SLinus Torvalds static int __init netwinder_pci_init(void)
561da177e4SLinus Torvalds {
571da177e4SLinus Torvalds 	if (machine_is_netwinder())
581da177e4SLinus Torvalds 		pci_common_init(&netwinder_pci);
591da177e4SLinus Torvalds 	return 0;
601da177e4SLinus Torvalds }
611da177e4SLinus Torvalds 
621da177e4SLinus Torvalds subsys_initcall(netwinder_pci_init);
63