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