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