Oleksij Rempel
2014-10-07 09:37:45 UTC
Hello Jens,
i hope it is OK to ask you directly, i didn't found better way to do
this.
I'm writing MMC driver based on reverse engineering for au6601 mmc
controller. This driver uses MMC API, and last one trying to use BLK API
as directly as possible. So far so gut, but i have a problem by using SG
requests with DMA without conversation. This controller accepts only
addresses with this mask 0xffff.f000 - also page aligned.
Till now i tried different QUEUE_FLAG_ flags and blk_queue settings, but
i never had absolute aligned quarantine.
Please tell me if i do some thing wrong or go in the wrong direction.
Unless you can accept a 4kb hardware block size (and I'm assuming youi hope it is OK to ask you directly, i didn't found better way to do
this.
I'm writing MMC driver based on reverse engineering for au6601 mmc
controller. This driver uses MMC API, and last one trying to use BLK API
as directly as possible. So far so gut, but i have a problem by using SG
requests with DMA without conversation. This controller accepts only
addresses with this mask 0xffff.f000 - also page aligned.
Till now i tried different QUEUE_FLAG_ flags and blk_queue settings, but
i never had absolute aligned quarantine.
Please tell me if i do some thing wrong or go in the wrong direction.
cannot, since you need to support 512b file systems?), then you'd have
to bounce the requests that don't align properly. You can fix some of
them by setting blk_queue_dma_alignment(q, 4095).
we are.
Hi Ulf,
here is the list of drivers which do care about dma alignment . Some of
them use bounce_buffer, some will use PIO instead of DMA, for not
aligned requests:
dw_mmc.c: dw_mci_pre_dma_transfer
wbsd.c
usdhi6rol0.c
tmio_mmc_dma.c
sunxi-mmc.c
sdhci.c
pxamci.c
mvsdio.c
au6601.c(not upstream jet)
The problem of all this driver is that each of them use own solution. I
think this code can be moved to some common place. For example, it can
be done in drivers/mmc/card/queue.c and enabled by
mmc_host_dma_alignment variable. Or provide a mmc_sg_align() function,
which should be called explicatively by driver.
Which option is preferable?
--
Regards,
Oleksij
Regards,
Oleksij