* [PATCH] SUN3: Get interrupts working again
@ 2012-11-11 12:28 Thomas Bogendoerfer
2012-11-14 7:46 ` Geert Uytterhoeven
0 siblings, 1 reply; 2+ messages in thread
From: Thomas Bogendoerfer @ 2012-11-11 12:28 UTC (permalink / raw)
To: linux-m68k; +Cc: sammy, geert
SUN3 Intregister is not for enabling individual interrupts, but to enable
special interrupts. So using it for interrupt enable/disable was wrong.
The clock interrupt needs some special treatment to keep ticking.
Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
---
arch/m68k/sun3/sun3ints.c | 29 ++++-------------------------
1 files changed, 4 insertions(+), 25 deletions(-)
diff --git a/arch/m68k/sun3/sun3ints.c b/arch/m68k/sun3/sun3ints.c
index 78b60f5..6bbca30 100644
--- a/arch/m68k/sun3/sun3ints.c
+++ b/arch/m68k/sun3/sun3ints.c
@@ -66,6 +66,8 @@ static irqreturn_t sun3_int5(int irq, void *dev_id)
#ifdef CONFIG_SUN3
intersil_clear();
#endif
+ sun3_disable_irq(5);
+ sun3_enable_irq(5);
#ifdef CONFIG_SUN3
intersil_clear();
#endif
@@ -79,41 +81,18 @@ static irqreturn_t sun3_int5(int irq, void *dev_id)
static irqreturn_t sun3_vec255(int irq, void *dev_id)
{
-// intersil_clear();
return IRQ_HANDLED;
}
-static void sun3_irq_enable(struct irq_data *data)
-{
- sun3_enable_irq(data->irq);
-};
-
-static void sun3_irq_disable(struct irq_data *data)
-{
- sun3_disable_irq(data->irq);
-};
-
-static struct irq_chip sun3_irq_chip = {
- .name = "sun3",
- .irq_startup = m68k_irq_startup,
- .irq_shutdown = m68k_irq_shutdown,
- .irq_enable = sun3_irq_enable,
- .irq_disable = sun3_irq_disable,
- .irq_mask = sun3_irq_disable,
- .irq_unmask = sun3_irq_enable,
-};
-
void __init sun3_init_IRQ(void)
{
*sun3_intreg = 1;
- m68k_setup_irq_controller(&sun3_irq_chip, handle_level_irq, IRQ_AUTO_1,
- 7);
m68k_setup_user_interrupt(VEC_USER, 128);
- if (request_irq(IRQ_AUTO_5, sun3_int5, 0, "int5", NULL))
+ if (request_irq(IRQ_AUTO_5, sun3_int5, 0, "clock", NULL))
pr_err("Couldn't register %s interrupt\n", "int5");
- if (request_irq(IRQ_AUTO_7, sun3_int7, 0, "int7", NULL))
+ if (request_irq(IRQ_AUTO_7, sun3_int7, 0, "nmi", NULL))
pr_err("Couldn't register %s interrupt\n", "int7");
if (request_irq(IRQ_USER+127, sun3_vec255, 0, "vec255", NULL))
pr_err("Couldn't register %s interrupt\n", "vec255");
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH] SUN3: Get interrupts working again
2012-11-11 12:28 [PATCH] SUN3: Get interrupts working again Thomas Bogendoerfer
@ 2012-11-14 7:46 ` Geert Uytterhoeven
0 siblings, 0 replies; 2+ messages in thread
From: Geert Uytterhoeven @ 2012-11-14 7:46 UTC (permalink / raw)
To: Thomas Bogendoerfer; +Cc: linux-m68k, sammy
On Sun, Nov 11, 2012 at 1:28 PM, Thomas Bogendoerfer
<tsbogend@alpha.franken.de> wrote:
> SUN3 Intregister is not for enabling individual interrupts, but to enable
> special interrupts. So using it for interrupt enable/disable was wrong.
> The clock interrupt needs some special treatment to keep ticking.
>
> Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Thanks, will queue for 3.8.
> ---
>
> arch/m68k/sun3/sun3ints.c | 29 ++++-------------------------
> 1 files changed, 4 insertions(+), 25 deletions(-)
>
> diff --git a/arch/m68k/sun3/sun3ints.c b/arch/m68k/sun3/sun3ints.c
> index 78b60f5..6bbca30 100644
> --- a/arch/m68k/sun3/sun3ints.c
> +++ b/arch/m68k/sun3/sun3ints.c
> @@ -66,6 +66,8 @@ static irqreturn_t sun3_int5(int irq, void *dev_id)
> #ifdef CONFIG_SUN3
> intersil_clear();
> #endif
> + sun3_disable_irq(5);
> + sun3_enable_irq(5);
> #ifdef CONFIG_SUN3
> intersil_clear();
> #endif
> @@ -79,41 +81,18 @@ static irqreturn_t sun3_int5(int irq, void *dev_id)
>
> static irqreturn_t sun3_vec255(int irq, void *dev_id)
> {
> -// intersil_clear();
> return IRQ_HANDLED;
> }
>
> -static void sun3_irq_enable(struct irq_data *data)
> -{
> - sun3_enable_irq(data->irq);
> -};
> -
> -static void sun3_irq_disable(struct irq_data *data)
> -{
> - sun3_disable_irq(data->irq);
> -};
> -
> -static struct irq_chip sun3_irq_chip = {
> - .name = "sun3",
> - .irq_startup = m68k_irq_startup,
> - .irq_shutdown = m68k_irq_shutdown,
> - .irq_enable = sun3_irq_enable,
> - .irq_disable = sun3_irq_disable,
> - .irq_mask = sun3_irq_disable,
> - .irq_unmask = sun3_irq_enable,
> -};
> -
> void __init sun3_init_IRQ(void)
> {
> *sun3_intreg = 1;
>
> - m68k_setup_irq_controller(&sun3_irq_chip, handle_level_irq, IRQ_AUTO_1,
> - 7);
> m68k_setup_user_interrupt(VEC_USER, 128);
>
> - if (request_irq(IRQ_AUTO_5, sun3_int5, 0, "int5", NULL))
> + if (request_irq(IRQ_AUTO_5, sun3_int5, 0, "clock", NULL))
> pr_err("Couldn't register %s interrupt\n", "int5");
> - if (request_irq(IRQ_AUTO_7, sun3_int7, 0, "int7", NULL))
> + if (request_irq(IRQ_AUTO_7, sun3_int7, 0, "nmi", NULL))
> pr_err("Couldn't register %s interrupt\n", "int7");
> if (request_irq(IRQ_USER+127, sun3_vec255, 0, "vec255", NULL))
> pr_err("Couldn't register %s interrupt\n", "vec255");
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2012-11-14 7:46 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-11-11 12:28 [PATCH] SUN3: Get interrupts working again Thomas Bogendoerfer
2012-11-14 7:46 ` Geert Uytterhoeven
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox