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
1005c3457ec2d5d02aec58d246179df19d6b2de752Mike Frysinger#include <linux/linkage.h>	/* for asmlinkage */
1105c3457ec2d5d02aec58d246179df19d6b2de752Mike Frysinger
121394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu/*
131394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu * Bytes per L1 cache line
141394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu * Blackfin loads 32 bytes for cache
151394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu */
161394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu#define L1_CACHE_SHIFT	5
171394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu#define L1_CACHE_BYTES	(1 << L1_CACHE_SHIFT)
181394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu#define SMP_CACHE_BYTES	L1_CACHE_BYTES
191394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu
20a6eb9fe105d5de0053b261148cee56c94b4720caFUJITA Tomonori#define ARCH_DMA_MINALIGN	L1_CACHE_BYTES
2176b99699a2bbf9efdb578f9a38a202af2ecb354bFUJITA Tomonori
226b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang#ifdef CONFIG_SMP
236b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang#define __cacheline_aligned
246b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang#else
256b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang#define ____cacheline_aligned
266b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang
271394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu/*
281394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu * Put cacheline_aliged data to L1 data memory
291394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu */
301394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu#ifdef CONFIG_CACHELINE_ALIGNED_L1
311394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu#define __cacheline_aligned				\
321394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu	  __attribute__((__aligned__(L1_CACHE_BYTES),	\
331394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu		__section__(".data_l1.cacheline_aligned")))
341394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu#endif
351394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu
366b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang#endif
376b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang
381394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu/*
391394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu * largest L1 which this arch supports
401394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu */
411394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu#define L1_CACHE_SHIFT_MAX	5
421394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu
436b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang#if defined(CONFIG_SMP) && \
4447e9dedb720364e0adff0e99960fa294c6161f71Sonic Zhang    !defined(CONFIG_BFIN_CACHE_COHERENT)
4519a3b6034aed7d8ac5a15f5fa854523c1cf76674Graf Yang# if defined(CONFIG_BFIN_EXTMEM_ICACHEABLE) || defined(CONFIG_BFIN_L2_ICACHEABLE)
4647e9dedb720364e0adff0e99960fa294c6161f71Sonic Zhang# define __ARCH_SYNC_CORE_ICACHE
4747e9dedb720364e0adff0e99960fa294c6161f71Sonic Zhang# endif
4819a3b6034aed7d8ac5a15f5fa854523c1cf76674Graf Yang# if defined(CONFIG_BFIN_EXTMEM_DCACHEABLE) || defined(CONFIG_BFIN_L2_DCACHEABLE)
4947e9dedb720364e0adff0e99960fa294c6161f71Sonic Zhang# define __ARCH_SYNC_CORE_DCACHE
5047e9dedb720364e0adff0e99960fa294c6161f71Sonic Zhang# endif
516b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang#ifndef __ASSEMBLY__
526b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yangasmlinkage void __raw_smp_mark_barrier_asm(void);
536b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yangasmlinkage void __raw_smp_check_barrier_asm(void);
546b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang
556b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yangstatic inline void smp_mark_barrier(void)
566b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang{
576b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang	__raw_smp_mark_barrier_asm();
586b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang}
596b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yangstatic inline void smp_check_barrier(void)
606b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang{
616b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang	__raw_smp_check_barrier_asm();
626b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang}
636b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang
646b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yangvoid resync_core_dcache(void);
6547e9dedb720364e0adff0e99960fa294c6161f71Sonic Zhangvoid resync_core_icache(void);
666b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang#endif
676b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang#endif
686b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang
696b3087c64a92a36ae20d33479b4df6d7afc910d4Graf Yang
701394f03221790a988afc3e4b3cb79f2e477246a9Bryan Wu#endif
71