I don't know if these links are helpful or known yet:
http://greekclaud.blogspot.com/2009_08_01_archive.html
http://groups.google.com/group/beagleboard/browse_thread/thread/25fcddf411c5da57/ec89bda9a40c0d2c?lnk=raot
http://markmail.org/message/h3i55qgkxcfqejpo
http://permalink.gmane.org/gmane.comp.hardware.beagleboard.user/1952
In my case , on OMAP3530 the SDIO xfer fails in 2 cases.
1. source buffer is not in DMA:able space.
2. source buffer address is not 4 buf aligned.
BTW, I replaced both the omap_hsmmc and SDIO driver with drivers I ported from an omap 2430 implementation and solved all performance problems (4-bit mode with interrupts now working). This is on the 2.6.29-rc3 kernel with B7 beagleboard. I haven't looked yet but I'll bet this implementation uses pre- allocated kmalloced buffers as you suggested.
Using kmalloced DMA:able buffer before calling sdio_memcpy_fromio/sdio_memcpy_toio is a workaround.
drivers/mmc/host/omap.c switches to PIO when DMA is not possible due to constraints.
drivers/mmc/host/omap_hsmmc.c always attempts DMA. I tried host->use_dma = 0, but it didn't work.
compare definition of function mmc_omap_prepare_data in both the drivers.
Finially I get a workable WL1251 driver with beagleboard. The tcp performance ~10 Mbps with iperf. The DMA workaround is work like Kalpesh's hint. But the size of DMA need to adjust.