--- a/sys/arch/mac68k/conf/GENERICSBC	Sun Oct 30 21:30:34 2022 +1100
+++ b/sys/arch/mac68k/conf/GENERICSBC	Wed Dec 21 11:07:17 2022 +1100
@@ -12,7 +12,8 @@
 
 no ncrscsi0				# SCSI NCR 5380
 
-# SBC_PDMA      0x01    Use PDMA for polled transfers
-# SBC_INTR      0x02    Allow SCSI IRQ/DRQ interrupts
-# SBC_RESELECT  0x04    Allow disconnect/reselect
+# SBC_PDMA		0x01    Use PDMA for polled transfers
+# SBC_INTR		0x02    Allow SCSI IRQ/DRQ interrupts
+# SBC_RESELECT		0x04    Allow disconnect/reselect
+# SBC_PDMA_NO_WRITE	0x08    Dont use PDMA when writing
 sbc0	at obio? addr 0 flags 0x1	# MI SCSI NCR 5380
--- a/sys/arch/mac68k/conf/INSTALLSBC	Sun Oct 30 21:30:34 2022 +1100
+++ b/sys/arch/mac68k/conf/INSTALLSBC	Wed Dec 21 11:07:17 2022 +1100
@@ -12,7 +12,8 @@
 
 no ncrscsi0				# SCSI NCR 5380
 
-# SBC_PDMA      0x01    Use PDMA for polled transfers
-# SBC_INTR      0x02    Allow SCSI IRQ/DRQ interrupts
-# SBC_RESELECT  0x04    Allow disconnect/reselect
+# SBC_PDMA		0x01    Use PDMA for polled transfers
+# SBC_INTR		0x02    Allow SCSI IRQ/DRQ interrupts
+# SBC_RESELECT		0x04    Allow disconnect/reselect
+# SBC_PDMA_NO_WRITE	0x08    Dont use PDMA when writing
 sbc0	at obio? addr 0 flags 0x1	# MI SCSI NCR 5380
--- a/sys/arch/mac68k/dev/sbc.c	Sun Oct 30 21:30:34 2022 +1100
+++ b/sys/arch/mac68k/dev/sbc.c	Wed Dec 21 11:07:17 2022 +1100
@@ -249,7 +249,9 @@
 	int resid, s;
 
 	if (datalen < ncr_sc->sc_min_dma_len ||
-	    (sc->sc_options & SBC_PDMA) == 0)
+	    (sc->sc_options & SBC_PDMA) == 0 ||
+	    (ncr_sc->sc_current != NULL &&
+	    (ncr_sc->sc_current->sr_xs->xs_control & XS_CTL_POLL)))
 		return ncr5380_pio_in(ncr_sc, phase, datalen, data);
 
 	s = splbio();
@@ -315,7 +317,10 @@
 #endif
 
 	if (datalen < ncr_sc->sc_min_dma_len ||
-	    (sc->sc_options & SBC_PDMA) == 0)
+	    (sc->sc_options & SBC_PDMA) == 0 ||
+	    (sc->sc_options & SBC_PDMA_NO_WRITE) ||
+	    (ncr_sc->sc_current != NULL &&
+	    (ncr_sc->sc_current->sr_xs->xs_control & XS_CTL_POLL)))
 		return ncr5380_pio_out(ncr_sc, phase, datalen, data);
 
 	s = splbio();
--- a/sys/arch/mac68k/dev/sbcvar.h	Sun Oct 30 21:30:34 2022 +1100
+++ b/sys/arch/mac68k/dev/sbcvar.h	Wed Dec 21 11:07:17 2022 +1100
@@ -77,11 +77,12 @@
  * The options code is based on the sparc 'si' driver's version of
  * the same.
  */     
-#define	SBC_PDMA	0x01	/* Use PDMA for polled transfers */
-#define	SBC_INTR	0x02	/* Allow SCSI IRQ/DRQ interrupts */
-#define	SBC_RESELECT	0x04	/* Allow disconnect/reselect */
-#define	SBC_OPTIONS_MASK	(SBC_RESELECT|SBC_INTR|SBC_PDMA)
-#define	SBC_OPTIONS_BITS	"\10\3RESELECT\2INTR\1PDMA"
+#define	SBC_PDMA		0x01	/* Use PDMA for polled transfers */
+#define	SBC_INTR		0x02	/* Allow SCSI IRQ/DRQ interrupts */
+#define	SBC_RESELECT		0x04	/* Allow disconnect/reselect */
+#define	SBC_PDMA_NO_WRITE	0x08	/* No PDMA for writes */
+#define	SBC_OPTIONS_MASK (SBC_PDMA_NO_WRITE|SBC_RESELECT|SBC_INTR|SBC_PDMA)
+#define	SBC_OPTIONS_BITS	"\10\4NOWRITE3RESELECT\2INTR\1PDMA"
 
 extern int	sbc_debug;
 extern int	sbc_link_flags;
