On Mon, 11 Aug 2014, Sam Creasey wrote: > On Fri, Aug 08, 2014 at 08:46:08PM +1200, Michael Schmitz wrote: > > >IIRC, the DMA controller for the sun3's NCR5380 implementation is > > >extremely fussy about what happens in which phase, and it's quick to > > >anger if you don't handle everything exactly how it expects. > > > > > > > Does the DMA controller also sit in between the bus and the NCR chip, > > as on Falcon? Otherwise, I can't see how it would matter if we just > > bypass it and use PIO instead. > > > > The PIO code from the Atari driver worked just fine for the Mac 5380 > > (in fact, the first Mac driver used PIO for everything, including data > > in/out). > > PIO definitely works on the Sun3 implementation under the right > circumstances, I ran it in PIO mode only for a while (much like the Mac > driver). > > I can't remember the bus configuration offhand.
It might not be a big problem: sun3_scsi does a lot of PIO a lot as it is. For NCR5380_reselect(), atari_NCR5380.c apparently uses only PIO whereas sun3_NCR5380.c will use PIO up to a 128 byte size limit (beyond which, only DMA is used). For NCR5380_information_transfer() and PHASE_DATAIN, atari will use PIO for transfersize <= 31 bytes whereas sun3 will use PIO for <= 128 bytes. However, atari never uses DMA here if cmd->device->borken. When cmd->device->borken, I assume sun3_NCR5380 inhibits PIO because PIO was itself expected to be problematic? OTOH, if PIO works up to 128 bytes in all cases, why not larger transfers? Does the sun3_scsi driver still work after removing #define REAL_DMA? For NCR5380_information_transfer() and PHASE_CMDOUT, the sun3 version applies the same size limit but only does DMA setup if cmd type is REQ_TYPE_FS (i.e. filesystem request). This command is then sent by PIO, so the DMA setup here seems to assume that the next phase will always be PHASE_DATAIN... This would seem to imply that PIO always works when not REQ_TYPE_FS, such that no size limit is applicable... BTW, testing sun3_dma_setup_done against cmd pointers looks very unreliable to me: unique cmds only have unique pointers until freed by the scsi mid-layer. After that, the same pointer is likely be re-used. > > > > > >I definitely remember that the DMA setup logic from the atari version > > >did not work at all on sun3. > > > > No surprise there - DMA is implementation specific and needs to be > > handled on a per-case basis. Perhaps atari_NCR5380 could use some of the sun3_NCR5380 code. E.g. atari avoids DMA entirely for reselect, and (only in some phases) when cmd->device->borken. -- -- To unsubscribe from this list: send the line "unsubscribe linux-m68k" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
