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

Reply via email to