^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) * Toshiba rbtx4938 pci routines
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Copyright (C) 2000-2001 Toshiba Corporation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * 2003-2005 (c) MontaVista Software, Inc. This file is licensed under the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * terms of the GNU General Public License version 2. This program is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * licensed "as is" without any warranty of any kind, whether express
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) * or implied.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) * Support for TX4938 in 2.6 - Manish Lachwani (mlachwani@mvista.com)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <linux/types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <asm/txx9/pci.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #include <asm/txx9/rbtx4938.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) int rbtx4938_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) int irq = tx4938_pcic1_map_irq(dev, slot);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) if (irq >= 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) return irq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) irq = pin;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) /* IRQ rotation */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) irq--; /* 0-3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) if (slot == TX4927_PCIC_IDSEL_AD_TO_SLOT(23)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) /* PCI CardSlot (IDSEL=A23) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) /* PCIA => PCIA (IDSEL=A23) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) irq = (irq + 0 + slot) % 4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) } else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) /* PCI Backplane */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) if (txx9_pci_option & TXX9_PCI_OPT_PICMG)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) irq = (irq + 33 - slot) % 4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) irq = (irq + 3 + slot) % 4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) irq++; /* 1-4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) switch (irq) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) case 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) irq = RBTX4938_IRQ_IOC_PCIA;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) case 2:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) irq = RBTX4938_IRQ_IOC_PCIB;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) case 3:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) irq = RBTX4938_IRQ_IOC_PCIC;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) case 4:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) irq = RBTX4938_IRQ_IOC_PCID;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) return irq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) }