From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: linux-ide@vger.kernel.org
Cc: Jeff Garzik <jgarzik@pobox.com>, Tejun Heo <htejun@gmail.com>
Subject: libata and DMA quirks
Date: Fri, 27 Jun 2008 16:41:34 +1000 [thread overview]
Message-ID: <1214548895.8011.526.camel@pasglop> (raw)
Hi !
While doing a pmac libata PATA driver, I've been looking at some of the
info we have from Apple (mostly the Darwin code) and some interesting
stuff pops out.
The main one is that one their latest cell, they do the following
"workarounds" which I never implemented in drivers/ide/ppc/pmac.c but
I'd like to implement in the libata driver, unless you believe that is
unnecessary:
a) For any ATAPI DMA, If the transfer size is not a multiple of 16
bytes, switch to PIO for this command.
b) Double buffer all ATAPI DMA reads. They allocate a 128K DMA buffer
and limit all requests to 128K. Then, they route all incoming DMAs to
that buffer and copy back to the original buffer on completion.
The comments in the code seem to indicate this has to do with "alignment
restrictions", unfortunately, I have no more infos so I don't know what
the actual underlying HW issues are.
I could use some tips as to how to implement these in the libata driver.
For a) I'm not sure about either overriding qc_prep or qc_issue and what
would be the consequence of changing tf.protocol there ? Among others,
qc_prep() would be after dma_map_sg has been performed, which is a
concern. I suppose I can ignore the DMA mapping, that would just be a
peformance issue.
Do you see anything else that could shoke on a change of protocol at
that stage ?
For b) I should be able to completely hide that within my qc_prep and
completion, by silently using a different DMA target. I suppose I can
use tf.command == ATA_CMD_ID_ATAPI to differenciate with ATA commands.
How do I set the max request size with the block layer tho from a libata
sub-driver ?
Thanks,
Cheers,
Ben.
next reply other threads:[~2008-06-27 8:22 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-27 6:41 Benjamin Herrenschmidt [this message]
2008-06-27 8:37 ` libata and DMA quirks Sergei Shtylyov
2008-06-27 8:51 ` Benjamin Herrenschmidt
2008-06-27 9:10 ` Sergei Shtylyov
2008-06-27 9:31 ` Benjamin Herrenschmidt
2008-06-27 8:54 ` Alan Cox
2008-06-27 9:29 ` Benjamin Herrenschmidt
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=1214548895.8011.526.camel@pasglop \
--to=benh@kernel.crashing.org \
--cc=htejun@gmail.com \
--cc=jgarzik@pobox.com \
--cc=linux-ide@vger.kernel.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