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