We're running an i.MX6Q (and i.MX6DL) under Linux. Our board has an FPGA connected to the SoC over a 16-bit EIM bus.
Right now, we're working on a kernel driver to copy large blocks of data out of the FPGA into main memory, and are running into performance issues. We'd like to do continuous burst reads, but we're unable to get the performance we're looking for.
In our current driver we have the EIM space mapped using ioremap_wc() and we're copying out of it using memcpy(). According to our logic analyser, we're seeing sixteen 16-bit reads, followed by twelve cycles of waiting.
How can we improve the burst length? Would using the DMA engine help?