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