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
Best,
V.
Thank you for the suggestion ! We'll investigate that soon. On cortex a7 we indeed were missing some DMB. Cortex A9 are next
It seems we don't have to sync the PL310, but I'm keeping this in mind if we ever encounter the same errors on such boards, since it might be just luck :)