* [PATCH] ia64: genirq fixup for SGI/SN
@ 2012-02-10 15:30 Raymund Will
2012-02-22 1:17 ` Dimitri Sivanich
0 siblings, 1 reply; 2+ messages in thread
From: Raymund Will @ 2012-02-10 15:30 UTC (permalink / raw)
To: linux-ia64
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.
Original work from Dimitri Sivanich.
Signed-off-by: Dimitri Sivanich <sivanich@sgi.com>
Test-by: Raymund Will <rw@suse.de>
---
arch/ia64/sn/kernel/huberror.c | 2 ++
arch/ia64/sn/kernel/irq.c | 2 ++
arch/ia64/sn/pci/pcibr/pcibr_provider.c | 1 +
arch/ia64/sn/pci/tioca_provider.c | 1 +
arch/ia64/sn/pci/tioce_provider.c | 1 +
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 08b0d9b..f925dec 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)
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);
}
diff --git a/arch/ia64/sn/kernel/irq.c b/arch/ia64/sn/kernel/irq.c
index dfac09a..62cf4dd 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)
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);
diff --git a/arch/ia64/sn/pci/pcibr/pcibr_provider.c b/arch/ia64/sn/pci/pcibr/pcibr_provider.c
index 8886a0b..8dbbef4 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
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);
/*
diff --git a/arch/ia64/sn/pci/tioca_provider.c b/arch/ia64/sn/pci/tioca_provider.c
index e77c477..a70b11f 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
__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 */
diff --git a/arch/ia64/sn/pci/tioce_provider.c b/arch/ia64/sn/pci/tioce_provider.c
index 27faba0..46d3df4 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
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;
}
diff --git a/drivers/tty/serial/sn_console.c b/drivers/tty/serial/sn_console.c
index 238c7df..8e4129c 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)
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);
--
1.7.6.1
--
Raymund Will rw@SuSE.de
SUSE LINUX Products GmbH GF: Jeff Hawn HRB 16746 (AG Nuernberg)
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] ia64: genirq fixup for SGI/SN
2012-02-10 15:30 [PATCH] ia64: genirq fixup for SGI/SN Raymund Will
@ 2012-02-22 1:17 ` Dimitri Sivanich
0 siblings, 0 replies; 2+ messages in thread
From: Dimitri Sivanich @ 2012-02-22 1:17 UTC (permalink / raw)
To: linux-ia64
Acked-by: Dimitri Sivanich <sivanich@sgi.com>
On Fri, Feb 10, 2012 at 04:30:56PM +0100, Raymund Will wrote:
> 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.
>
> Original work from Dimitri Sivanich.
>
> Signed-off-by: Dimitri Sivanich <sivanich@sgi.com>
> Test-by: Raymund Will <rw@suse.de>
> ---
> arch/ia64/sn/kernel/huberror.c | 2 ++
> arch/ia64/sn/kernel/irq.c | 2 ++
> arch/ia64/sn/pci/pcibr/pcibr_provider.c | 1 +
> arch/ia64/sn/pci/tioca_provider.c | 1 +
> arch/ia64/sn/pci/tioce_provider.c | 1 +
> 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 08b0d9b..f925dec 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)
> 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);
> }
>
> diff --git a/arch/ia64/sn/kernel/irq.c b/arch/ia64/sn/kernel/irq.c
> index dfac09a..62cf4dd 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)
> 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);
> diff --git a/arch/ia64/sn/pci/pcibr/pcibr_provider.c b/arch/ia64/sn/pci/pcibr/pcibr_provider.c
> index 8886a0b..8dbbef4 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
> 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);
>
> /*
> diff --git a/arch/ia64/sn/pci/tioca_provider.c b/arch/ia64/sn/pci/tioca_provider.c
> index e77c477..a70b11f 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
> __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 */
> diff --git a/arch/ia64/sn/pci/tioce_provider.c b/arch/ia64/sn/pci/tioce_provider.c
> index 27faba0..46d3df4 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
> 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;
> }
> diff --git a/drivers/tty/serial/sn_console.c b/drivers/tty/serial/sn_console.c
> index 238c7df..8e4129c 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)
> 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);
> --
> 1.7.6.1
>
> --
> Raymund Will rw@SuSE.de
> SUSE LINUX Products GmbH GF: Jeff Hawn HRB 16746 (AG Nuernberg)
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2012-02-22 1:17 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-02-10 15:30 [PATCH] ia64: genirq fixup for SGI/SN Raymund Will
2012-02-22 1:17 ` Dimitri Sivanich
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).