aboutsummaryrefslogtreecommitdiffstats
path: root/arch/ia64
diff options
context:
space:
mode:
authorDimitri Sivanich <sivanich@sgi.com>2012-02-22 14:11:06 -0500
committerTony Luck <tony.luck@intel.com>2012-02-22 14:11:06 -0500
commit48e30fa0738be3688f655632d917498464019e60 (patch)
tree1e80bacbe5f5034f050964c8e70b74cb1b2eb5dc /arch/ia64
parent0f261ede311bfd718d84bdf50dd7fcee585e82c7 (diff)
[IA64] genirq fixup for SGI/SN
This patch allows the system to boot and enables the console and at least some hardware drivers, as well as some platform error handling. Tested on a variety of SGI Altix system without issues. Signed-off-by: Dimitri Sivanich <sivanich@sgi.com> Tested-by: Raymund Will <rw@suse.de> Signed-off-by: Tony Luck <tony.luck@intel.com>
Diffstat (limited to 'arch/ia64')
-rw-r--r--arch/ia64/sn/kernel/huberror.c2
-rw-r--r--arch/ia64/sn/kernel/irq.c2
-rw-r--r--arch/ia64/sn/pci/pcibr/pcibr_provider.c1
-rw-r--r--arch/ia64/sn/pci/tioca_provider.c1
-rw-r--r--arch/ia64/sn/pci/tioce_provider.c1
5 files changed, 7 insertions, 0 deletions
diff --git a/arch/ia64/sn/kernel/huberror.c b/arch/ia64/sn/kernel/huberror.c
index 08b0d9bb62ec..f925dec2da92 100644
--- a/arch/ia64/sn/kernel/huberror.c
+++ b/arch/ia64/sn/kernel/huberror.c
@@ -192,6 +192,7 @@ void hub_error_init(struct hubdev_info *hubdev_info)
192 hubdev_info); 192 hubdev_info);
193 return; 193 return;
194 } 194 }
195 irq_set_handler(SGI_II_ERROR, handle_level_irq);
195 sn_set_err_irq_affinity(SGI_II_ERROR); 196 sn_set_err_irq_affinity(SGI_II_ERROR);
196} 197}
197 198
@@ -213,6 +214,7 @@ void ice_error_init(struct hubdev_info *hubdev_info)
213 hubdev_info); 214 hubdev_info);
214 return; 215 return;
215 } 216 }
217 irq_set_handler(SGI_TIO_ERROR, handle_level_irq);
216 sn_set_err_irq_affinity(SGI_TIO_ERROR); 218 sn_set_err_irq_affinity(SGI_TIO_ERROR);
217} 219}
218 220
diff --git a/arch/ia64/sn/kernel/irq.c b/arch/ia64/sn/kernel/irq.c
index dfac09ab027a..62cf4dde6a04 100644
--- a/arch/ia64/sn/kernel/irq.c
+++ b/arch/ia64/sn/kernel/irq.c
@@ -352,6 +352,8 @@ void sn_irq_fixup(struct pci_dev *pci_dev, struct sn_irq_info *sn_irq_info)
352 spin_lock(&sn_irq_info_lock); 352 spin_lock(&sn_irq_info_lock);
353 list_add_rcu(&sn_irq_info->list, sn_irq_lh[sn_irq_info->irq_irq]); 353 list_add_rcu(&sn_irq_info->list, sn_irq_lh[sn_irq_info->irq_irq]);
354 reserve_irq_vector(sn_irq_info->irq_irq); 354 reserve_irq_vector(sn_irq_info->irq_irq);
355 if (sn_irq_info->irq_int_bit != -1)
356 irq_set_handler(sn_irq_info->irq_irq, handle_level_irq);
355 spin_unlock(&sn_irq_info_lock); 357 spin_unlock(&sn_irq_info_lock);
356 358
357 register_intr_pda(sn_irq_info); 359 register_intr_pda(sn_irq_info);
diff --git a/arch/ia64/sn/pci/pcibr/pcibr_provider.c b/arch/ia64/sn/pci/pcibr/pcibr_provider.c
index 8886a0bc4a11..8dbbef4a4f47 100644
--- a/arch/ia64/sn/pci/pcibr/pcibr_provider.c
+++ b/arch/ia64/sn/pci/pcibr/pcibr_provider.c
@@ -146,6 +146,7 @@ pcibr_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont
146 printk(KERN_WARNING 146 printk(KERN_WARNING
147 "pcibr cannot allocate interrupt for error handler\n"); 147 "pcibr cannot allocate interrupt for error handler\n");
148 } 148 }
149 irq_set_handler(SGI_PCIASIC_ERROR, handle_level_irq);
149 sn_set_err_irq_affinity(SGI_PCIASIC_ERROR); 150 sn_set_err_irq_affinity(SGI_PCIASIC_ERROR);
150 151
151 /* 152 /*
diff --git a/arch/ia64/sn/pci/tioca_provider.c b/arch/ia64/sn/pci/tioca_provider.c
index e77c477245fd..a70b11fd57d6 100644
--- a/arch/ia64/sn/pci/tioca_provider.c
+++ b/arch/ia64/sn/pci/tioca_provider.c
@@ -649,6 +649,7 @@ tioca_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont
649 __func__, SGI_TIOCA_ERROR, 649 __func__, SGI_TIOCA_ERROR,
650 (int)tioca_common->ca_common.bs_persist_busnum); 650 (int)tioca_common->ca_common.bs_persist_busnum);
651 651
652 irq_set_handler(SGI_TIOCA_ERROR, handle_level_irq);
652 sn_set_err_irq_affinity(SGI_TIOCA_ERROR); 653 sn_set_err_irq_affinity(SGI_TIOCA_ERROR);
653 654
654 /* Setup locality information */ 655 /* Setup locality information */
diff --git a/arch/ia64/sn/pci/tioce_provider.c b/arch/ia64/sn/pci/tioce_provider.c
index 27faba035f3a..46d3df4b03a1 100644
--- a/arch/ia64/sn/pci/tioce_provider.c
+++ b/arch/ia64/sn/pci/tioce_provider.c
@@ -1037,6 +1037,7 @@ tioce_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont
1037 tioce_common->ce_pcibus.bs_persist_segment, 1037 tioce_common->ce_pcibus.bs_persist_segment,
1038 tioce_common->ce_pcibus.bs_persist_busnum); 1038 tioce_common->ce_pcibus.bs_persist_busnum);
1039 1039
1040 irq_set_handler(SGI_PCIASIC_ERROR, handle_level_irq);
1040 sn_set_err_irq_affinity(SGI_PCIASIC_ERROR); 1041 sn_set_err_irq_affinity(SGI_PCIASIC_ERROR);
1041 return tioce_common; 1042 return tioce_common;
1042} 1043}