ARM平臺linux驅動中怎樣刷cache
阿新 • • 發佈:2019-01-04
怎樣刷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中:而outer_cache的初始化,見arch/arm/mm/Makefile中的一段:#ifdef MULTI_CACHE cpu_cache = *list->cache; #endif
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