--- 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;