I'd like to get some advice for how to design my OMAP3530 system. I have an OMAP that is receiving data from attached FPGA via the GPMC bus. The data transfers are driven with the SDMA, so the data that's being DMA'ed into the OMAP is being dumped in a destination physical memory location. After all my data has been collected and stored in this physical memory location, its time for my Linux user-space application running on the ARM to process it, so I map the DMA's destination physical memory location with mmap() and perform a memcpy of the data into a user-space application buffer. After my data is in a virtual memory buffer, then I process it.
I'm wondering if there's a better more efficient way for my application to access this data that is stored in physical memory. I come to find out that copying memory from physical memory to virtual memory is expensive. I am searching for alternative methods that would prevent me from moving the data over to virtual space so that I do my processing. I have looked into processing the data from its physical location, but my profiles indicate this method is slower than doing a memcpy and then processing the data in virtual space.
I understand that if I was processing the data with the DSP, I wouldn't have this problem since the DSP does not have this extra layer of virtual memory space, and the data could be EDMA'ed to any location within the chip, but using the DSP is not an option for me at the moment.
Does anyone have any other idea that could work for me?