public inbox for linux-m68k@lists.linux-m68k.org
 help / color / mirror / Atom feed
From: Michael Schmitz <schmitzmic@gmail.com>
To: Finn Thain <fthain@telegraphics.com.au>
Cc: Sam Creasey <sammy@sammy.net>,
	Christoph Hellwig <hch@infradead.org>,
	Michael Schmitz <schmitz@debian.org>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Linux/m68k <linux-m68k@vger.kernel.org>
Subject: Re: Sun3 SCSI DMA, was Re: converting the NCR5380 drivers away from scsi_register
Date: Wed, 13 Aug 2014 21:14:52 +1200	[thread overview]
Message-ID: <53EB2C8C.3070608@gmail.com> (raw)
In-Reply-To: <alpine.LNX.2.00.1408131511150.12942@nippy.intranet>

Hi Finn,
> 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).
>   

Transfer sizes for message in during reselection are only a few bytes. 
According to atari_dma_xfer_len(), DMA reads must be multiple of 512 
bytes (writes can be rounded up, reads cannot). PIO is the only option 
for Atari, I'm afraid.

> For NCR5380_information_transfer() and PHASE_DATAIN, atari will use PIO 
> for transfersize <= 31 bytes whereas sun3 will use PIO for <= 128 bytes. 
>   

IIRC the ST-DMA can't be programmed for shorter transfers than 512 bytes. 
The condition

(transfersize = NCR5380_dma_xfer_len(instance,cmd,phase)) > 31)

enforces that - transfersize will be 0 on reads that are not multiples 
of 512 bytes (and even some where the advertised transfer size does meet 
that condition, but the command is not guranteed to be a block mode 
command (tape reads).

> However, atari never uses DMA here if cmd->device->borken.
>   

Different semantics of borken, I presume. On Atari, this means a DMA 
transfer has failed earlier.

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

Performance, perhaps. PIO would work, but hog the CPU. In fact, PIO for 
everything _does_ work, on Falcon as well as Mac (I tried the PIO only 
mode on the Falcon before trying on Mac). Did I eve mention how reallly 
incredibly painfully slow that is?

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

Might be a similar limitation to certain transfer sizes here. Block mode 
vs. char mode.

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

I don't think we can use DMA for the reselect message in transfers. Data 
phase transfer is handled by the coroutine after reselection anyway - 
that one will use DMA.

Cheers,

    Michael

  reply	other threads:[~2014-08-13  9:14 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-16 14:18 converting the NCR5380 drivers away from scsi_register Christoph Hellwig
2014-06-17  8:20 ` Finn Thain
2014-06-17  8:38   ` Geert Uytterhoeven
2014-07-30  8:32     ` Finn Thain
2014-07-31  5:31       ` Michael Schmitz
2014-08-01  3:13         ` Finn Thain
2014-08-01  8:15           ` Michael Schmitz
2014-08-02  1:27             ` Finn Thain
2014-08-02  8:51               ` Michael Schmitz
2014-08-03  3:43                 ` Finn Thain
2014-08-03  9:07                   ` Michael Schmitz
2014-08-04  3:28                     ` Finn Thain
2014-08-05  9:06                       ` Michael Schmitz
2014-08-06  1:25                         ` Sun3 SCSI DMA, was " Finn Thain
2014-08-06 14:42                           ` Sam Creasey
2014-08-08  8:46                             ` Michael Schmitz
2014-08-11 15:10                               ` Sam Creasey
2014-08-13  5:29                                 ` Finn Thain
2014-08-13  9:14                                   ` Michael Schmitz [this message]
2014-08-14  1:43                                     ` Finn Thain
2014-08-14  8:57                                       ` Michael Schmitz
2014-08-15  1:46                                         ` Finn Thain
2014-08-15  1:51                                           ` Michael Schmitz
2014-08-15  2:09                                         ` Finn Thain
2014-08-15  3:03                                           ` Michael Schmitz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=53EB2C8C.3070608@gmail.com \
    --to=schmitzmic@gmail.com \
    --cc=fthain@telegraphics.com.au \
    --cc=geert@linux-m68k.org \
    --cc=hch@infradead.org \
    --cc=linux-m68k@vger.kernel.org \
    --cc=sammy@sammy.net \
    --cc=schmitz@debian.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox