diff options
-rw-r--r-- | arch/powerpc/platforms/iseries/pci.c | 53 | ||||
-rw-r--r-- | include/asm-powerpc/pci-bridge.h | 1 |
2 files changed, 28 insertions, 26 deletions
diff --git a/arch/powerpc/platforms/iseries/pci.c b/arch/powerpc/platforms/iseries/pci.c index 5bc08d4eef49..edaafbb817b7 100644 --- a/arch/powerpc/platforms/iseries/pci.c +++ b/arch/powerpc/platforms/iseries/pci.c | |||
@@ -190,9 +190,6 @@ void iSeries_pcibios_init(void) | |||
190 | /* Find and connect the devices. */ | 190 | /* Find and connect the devices. */ |
191 | for (dn = NULL; (dn = of_get_next_child(node, dn)) != NULL;) { | 191 | for (dn = NULL; (dn = of_get_next_child(node, dn)) != NULL;) { |
192 | struct pci_dn *pdn; | 192 | struct pci_dn *pdn; |
193 | u8 irq; | ||
194 | int err; | ||
195 | u32 *agent; | ||
196 | u32 *reg; | 193 | u32 *reg; |
197 | u32 *lsn; | 194 | u32 *lsn; |
198 | 195 | ||
@@ -206,11 +203,6 @@ void iSeries_pcibios_init(void) | |||
206 | printk(KERN_DEBUG "no subbus property!\n"); | 203 | printk(KERN_DEBUG "no subbus property!\n"); |
207 | continue; | 204 | continue; |
208 | } | 205 | } |
209 | agent = (u32 *)get_property(dn, "linux,agent-id", NULL); | ||
210 | if (agent == NULL) { | ||
211 | printk(KERN_DEBUG "no agent-id\n"); | ||
212 | continue; | ||
213 | } | ||
214 | lsn = (u32 *)get_property(dn, | 206 | lsn = (u32 *)get_property(dn, |
215 | "linux,logical-slot-number", NULL); | 207 | "linux,logical-slot-number", NULL); |
216 | if (lsn == NULL) { | 208 | if (lsn == NULL) { |
@@ -218,21 +210,6 @@ void iSeries_pcibios_init(void) | |||
218 | continue; | 210 | continue; |
219 | } | 211 | } |
220 | 212 | ||
221 | irq = iSeries_allocate_IRQ(bus, 0, *busp); | ||
222 | err = HvCallXm_connectBusUnit(bus, *busp, *agent, irq); | ||
223 | if (err) { | ||
224 | pci_Log_Error("Connect Bus Unit", | ||
225 | bus, *busp, *agent, err); | ||
226 | continue; | ||
227 | } | ||
228 | err = HvCallPci_configStore8(bus, *busp, *agent, | ||
229 | PCI_INTERRUPT_LINE, irq); | ||
230 | if (err) { | ||
231 | pci_Log_Error("PciCfgStore Irq Failed!", | ||
232 | bus, *busp, *agent, err); | ||
233 | continue; | ||
234 | } | ||
235 | |||
236 | pdn = kzalloc(sizeof(*pdn), GFP_KERNEL); | 213 | pdn = kzalloc(sizeof(*pdn), GFP_KERNEL); |
237 | if (pdn == NULL) | 214 | if (pdn == NULL) |
238 | return; | 215 | return; |
@@ -241,7 +218,6 @@ void iSeries_pcibios_init(void) | |||
241 | pdn->busno = bus; | 218 | pdn->busno = bus; |
242 | pdn->devfn = (reg[0] >> 8) & 0xff; | 219 | pdn->devfn = (reg[0] >> 8) & 0xff; |
243 | pdn->bussubno = *busp; | 220 | pdn->bussubno = *busp; |
244 | pdn->Irq = irq; | ||
245 | pdn->LogicalSlot = *lsn; | 221 | pdn->LogicalSlot = *lsn; |
246 | } | 222 | } |
247 | } | 223 | } |
@@ -266,6 +242,34 @@ void __init iSeries_pci_final_fixup(void) | |||
266 | pdev->bus->number, pdev->devfn, node); | 242 | pdev->bus->number, pdev->devfn, node); |
267 | 243 | ||
268 | if (node != NULL) { | 244 | if (node != NULL) { |
245 | struct pci_dn *pdn = PCI_DN(node); | ||
246 | u32 *agent; | ||
247 | |||
248 | agent = (u32 *)get_property(node, "linux,agent-id", | ||
249 | NULL); | ||
250 | if ((pdn != NULL) && (agent != NULL)) { | ||
251 | u8 irq = iSeries_allocate_IRQ(pdn->busno, 0, | ||
252 | pdn->bussubno); | ||
253 | int err; | ||
254 | |||
255 | err = HvCallXm_connectBusUnit(pdn->busno, pdn->bussubno, | ||
256 | *agent, irq); | ||
257 | if (err) | ||
258 | pci_Log_Error("Connect Bus Unit", | ||
259 | pdn->busno, pdn->bussubno, *agent, err); | ||
260 | else { | ||
261 | err = HvCallPci_configStore8(pdn->busno, pdn->bussubno, | ||
262 | *agent, | ||
263 | PCI_INTERRUPT_LINE, | ||
264 | irq); | ||
265 | if (err) | ||
266 | pci_Log_Error("PciCfgStore Irq Failed!", | ||
267 | pdn->busno, pdn->bussubno, *agent, err); | ||
268 | } | ||
269 | if (!err) | ||
270 | pdev->irq = irq; | ||
271 | } | ||
272 | |||
269 | ++DeviceCount; | 273 | ++DeviceCount; |
270 | pdev->sysdata = (void *)node; | 274 | pdev->sysdata = (void *)node; |
271 | PCI_DN(node)->pcidev = pdev; | 275 | PCI_DN(node)->pcidev = pdev; |
@@ -275,7 +279,6 @@ void __init iSeries_pci_final_fixup(void) | |||
275 | } else | 279 | } else |
276 | printk("PCI: Device Tree not found for 0x%016lX\n", | 280 | printk("PCI: Device Tree not found for 0x%016lX\n", |
277 | (unsigned long)pdev); | 281 | (unsigned long)pdev); |
278 | pdev->irq = PCI_DN(node)->Irq; | ||
279 | } | 282 | } |
280 | iSeries_activate_IRQs(); | 283 | iSeries_activate_IRQs(); |
281 | mf_display_src(0xC9000200); | 284 | mf_display_src(0xC9000200); |
diff --git a/include/asm-powerpc/pci-bridge.h b/include/asm-powerpc/pci-bridge.h index 59794b466efc..09079e400d2b 100644 --- a/include/asm-powerpc/pci-bridge.h +++ b/include/asm-powerpc/pci-bridge.h | |||
@@ -79,7 +79,6 @@ struct pci_dn { | |||
79 | struct pci_dev *pcidev; /* back-pointer to the pci device */ | 79 | struct pci_dev *pcidev; /* back-pointer to the pci device */ |
80 | struct device_node *node; /* back-pointer to the device_node */ | 80 | struct device_node *node; /* back-pointer to the device_node */ |
81 | #ifdef CONFIG_PPC_ISERIES | 81 | #ifdef CONFIG_PPC_ISERIES |
82 | int Irq; /* Assigned IRQ */ | ||
83 | int Flags; /* Possible flags(disable/bist)*/ | 82 | int Flags; /* Possible flags(disable/bist)*/ |
84 | u8 LogicalSlot; /* Hv Slot Index for Tces */ | 83 | u8 LogicalSlot; /* Hv Slot Index for Tces */ |
85 | #endif | 84 | #endif |