Subject: Re: TC bba audio problem on DEC3000/300
To: Gregory McGarry <g.mcgarry@ieee.org>
From: Jason R Thorpe <thorpej@zembu.com>
List: port-alpha
Date: 07/17/2000 23:02:41
On Tue, Jul 18, 2000 at 07:42:35AM +1000, Gregory McGarry wrote:
> The correct fix goes something like the patch below (untested).
> This is consistent with other ioasic handlers
> (cf sys/arch/pmax/pmax/dec_maxine.c). Particularly important
> is the handling of DMA overruns.
Yah, I'll buy that. I have a slightly cleaner patch, tho (which
inlines it into the CHECKINTR macro). BTW, the driver interrupt
handler is not called to signal error on the transfer in the OVRN
case, so I suppose we should call into the driver for that, and
then just modify the driver as appropriate later.
>
> Index: ioasic.c
> ===================================================================
> RCS file: /cvsroot/syssrc/sys/arch/alpha/tc/ioasic.c,v
> retrieving revision 1.32
> diff -c -r1.32 ioasic.c
> *** ioasic.c 2000/06/05 21:47:30 1.32
> --- ioasic.c 2000/07/17 21:34:36
> ***************
> *** 307,312 ****
> --- 307,313 ----
> register int ifound;
> int gifound;
> u_int32_t sir;
> + u_int32_t xxintr;
>
> gifound = 0;
> do {
> ***************
> *** 329,334 ****
> --- 330,345 ----
> CHECKINTR(IOASIC_DEV_SCC1, IOASIC_INTR_SCC_1);
> CHECKINTR(IOASIC_DEV_LANCE, IOASIC_INTR_LANCE);
> CHECKINTR(IOASIC_DEV_ISDN, IOASIC_INTR_ISDN_TXLOAD | IOASIC_INTR_ISDN_RXLOAD);
> +
> + #define PTRLOAD (IOASIC_INTR_ISDN_TXLOAD | IOASIC_INTR_ISDN_RXLOAD)
> + #define ERRORS (IOASIC_INTR_ISDN_OVRUN)
> +
> + xxxintr = sir & (ERRORS | PTRLOAD);
> + if (xxxintr) {
> + ifound = 1;
> + *(u_int32_t *)(ioasic_base + IOASIC_INTR)
> + = sir &~ xxxintr;
> + }
>
> gifound |= ifound;
> } while (ifound);
>
>
> -- Gregory McGarry <g.mcgarry@ieee.org>
>
--
-- Jason R. Thorpe <thorpej@zembu.com>