blob: 5ecf0aa223470d0087869d670d88e35a882ab58c [file] [log] [blame]
Bryan Wu1394f032007-05-06 14:50:22 -07001/*
2 * Common header file for blackfin family of processors.
3 *
4 */
5
6#ifndef _BLACKFIN_H_
7#define _BLACKFIN_H_
8
Mike Frysingerdf30b112007-06-11 17:47:27 +08009#define LO(con32) ((con32) & 0xFFFF)
10#define lo(con32) ((con32) & 0xFFFF)
11#define HI(con32) (((con32) >> 16) & 0xFFFF)
12#define hi(con32) (((con32) >> 16) & 0xFFFF)
13
Mike Frysinger36a15482007-07-25 12:01:19 +080014#include <asm/mach/anomaly.h>
Bryan Wu1394f032007-05-06 14:50:22 -070015
16#ifndef __ASSEMBLY__
17
18/* SSYNC implementation for C file */
Mike Frysinger1aafd902007-07-25 11:19:14 +080019static inline void SSYNC(void)
Bryan Wu1394f032007-05-06 14:50:22 -070020{
21 int _tmp;
Mike Frysinger1aafd902007-07-25 11:19:14 +080022 if (ANOMALY_05000312 && ANOMALY_05000244)
23 __asm__ __volatile__(
24 "cli %0;"
25 "nop;"
26 "nop;"
27 "ssync;"
28 "sti %0;"
29 : "=d" (_tmp)
30 );
31 else if (ANOMALY_05000312 && !ANOMALY_05000244)
32 __asm__ __volatile__(
33 "cli %0;"
34 "ssync;"
35 "sti %0;"
36 : "=d" (_tmp)
37 );
38 else if (!ANOMALY_05000312 && ANOMALY_05000244)
39 __asm__ __volatile__(
40 "nop;"
41 "nop;"
42 "nop;"
43 "ssync;"
44 );
45 else
46 __asm__ __volatile__("ssync;");
Bryan Wu1394f032007-05-06 14:50:22 -070047}
Bryan Wu1394f032007-05-06 14:50:22 -070048
49/* CSYNC implementation for C file */
Mike Frysinger1aafd902007-07-25 11:19:14 +080050static inline void CSYNC(void)
Bryan Wu1394f032007-05-06 14:50:22 -070051{
52 int _tmp;
Mike Frysinger1aafd902007-07-25 11:19:14 +080053 if (ANOMALY_05000312 && ANOMALY_05000244)
54 __asm__ __volatile__(
55 "cli %0;"
56 "nop;"
57 "nop;"
58 "csync;"
59 "sti %0;"
60 : "=d" (_tmp)
61 );
62 else if (ANOMALY_05000312 && !ANOMALY_05000244)
63 __asm__ __volatile__(
64 "cli %0;"
65 "csync;"
66 "sti %0;"
67 : "=d" (_tmp)
68 );
69 else if (!ANOMALY_05000312 && ANOMALY_05000244)
70 __asm__ __volatile__(
71 "nop;"
72 "nop;"
73 "nop;"
74 "ssync;"
75 );
76 else
77 __asm__ __volatile__("csync;");
Bryan Wu1394f032007-05-06 14:50:22 -070078}
Bryan Wu1394f032007-05-06 14:50:22 -070079
Robin Getz4bf3f3c2007-06-21 11:34:16 +080080#else /* __ASSEMBLY__ */
81
82/* SSYNC & CSYNC implementations for assembly files */
83
84#define ssync(x) SSYNC(x)
85#define csync(x) CSYNC(x)
86
Mike Frysinger1aafd902007-07-25 11:19:14 +080087#if ANOMALY_05000312 && ANOMALY_05000244
Robin Getz4bf3f3c2007-06-21 11:34:16 +080088#define SSYNC(scratch) cli scratch; nop; nop; SSYNC; sti scratch;
89#define CSYNC(scratch) cli scratch; nop; nop; CSYNC; sti scratch;
90
Mike Frysinger1aafd902007-07-25 11:19:14 +080091#elif ANOMALY_05000312 && !ANOMALY_05000244
Robin Getz4bf3f3c2007-06-21 11:34:16 +080092#define SSYNC(scratch) cli scratch; nop; nop; SSYNC; sti scratch;
93#define CSYNC(scratch) cli scratch; nop; nop; CSYNC; sti scratch;
94
Mike Frysinger1aafd902007-07-25 11:19:14 +080095#elif !ANOMALY_05000312 && ANOMALY_05000244
Robin Getz4bf3f3c2007-06-21 11:34:16 +080096#define SSYNC(scratch) nop; nop; nop; SSYNC;
97#define CSYNC(scratch) nop; nop; nop; CSYNC;
98
Mike Frysinger1aafd902007-07-25 11:19:14 +080099#elif !ANOMALY_05000312 && !ANOMALY_05000244
Robin Getz4bf3f3c2007-06-21 11:34:16 +0800100#define SSYNC(scratch) SSYNC;
101#define CSYNC(scratch) CSYNC;
102
103#endif /* ANOMALY_05000312 & ANOMALY_05000244 handling */
104
Bryan Wu1394f032007-05-06 14:50:22 -0700105#endif /* __ASSEMBLY__ */
106
Mike Frysinger36a15482007-07-25 12:01:19 +0800107#include <asm/mach/blackfin.h>
108#include <asm/bfin-global.h>
109
Bryan Wu1394f032007-05-06 14:50:22 -0700110#endif /* _BLACKFIN_H_ */