11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * BRIEF MODULE DESCRIPTION 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Board specific pci fixups. 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright 2001 MontaVista Software Inc. 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Author: MontaVista Software, Inc. 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ppopov@mvista.com or source@mvista.com 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This program is free software; you can redistribute it and/or modify it 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * under the terms of the GNU General Public License as published by the 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Free Software Foundation; either version 2 of the License, or (at your 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * option) any later version. 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * You should have received a copy of the GNU General Public License along 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * with this program; if not, write to the Free Software Foundation, Inc., 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 675 Mass Ave, Cambridge, MA 02139, USA. 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/types.h> 3189d63fe179520b11f54de1f26755b7444c79e73aAtsushi Nemoto#include <asm/txx9/pci.h> 3222b1d707ffc99faebd86257ad19d5bb9fc624734Atsushi Nemoto#include <asm/txx9/jmr3927.h> 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 34edcaf1a6a77315562e9781245cc8e028c9a921dcAtsushi Nemotoint __init jmr3927_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char irq = pin; 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* IRQ rotation (PICMG) */ 391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds irq--; /* 0-3 */ 4089d63fe179520b11f54de1f26755b7444c79e73aAtsushi Nemoto if (slot == TX3927_PCIC_IDSEL_AD_TO_SLOT(23)) { 411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* PCI CardSlot (IDSEL=A23, DevNu=12) */ 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* PCIA => PCIC (IDSEL=A23) */ 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* NOTE: JMR3927 JP1 must be set to OPEN */ 441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds irq = (irq + 2) % 4; 4589d63fe179520b11f54de1f26755b7444c79e73aAtsushi Nemoto } else if (slot == TX3927_PCIC_IDSEL_AD_TO_SLOT(22)) { 461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* PCI CardSlot (IDSEL=A22, DevNu=11) */ 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* PCIA => PCIA (IDSEL=A22) */ 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* NOTE: JMR3927 JP1 must be set to OPEN */ 491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds irq = (irq + 0) % 4; 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } else { 511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* PCI Backplane */ 5289d63fe179520b11f54de1f26755b7444c79e73aAtsushi Nemoto if (txx9_pci_option & TXX9_PCI_OPT_PICMG) 5389d63fe179520b11f54de1f26755b7444c79e73aAtsushi Nemoto irq = (irq + 33 - slot) % 4; 5489d63fe179520b11f54de1f26755b7444c79e73aAtsushi Nemoto else 5589d63fe179520b11f54de1f26755b7444c79e73aAtsushi Nemoto irq = (irq + 3 + slot) % 4; 561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } 571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds irq++; /* 1-4 */ 581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds switch (irq) { 601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds case 1: 611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds irq = JMR3927_IRQ_IOC_PCIA; 621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds break; 631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds case 2: 6489d63fe179520b11f54de1f26755b7444c79e73aAtsushi Nemoto irq = JMR3927_IRQ_IOC_PCIB; 651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds break; 661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds case 3: 671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds irq = JMR3927_IRQ_IOC_PCIC; 681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds break; 691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds case 4: 7089d63fe179520b11f54de1f26755b7444c79e73aAtsushi Nemoto irq = JMR3927_IRQ_IOC_PCID; 711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds break; 721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } 731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Check OnBoard Ethernet (IDSEL=A24, DevNu=13) */ 751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if (dev->bus->parent == NULL && 762127435e57a15f1fea8d6969e264eeb05b28ba4bAtsushi Nemoto slot == TX3927_PCIC_IDSEL_AD_TO_SLOT(24)) 772127435e57a15f1fea8d6969e264eeb05b28ba4bAtsushi Nemoto irq = JMR3927_IRQ_ETHER0; 781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return irq; 791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 80