diff options
| -rw-r--r-- | arch/mips/pci/fixup-sni.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/arch/mips/pci/fixup-sni.c b/arch/mips/pci/fixup-sni.c index a45bedd17233..5c8a79bb2661 100644 --- a/arch/mips/pci/fixup-sni.c +++ b/arch/mips/pci/fixup-sni.c | |||
| @@ -113,6 +113,16 @@ static char irq_tab_pcit[13][5] __initdata = { | |||
| 113 | { 0, INTA, INTB, INTC, INTD }, /* Slot 5 */ | 113 | { 0, INTA, INTB, INTC, INTD }, /* Slot 5 */ |
| 114 | }; | 114 | }; |
| 115 | 115 | ||
| 116 | static char irq_tab_pcit_cplus[13][5] __initdata = { | ||
| 117 | /* INTA INTB INTC INTD */ | ||
| 118 | { 0, 0, 0, 0, 0 }, /* HOST bridge */ | ||
| 119 | { 0, INTB, INTC, INTD, INTA }, /* PCI Slot 9 */ | ||
| 120 | { 0, 0, 0, 0, 0 }, /* PCI-EISA */ | ||
| 121 | { 0, 0, 0, 0, 0 }, /* Unused */ | ||
| 122 | { 0, INTA, INTB, INTC, INTD }, /* PCI-PCI bridge */ | ||
| 123 | { 0, INTB, INTC, INTD, INTA }, /* fixup */ | ||
| 124 | }; | ||
| 125 | |||
| 116 | static inline int is_rm300_revd(void) | 126 | static inline int is_rm300_revd(void) |
| 117 | { | 127 | { |
| 118 | unsigned char csmsr = *(volatile unsigned char *)PCIMT_CSMSR; | 128 | unsigned char csmsr = *(volatile unsigned char *)PCIMT_CSMSR; |
| @@ -123,8 +133,19 @@ static inline int is_rm300_revd(void) | |||
| 123 | int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) | 133 | int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) |
| 124 | { | 134 | { |
| 125 | switch (sni_brd_type) { | 135 | switch (sni_brd_type) { |
| 126 | case SNI_BRD_PCI_TOWER: | ||
| 127 | case SNI_BRD_PCI_TOWER_CPLUS: | 136 | case SNI_BRD_PCI_TOWER_CPLUS: |
| 137 | if (slot == 4) { | ||
| 138 | /* | ||
| 139 | * SNI messed up interrupt wiring for onboard | ||
| 140 | * PCI bus 1; we need to fix this up here | ||
| 141 | */ | ||
| 142 | while (dev && dev->bus->number != 1) | ||
| 143 | dev = dev->bus->self; | ||
| 144 | if (dev && dev->devfn >= PCI_DEVFN(4, 0)) | ||
| 145 | slot = 5; | ||
| 146 | } | ||
| 147 | return irq_tab_pcit_cplus[slot][pin]; | ||
| 148 | case SNI_BRD_PCI_TOWER: | ||
| 128 | return irq_tab_pcit[slot][pin]; | 149 | return irq_tab_pcit[slot][pin]; |
| 129 | 150 | ||
| 130 | case SNI_BRD_PCI_MTOWER: | 151 | case SNI_BRD_PCI_MTOWER: |
