Yuji Sasaki

mxs-mmc PIO mode with odd data length

Discussion created by Yuji Sasaki on Jul 17, 2012


Freescale uploaded patches for iMX28 Linux BSP 2.6.35-3 (patches_for_L2.6.35_MX28_SDK_10.12_SOURCE.tar.gz). When I applied it, I found my SDIO WiFi driver (Atheros AR6003) does not work anymore.

I found the cause was newly introduced "fastpath" PIO/polling mode transfer in function mxs_mmc_adtc() at drivers/mmc/host/mxs-mmc.c. It is intended to reduce DMA overhead for small (< 1024byte) amount of data transfer, but implementation is assumed that data length is always multiply of 32bit. It will be true for SD memory card but not alyways true for SDIO. Atheros AR6003 driver issues write with len=3, which caused in-kernel infinity loop.

I added length check in mxs_mmc_adtc() and confirmed it is working with AR6003. I attached patch file.

Original Attachment has been moved to: 59-mxsmmc.patch