Subject: Re: TC bba audio problem on DEC3000/300
To: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
From: Gregory McGarry <g.mcgarry@ieee.org>
List: port-alpha
Date: 07/18/2000 07:42:35
Izumi Tsutsui wrote:

> Unfortunately, the new kernel does not work properly.
> It still only plays short sound and hangs.
> I tried both 1.5B and 1.5_ALPHA with some modifications,
> but got the same result.
> 
> It seems that DMA transfer set up in bba_trigger_output()
> is working fine but there are something wrong in bba_intr().
> I put some printf() to bba_intr(), then bba_intr() is being
> called eternally after the short sound.

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.

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>