LPC32x0 MMC/SD and DMA interface issues
jakub.klama at uj.edu.pl
jakub.klama at uj.edu.pl
Sun Jul 24 03:23:15 UTC 2011
Hi,
During my GSoC work on LPC32x0 port, I've discovered that
ARM PL180 MMC/SD controller present in SoC has completely
useless PIO mode. That is, controller can't stop card clock
when Rx FIFO buffer is full. This leads to permanent Rx
overrun errors when CPU doesn't react to arriving data as
fast as it should. Any other interrupt arriving between
reading two blocks of data from SD card will make whole
transfer fail. In practice, to make it work reasonably
reliable in PIO mode, card clock speed should be lowered
to less than 1MHz (while current SDHC cards can go with
clocks of about 30MHz).
I think that only possibility to make this controller
working reasonable is to use DMA. On LPC32x0, there is
central general-purpose DMA controller.
And there is my central question: how to interface DMA
controller driver with MMC/SD driver? Using direct
function calls between drivers? My work from previous
GSoC, Generic DMA Framework isn't ready to integrate
right now, at least not that fast to do this in current
GSoC timeline. Bearing in mind that it will be more or
less temporary solution, will direct function calls
between two drivers sufficient? Or maybe incorporate
whole DMA-dealing code in MMC/SD driver?
Regards,
Jakub Klama
More information about the freebsd-hackers
mailing list