diff options
author | Dimitri Sivanich <sivanich@sgi.com> | 2012-02-22 14:11:06 -0500 |
---|---|---|
committer | Tony Luck <tony.luck@intel.com> | 2012-02-22 14:11:06 -0500 |
commit | 48e30fa0738be3688f655632d917498464019e60 (patch) | |
tree | 1e80bacbe5f5034f050964c8e70b74cb1b2eb5dc /arch/ia64 | |
parent | 0f261ede311bfd718d84bdf50dd7fcee585e82c7 (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.c | 2 | ||||
-rw-r--r-- | arch/ia64/sn/kernel/irq.c | 2 | ||||
-rw-r--r-- | arch/ia64/sn/pci/pcibr/pcibr_provider.c | 1 | ||||
-rw-r--r-- | arch/ia64/sn/pci/tioca_provider.c | 1 | ||||
-rw-r--r-- | arch/ia64/sn/pci/tioce_provider.c | 1 |
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 | } |