Add special case code for the rPC44. The DMA buffers on this machine
authorimp <imp@openbsd.org>
Thu, 28 Nov 1996 19:25:24 +0000 (19:25 +0000)
committerimp <imp@openbsd.org>
Thu, 28 Nov 1996 19:25:24 +0000 (19:25 +0000)
are not cache coherent, so for the moment use uncached addresses for
all buffer access.  In the future, more specific cache flushing should
be done.

rPC44 now boots into multi user off SCSI disk or the network, builds
its own kernel and seems to be making its way toward finishing a make
build.

Correct -Wall complaint when BTDEBUG defined while I'm here.

sys/arch/arc/dti/btl.c

index ad43b29..512d330 100644 (file)
@@ -102,8 +102,10 @@ struct bt_mbx {
 
 extern int cputype;  /* XXX */
 
-#define KVTOPHYS(x)    (((int)(x) & 0x7fffff) | 0x800000)
-#define PHYSTOKV(x)    (((int)(x) & 0x7fffff) | (cputype == DESKSTATION_TYNE ? TYNE_V_BOUNCE : 0))
+#define KVTOPHYS(x)    ((cputype == DESKSTATION_TYNE) ? \
+       (((int)(x) & 0x7fffff) | 0x800000) : ((int)(x)))
+#define PHYSTOKV(x)    ((cputype == DESKSTATION_TYNE) ? \
+       (((int)(x) & 0x7fffff) | TYNE_V_BOUNCE) : ((int)(x)))
 
 #include "aha.h"
 #include "btl.h"
@@ -165,6 +167,10 @@ struct scsi_adapter bt_switch = {
        0,
 };
 
+/* XXX static buffer as a kludge.  DMA isn't cache coherent on the rpc44, so 
+ * we always use uncached buffers for DMA. */
+static char rpc44_buffer[ TYNE_S_BOUNCE ];
+
 /* the below structure is so we have a default dev struct for out link struct */
 struct scsi_device bt_dev = {
        NULL,                   /* Use default error handler */
@@ -388,8 +394,9 @@ btattach(parent, self, aux)
                bouncesize = TYNE_S_BOUNCE;
        } else {
                bouncesize = TYNE_S_BOUNCE; /* Good enough? XXX */
-               bouncebase = (u_int) malloc( bouncesize, M_DEVBUF, M_NOWAIT);
-    }
+/*             bouncebase = (u_int) malloc( bouncesize, M_DEVBUF, M_NOWAIT);*/
+               bouncebase = (u_int) rpc44_buffer | 0xa0000000;
+       }
        bouncearea = bouncebase + sizeof(struct bt_mbx);
        sc->sc_mbx = (struct bt_mbx *)bouncebase;
 
@@ -476,7 +483,7 @@ AGAIN:
 
 #ifdef BTDEBUG
                if (bt_debug) {
-                       u_char *cp = &ccb->scsi_cmd;
+                       u_char *cp = (u_char *) &ccb->scsi_cmd;
                        printf("op=%x %x %x %x %x %x\n",
                            cp[0], cp[1], cp[2], cp[3], cp[4], cp[5]);
                        printf("stat %x for mbi addr = 0x%08x, ",