Don't issue an initial SCSI bus reset for Ultra3 cards. What seems to
authormjacob <mjacob@openbsd.org>
Sun, 5 Mar 2000 22:22:55 +0000 (22:22 +0000)
committermjacob <mjacob@openbsd.org>
Sun, 5 Mar 2000 22:22:55 +0000 (22:22 +0000)
happen is that the SCSI bus reset, even after several seconds delay, seems
to cause the Qlogic to then destroy several subsequent commands (which,
ha ha, happen during probing for devices). I dunno why this is- some Qlogic
f/w problem that we need to step around.

sys/dev/ic/isp_openbsd.c

index 922e92b..ca47ede 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: isp_openbsd.c,v 1.7 2000/02/20 21:22:41 mjacob Exp $ */
+/*     $OpenBSD: isp_openbsd.c,v 1.8 2000/03/05 22:22:55 mjacob Exp $ */
 /*
  * Platform (OpenBSD) dependent common attachment code for Qlogic adapters.
  *
@@ -122,18 +122,21 @@ isp_attach(isp)
         * XXX: that async events happen.
         */
        if (IS_SCSI(isp)) {
-               int bus = 0;
-               (void) isp_control(isp, ISPCTL_RESET_BUS, &bus);
-               if (IS_DUALBUS(isp)) {
-                       bus++;
+               /* XXX: There's some issue with resets && Ultra3 */
+               if (!IS_ULTRA3(isp)) {
+                       int bus = 0;
                        (void) isp_control(isp, ISPCTL_RESET_BUS, &bus);
+                       if (IS_DUALBUS(isp)) {
+                               bus++;
+                               (void) isp_control(isp, ISPCTL_RESET_BUS, &bus);
+                       }
+                       /*
+                        * wait for the bus to settle.
+                        */
+                       printf("%s: waiting 4 seconds for bus reset settling\n",
+                           isp->isp_name);
+                       delay(4 * 1000000);
                }
-               /*
-                * wait for the bus to settle.
-                */
-               printf("%s: waiting 4 seconds for bus reset settling\n",
-                   isp->isp_name);
-               delay(4 * 1000000);
        } else {
                int i, j;
                fcparam *fcp = isp->isp_param;