
Hi Stephen,
On 24 October 2014 13:11, Stephen Warren swarren@wwwdotorg.org wrote:
On 08/26/2014 09:34 AM, Thierry Reding wrote:
From: Thierry Reding treding@nvidia.com
Implement an API that can be used by drivers to allocate memory from a pool that is mapped uncached. This is useful if drivers would otherwise need to do extensive cache maintenance (or explicitly maintaining the cache isn't safe).
The API is protected using the new CONFIG_SYS_NONCACHED_MEMORY setting. Boards can set this to the size to be used for the non-cached area. The area will typically be right below the malloc() area, but architectures should take care of aligning the beginning and end of the area to honor any mapping restrictions. Architectures must also ensure that mappings established for this area do not overlap with the malloc() area (which should remain cached for improved performance).
While the API is currently only implemented for ARM v7, it should be generic enough to allow other architectures to implement it as well.
diff --git a/arch/arm/lib/cache.c b/arch/arm/lib/cache.c
+void noncached_init(void)
...
mmu_set_region_dcache_behaviour(noncached_start, size,
DCACHE_OFF); +}
If I build with:
#define CONFIG_SYS_DCACHE_OFF #define CONFIG_SYS_ICACHE_OFF
... then mmu_set_region_dcache_behaviour() doesn't exist (or at least isn't linked in) on Jetson TK1 at least.
I see that too. If you #undef CONFIG_SYS_NONCACHED_MEMORY then the problem goes away. There is a warning in the network driver in this case but it is not important.
A better solution is probably an #ifdef around the call you mention. It minimised code changes when cache is on/off which is probably a good thing.
Regards Simon