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
next prev parent 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