18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * linux/arch/arm/mach-footbridge/ebsa285-pci.c
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * PCI bios-type initialisation for PCI machines
68c2ecf20Sopenharmony_ci *
78c2ecf20Sopenharmony_ci * Bits taken from various places.
88c2ecf20Sopenharmony_ci */
98c2ecf20Sopenharmony_ci#include <linux/kernel.h>
108c2ecf20Sopenharmony_ci#include <linux/pci.h>
118c2ecf20Sopenharmony_ci#include <linux/init.h>
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ci#include <asm/irq.h>
148c2ecf20Sopenharmony_ci#include <asm/mach/pci.h>
158c2ecf20Sopenharmony_ci#include <asm/mach-types.h>
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_cistatic int irqmap_ebsa285[] = { IRQ_IN3, IRQ_IN1, IRQ_IN0, IRQ_PCI };
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_cistatic int ebsa285_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
208c2ecf20Sopenharmony_ci{
218c2ecf20Sopenharmony_ci	if (dev->vendor == PCI_VENDOR_ID_CONTAQ &&
228c2ecf20Sopenharmony_ci	    dev->device == PCI_DEVICE_ID_CONTAQ_82C693)
238c2ecf20Sopenharmony_ci		switch (PCI_FUNC(dev->devfn)) {
248c2ecf20Sopenharmony_ci		case 1:	return 14;
258c2ecf20Sopenharmony_ci		case 2:	return 15;
268c2ecf20Sopenharmony_ci		case 3:	return 12;
278c2ecf20Sopenharmony_ci		}
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_ci	return irqmap_ebsa285[(slot + pin) & 3];
308c2ecf20Sopenharmony_ci}
318c2ecf20Sopenharmony_ci
328c2ecf20Sopenharmony_cistatic struct hw_pci ebsa285_pci __initdata = {
338c2ecf20Sopenharmony_ci	.map_irq		= ebsa285_map_irq,
348c2ecf20Sopenharmony_ci	.nr_controllers		= 1,
358c2ecf20Sopenharmony_ci	.ops			= &dc21285_ops,
368c2ecf20Sopenharmony_ci	.setup			= dc21285_setup,
378c2ecf20Sopenharmony_ci	.preinit		= dc21285_preinit,
388c2ecf20Sopenharmony_ci	.postinit		= dc21285_postinit,
398c2ecf20Sopenharmony_ci};
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_cistatic int __init ebsa285_init_pci(void)
428c2ecf20Sopenharmony_ci{
438c2ecf20Sopenharmony_ci	if (machine_is_ebsa285())
448c2ecf20Sopenharmony_ci		pci_common_init(&ebsa285_pci);
458c2ecf20Sopenharmony_ci	return 0;
468c2ecf20Sopenharmony_ci}
478c2ecf20Sopenharmony_ci
488c2ecf20Sopenharmony_cisubsys_initcall(ebsa285_init_pci);
49