/* * Copyright 2004-2009 Analog Devices Inc. * * Licensed under the GPL-2 or later. */ #ifndef __ARCH_BLACKFIN_CACHE_H #define __ARCH_BLACKFIN_CACHE_H #include <linux/linkage.h> /* for asmlinkage */ /* * Bytes per L1 cache line * Blackfin loads 32 bytes for cache */ #define L1_CACHE_SHIFT 5 #define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT) #define SMP_CACHE_BYTES L1_CACHE_BYTES #define ARCH_DMA_MINALIGN L1_CACHE_BYTES #ifdef CONFIG_SMP #define __cacheline_aligned #else #define ____cacheline_aligned /* * Put cacheline_aliged data to L1 data memory */ #ifdef CONFIG_CACHELINE_ALIGNED_L1 #define __cacheline_aligned \ __attribute__((__aligned__(L1_CACHE_BYTES), \ __section__(".data_l1.cacheline_aligned"))) #endif #endif /* * largest L1 which this arch supports */ #define L1_CACHE_SHIFT_MAX 5 #if defined(CONFIG_SMP) && \ !defined(CONFIG_BFIN_CACHE_COHERENT) # if defined(CONFIG_BFIN_EXTMEM_ICACHEABLE) || defined(CONFIG_BFIN_L2_ICACHEABLE) # define __ARCH_SYNC_CORE_ICACHE # endif # if defined(CONFIG_BFIN_EXTMEM_DCACHEABLE) || defined(CONFIG_BFIN_L2_DCACHEABLE) # define __ARCH_SYNC_CORE_DCACHE # endif #ifndef __ASSEMBLY__ asmlinkage void __raw_smp_mark_barrier_asm(void); asmlinkage void __raw_smp_check_barrier_asm(void); static inline void smp_mark_barrier(void) { __raw_smp_mark_barrier_asm(); } static inline void smp_check_barrier(void) { __raw_smp_check_barrier_asm(); } void resync_core_dcache(void); void resync_core_icache(void); #endif #endif #endif