[IA64] genirq fixup for SGI/SN
authorDimitri Sivanich <sivanich@sgi.com>
Wed, 22 Feb 2012 19:11:06 +0000 (11:11 -0800)
committerTony Luck <tony.luck@intel.com>
Wed, 22 Feb 2012 19:11:06 +0000 (11:11 -0800)
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>
arch/ia64/sn/kernel/huberror.c
arch/ia64/sn/kernel/irq.c
arch/ia64/sn/pci/pcibr/pcibr_provider.c
arch/ia64/sn/pci/tioca_provider.c
arch/ia64/sn/pci/tioce_provider.c
drivers/tty/serial/sn_console.c

index 08b0d9b..f925dec 100644 (file)
@@ -192,6 +192,7 @@ void hub_error_init(struct hubdev_info *hubdev_info)
                    hubdev_info);
                return;
        }
+       irq_set_handler(SGI_II_ERROR, handle_level_irq);
        sn_set_err_irq_affinity(SGI_II_ERROR);
 }
 
@@ -213,6 +214,7 @@ void ice_error_init(struct hubdev_info *hubdev_info)
                        hubdev_info);
                return;
        }
+       irq_set_handler(SGI_TIO_ERROR, handle_level_irq);
        sn_set_err_irq_affinity(SGI_TIO_ERROR);
 }
 
index dfac09a..62cf4dd 100644 (file)
@@ -352,6 +352,8 @@ void sn_irq_fixup(struct pci_dev *pci_dev, struct sn_irq_info *sn_irq_info)
        spin_lock(&sn_irq_info_lock);
        list_add_rcu(&sn_irq_info->list, sn_irq_lh[sn_irq_info->irq_irq]);
        reserve_irq_vector(sn_irq_info->irq_irq);
+       if (sn_irq_info->irq_int_bit != -1)
+               irq_set_handler(sn_irq_info->irq_irq, handle_level_irq);
        spin_unlock(&sn_irq_info_lock);
 
        register_intr_pda(sn_irq_info);
index 8886a0b..8dbbef4 100644 (file)
@@ -146,6 +146,7 @@ pcibr_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont
                printk(KERN_WARNING
                       "pcibr cannot allocate interrupt for error handler\n");
        }
+       irq_set_handler(SGI_PCIASIC_ERROR, handle_level_irq);
        sn_set_err_irq_affinity(SGI_PCIASIC_ERROR);
 
        /* 
index e77c477..a70b11f 100644 (file)
@@ -649,6 +649,7 @@ tioca_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont
                       __func__, SGI_TIOCA_ERROR,
                       (int)tioca_common->ca_common.bs_persist_busnum);
 
+       irq_set_handler(SGI_TIOCA_ERROR, handle_level_irq);
        sn_set_err_irq_affinity(SGI_TIOCA_ERROR);
 
        /* Setup locality information */
index 27faba0..46d3df4 100644 (file)
@@ -1037,6 +1037,7 @@ tioce_bus_fixup(struct pcibus_bussoft *prom_bussoft, struct pci_controller *cont
                       tioce_common->ce_pcibus.bs_persist_segment,
                       tioce_common->ce_pcibus.bs_persist_busnum);
 
+       irq_set_handler(SGI_PCIASIC_ERROR, handle_level_irq);
        sn_set_err_irq_affinity(SGI_PCIASIC_ERROR);
        return tioce_common;
 }
index 238c7df..8e4129c 100644 (file)
@@ -743,6 +743,7 @@ static void __init sn_sal_switch_to_interrupts(struct sn_cons_port *port)
                        spin_lock_irqsave(&port->sc_port.lock, flags);
                        port->sc_port.irq = SGI_UART_VECTOR;
                        port->sc_ops = &intr_ops;
+                       irq_set_handler(port->sc_port.irq, handle_level_irq);
 
                        /* turn on receive interrupts */
                        ia64_sn_console_intr_enable(SAL_CONSOLE_INTR_RECV);