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