怎样刷cache

在涉及到DMA的驱动中当你对DMA的buffer进行了修改后,通常需要刷cache(当然有不需要刷cache的情况,不过我不分析它)。怎样刷cache —— 调用dma_sync_sg_for_device或它的兄弟姐妹(仔细看一下那个头文件,自然之道需要的是哪一个)。
 

刷cache的实现

以dma_sync_sg_for_device为例,阅读代码发现其真正其作用的是调用这两个函数:dmac_map_area和outer_clean_range。这两个函数都有其兄弟姐妹,是两个系列函数。它们分别是对两个全局结构体成员的包装,这两个全局结构体就是在setup.c中的cpu_cache和outer_cache。
在函数setup_processor中:
#ifdef MULTI_CACHE
	cpu_cache = *list->cache;
#endif
而outer_cache的初始化,见arch/arm/mm/Makefile中的一段:
obj-$(CONFIG_CACHE_FEROCEON_L2)	+= cache-feroceon-l2.o
obj-$(CONFIG_CACHE_L2X0)	+= cache-l2x0.o
obj-$(CONFIG_CACHE_XSC3L2)	+= cache-xsc3l2.o
obj-$(CONFIG_CACHE_TAUROS2)	+= cache-tauros2.o


 
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐