Date: Sun, 24 Jul 2011 04:18:11 +0200 From: jakub.klama@uj.edu.pl To: freebsd-arm@freebsd.org, freebsd-hackers@freebsd.org, andrew@fubar.geek.nz Subject: LPC32x0 MMC/SD and DMA interface issues Message-ID: <bafc2a2fd71aafcac183678ceb584fd7@uj.edu.pl>
next in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bafc2a2fd71aafcac183678ceb584fd7>