162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * linux/arch/arm/mach-footbridge/ebsa285-pci.c
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * PCI bios-type initialisation for PCI machines
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci * Bits taken from various places.
862306a36Sopenharmony_ci */
962306a36Sopenharmony_ci#include <linux/kernel.h>
1062306a36Sopenharmony_ci#include <linux/pci.h>
1162306a36Sopenharmony_ci#include <linux/init.h>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#include <asm/irq.h>
1462306a36Sopenharmony_ci#include <asm/mach/pci.h>
1562306a36Sopenharmony_ci#include <asm/mach-types.h>
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_cistatic int irqmap_ebsa285[] = { IRQ_IN3, IRQ_IN1, IRQ_IN0, IRQ_PCI };
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_cistatic int ebsa285_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
2062306a36Sopenharmony_ci{
2162306a36Sopenharmony_ci	if (dev->vendor == PCI_VENDOR_ID_CONTAQ &&
2262306a36Sopenharmony_ci	    dev->device == PCI_DEVICE_ID_CONTAQ_82C693)
2362306a36Sopenharmony_ci		switch (PCI_FUNC(dev->devfn)) {
2462306a36Sopenharmony_ci		case 1:	return 14;
2562306a36Sopenharmony_ci		case 2:	return 15;
2662306a36Sopenharmony_ci		case 3:	return 12;
2762306a36Sopenharmony_ci		}
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci	return irqmap_ebsa285[(slot + pin) & 3];
3062306a36Sopenharmony_ci}
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_cistatic struct hw_pci ebsa285_pci __initdata = {
3362306a36Sopenharmony_ci	.map_irq		= ebsa285_map_irq,
3462306a36Sopenharmony_ci	.nr_controllers		= 1,
3562306a36Sopenharmony_ci	.ops			= &dc21285_ops,
3662306a36Sopenharmony_ci	.setup			= dc21285_setup,
3762306a36Sopenharmony_ci	.preinit		= dc21285_preinit,
3862306a36Sopenharmony_ci	.postinit		= dc21285_postinit,
3962306a36Sopenharmony_ci};
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_cistatic int __init ebsa285_init_pci(void)
4262306a36Sopenharmony_ci{
4362306a36Sopenharmony_ci	if (machine_is_ebsa285())
4462306a36Sopenharmony_ci		pci_common_init(&ebsa285_pci);
4562306a36Sopenharmony_ci	return 0;
4662306a36Sopenharmony_ci}
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_cisubsys_initcall(ebsa285_init_pci);
49