1. 程式人生 > >ARM平臺linux驅動中怎樣刷cache

ARM平臺linux驅動中怎樣刷cache

怎樣刷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