[PATCH 01/16 v2] pmac_zilog: fix unexpected irq

Geert Uytterhoeven geert at linux-m68k.org
Wed Dec 7 02:27:20 EST 2011


Hi Finn,

On Tue, Dec 6, 2011 at 16:13, Finn Thain <fthain at telegraphics.com.au> wrote:
> +static void pmz_interrupt_control(struct uart_pmac_port *uap, int enable)
> +{
> +       if (enable) {
> +               uap->curregs[1] |= INT_ALL_Rx | TxINT_ENAB;
> +               if (!ZS_IS_EXTCLK(uap))
> +                       uap->curregs[1] |= EXT_INT_ENAB;
> +       } else {
> +               uap->curregs[1] &= ~(EXT_INT_ENAB | TxINT_ENAB | RxINT_MASK);

Should there be a call to zssync() here?
The old code always did that after disabling interrupts.

> +       }
> +       write_zsreg(uap, R1, uap->curregs[1]);
> +}
> +
>  static struct tty_struct *pmz_receive_chars(struct uart_pmac_port *uap)
>  {
>        struct tty_struct *tty = NULL;
> @@ -339,9 +351,7 @@ static struct tty_struct *pmz_receive_ch
>
>        return tty;
>  flood:
> -       uap->curregs[R1] &= ~(EXT_INT_ENAB | TxINT_ENAB | RxINT_MASK);
> -       write_zsreg(uap, R1, uap->curregs[R1]);
> -       zssync(uap);

Cfr. e.g. here.

> +       pmz_interrupt_control(uap, 0);
>        pmz_error("pmz: rx irq flood !\n");
>        return tty;
>  }

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert at 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


More information about the Linuxppc-dev mailing list