Non-Cacheable memory and DMA on armv7a

Hi !

Consider a micro-kernel (not Linux) where device drivers are userland applications (PL0).

We would like to use DMA based device, like an Ethernet controller for example. To this mean, the micro kernel allocate some memory to the user application. In the past, we allocate Device Memory for this purpose, as a quick and dirty solution because we could only allocate normal cacheable memory or device memory. We recently changed that to allocate memory which is:

- Normal memory

- Non-Cacheable

- Shareable

Now some driver code is no longer working as expected. I'm pretty sure were are missing some memory barriers, but I'd like to know if our goal is achievable: can we use DMA with normal, non-cacheable memory (shared or not, any advice on the matter is welcome) without using cache maintenance operation.

If that matters, the CPU we are targeting are Cortex A9 (with PL310 L2 cache) and Cortex A7