1/*
2 * Common header file for Blackfin family of processors.
3 *
4 * Copyright 2004-2009 Analog Devices Inc.
5 *
6 * Licensed under the GPL-2 or later.
7 */
8
9#ifndef _BLACKFIN_H_
10#define _BLACKFIN_H_
11
12#include <mach/anomaly.h>
13
14#ifndef __ASSEMBLY__
15
16/* SSYNC implementation for C file */
17static inline void SSYNC(void)
18{
19	int _tmp;
20	if (ANOMALY_05000312 || ANOMALY_05000244)
21		__asm__ __volatile__(
22			"cli %0;"
23			"nop;"
24			"nop;"
25			"nop;"
26			"ssync;"
27			"sti %0;"
28			: "=d" (_tmp)
29		);
30	else
31		__asm__ __volatile__("ssync;");
32}
33
34/* CSYNC implementation for C file */
35static inline void CSYNC(void)
36{
37	int _tmp;
38	if (ANOMALY_05000312 || ANOMALY_05000244)
39		__asm__ __volatile__(
40			"cli %0;"
41			"nop;"
42			"nop;"
43			"nop;"
44			"csync;"
45			"sti %0;"
46			: "=d" (_tmp)
47		);
48	else
49		__asm__ __volatile__("csync;");
50}
51
52#else  /* __ASSEMBLY__ */
53
54#define LO(con32) ((con32) & 0xFFFF)
55#define lo(con32) ((con32) & 0xFFFF)
56#define HI(con32) (((con32) >> 16) & 0xFFFF)
57#define hi(con32) (((con32) >> 16) & 0xFFFF)
58
59/* SSYNC & CSYNC implementations for assembly files */
60
61#define ssync(x) SSYNC(x)
62#define csync(x) CSYNC(x)
63
64#if ANOMALY_05000312 || ANOMALY_05000244
65#define SSYNC(scratch)	\
66	cli scratch;	\
67	nop; nop; nop;	\
68	SSYNC;		\
69	sti scratch;
70
71#define CSYNC(scratch)	\
72	cli scratch;	\
73	nop; nop; nop;	\
74	CSYNC;		\
75	sti scratch;
76
77#else
78#define SSYNC(scratch) SSYNC;
79#define CSYNC(scratch) CSYNC;
80#endif /* ANOMALY_05000312 & ANOMALY_05000244 handling */
81
82#endif /* __ASSEMBLY__ */
83
84#include <asm/mem_map.h>
85#include <mach/blackfin.h>
86#include <asm/bfin-global.h>
87
88#endif				/* _BLACKFIN_H_ */
89