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 | |
| 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>
| -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 | ||||
| -rw-r--r-- | drivers/tty/serial/sn_console.c | 1 |
6 files changed, 8 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 | } |
diff --git a/drivers/tty/serial/sn_console.c b/drivers/tty/serial/sn_console.c index 238c7df73ef5..8e4129c0bc93 100644 --- a/drivers/tty/serial/sn_console.c +++ b/drivers/tty/serial/sn_console.c | |||
| @@ -743,6 +743,7 @@ static void __init sn_sal_switch_to_interrupts(struct sn_cons_port *port) | |||
| 743 | spin_lock_irqsave(&port->sc_port.lock, flags); | 743 | spin_lock_irqsave(&port->sc_port.lock, flags); |
| 744 | port->sc_port.irq = SGI_UART_VECTOR; | 744 | port->sc_port.irq = SGI_UART_VECTOR; |
| 745 | port->sc_ops = &intr_ops; | 745 | port->sc_ops = &intr_ops; |
| 746 | irq_set_handler(port->sc_port.irq, handle_level_irq); | ||
| 746 | 747 | ||
| 747 | /* turn on receive interrupts */ | 748 | /* turn on receive interrupts */ |
| 748 | ia64_sn_console_intr_enable(SAL_CONSOLE_INTR_RECV); | 749 | ia64_sn_console_intr_enable(SAL_CONSOLE_INTR_RECV); |
