cache.h revision 96f1050d3df105c9ae6c6ac224f370199ea82fcd
11394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu/* 296f1050d3df105c9ae6c6ac224f370199ea82fcdRobin Getz * Copyright 2004-2009 Analog Devices Inc. 396f1050d3df105c9ae6c6ac224f370199ea82fcdRobin Getz * 496f1050d3df105c9ae6c6ac224f370199ea82fcdRobin Getz * Licensed under the GPL-2 or later. 51394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu */ 696f1050d3df105c9ae6c6ac224f370199ea82fcdRobin Getz 71394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu#ifndef __ARCH_BLACKFIN_CACHE_H 81394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu#define __ARCH_BLACKFIN_CACHE_H 91394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu 101394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu/* 111394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu * Bytes per L1 cache line 121394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu * Blackfin loads 32 bytes for cache 131394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu */ 141394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu#define L1_CACHE_SHIFT 5 151394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu#define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT) 161394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu#define SMP_CACHE_BYTES L1_CACHE_BYTES 171394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu 186b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang#ifdef CONFIG_SMP 196b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang#define __cacheline_aligned 206b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang#else 216b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang#define ____cacheline_aligned 226b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang 231394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu/* 241394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu * Put cacheline_aliged data to L1 data memory 251394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu */ 261394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu#ifdef CONFIG_CACHELINE_ALIGNED_L1 271394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu#define __cacheline_aligned \ 281394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu __attribute__((__aligned__(L1_CACHE_BYTES), \ 291394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu __section__(".data_l1.cacheline_aligned"))) 301394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu#endif 311394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu 326b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang#endif 336b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang 341394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu/* 351394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu * largest L1 which this arch supports 361394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu */ 371394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu#define L1_CACHE_SHIFT_MAX 5 381394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu 396b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang#if defined(CONFIG_SMP) && \ 4047e9dedb720364e0adff0e99960fa294c6161f71Sonic Zhang !defined(CONFIG_BFIN_CACHE_COHERENT) 4141ba653f24a39a0e6a4afe9b2763a95a57e042c2Jie Zhang# if defined(CONFIG_BFIN_ICACHEABLE) || defined(CONFIG_BFIN_L2_ICACHEABLE) 4247e9dedb720364e0adff0e99960fa294c6161f71Sonic Zhang# define __ARCH_SYNC_CORE_ICACHE 4347e9dedb720364e0adff0e99960fa294c6161f71Sonic Zhang# endif 4441ba653f24a39a0e6a4afe9b2763a95a57e042c2Jie Zhang# if defined(CONFIG_BFIN_DCACHEABLE) || defined(CONFIG_BFIN_L2_DCACHEABLE) 4547e9dedb720364e0adff0e99960fa294c6161f71Sonic Zhang# define __ARCH_SYNC_CORE_DCACHE 4647e9dedb720364e0adff0e99960fa294c6161f71Sonic Zhang# endif 476b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang#ifndef __ASSEMBLY__ 486b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yangasmlinkage void __raw_smp_mark_barrier_asm(void); 496b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yangasmlinkage void __raw_smp_check_barrier_asm(void); 506b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang 516b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yangstatic inline void smp_mark_barrier(void) 526b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang{ 536b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang __raw_smp_mark_barrier_asm(); 546b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang} 556b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yangstatic inline void smp_check_barrier(void) 566b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang{ 576b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang __raw_smp_check_barrier_asm(); 586b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang} 596b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang 606b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yangvoid resync_core_dcache(void); 6147e9dedb720364e0adff0e99960fa294c6161f71Sonic Zhangvoid resync_core_icache(void); 626b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang#endif 636b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang#endif 646b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang 656b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang 661394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu#endif 67