blackfin: cleanup anomaly workarounds
authorBob Liu <lliubbo@gmail.com>
Fri, 27 Jan 2012 14:10:04 +0000 (22:10 +0800)
committerBob Liu <lliubbo@gmail.com>
Wed, 21 Mar 2012 03:00:08 +0000 (11:00 +0800)
cleanup ANOMALY_05000312 and ANOMALY_05000244

Signed-off-by: Robin Getz <robin.getz@analog.com>
Signed-off-by: Bob Liu <lliubbo@gmail.com>
arch/blackfin/include/asm/blackfin.h

index 0928700..7be5368 100644 (file)
 static inline void SSYNC(void)
 {
        int _tmp;
-       if (ANOMALY_05000312)
+       if (ANOMALY_05000312 || ANOMALY_05000244)
                __asm__ __volatile__(
                        "cli %0;"
                        "nop;"
                        "nop;"
+                       "nop;"
                        "ssync;"
                        "sti %0;"
                        : "=d" (_tmp)
                );
-       else if (ANOMALY_05000244)
-               __asm__ __volatile__(
-                       "nop;"
-                       "nop;"
-                       "nop;"
-                       "ssync;"
-               );
        else
                __asm__ __volatile__("ssync;");
 }
@@ -41,22 +35,16 @@ static inline void SSYNC(void)
 static inline void CSYNC(void)
 {
        int _tmp;
-       if (ANOMALY_05000312)
+       if (ANOMALY_05000312 || ANOMALY_05000244)
                __asm__ __volatile__(
                        "cli %0;"
                        "nop;"
                        "nop;"
+                       "nop;"
                        "csync;"
                        "sti %0;"
                        : "=d" (_tmp)
                );
-       else if (ANOMALY_05000244)
-               __asm__ __volatile__(
-                       "nop;"
-                       "nop;"
-                       "nop;"
-                       "csync;"
-               );
        else
                __asm__ __volatile__("csync;");
 }
@@ -73,18 +61,26 @@ static inline void CSYNC(void)
 #define ssync(x) SSYNC(x)
 #define csync(x) CSYNC(x)
 
-#if ANOMALY_05000312
-#define SSYNC(scratch) cli scratch; nop; nop; SSYNC; sti scratch;
-#define CSYNC(scratch) cli scratch; nop; nop; CSYNC; sti scratch;
-
-#elif ANOMALY_05000244
-#define SSYNC(scratch) nop; nop; nop; SSYNC;
-#define CSYNC(scratch) nop; nop; nop; CSYNC;
+#if ANOMALY_05000312 || ANOMALY_05000244
+#define SSYNC(scratch) \
+do {                   \
+       cli scratch;    \
+       nop; nop; nop;  \
+       SSYNC;          \
+       sti scratch;    \
+} while (0)
+
+#define CSYNC(scratch) \
+do {                   \
+       cli scratch;    \
+       nop; nop; nop;  \
+       CSYNC;          \
+       sti scratch;    \
+} while (0)
 
 #else
 #define SSYNC(scratch) SSYNC;
 #define CSYNC(scratch) CSYNC;
-
 #endif /* ANOMALY_05000312 & ANOMALY_05000244 handling */
 
 #endif /* __ASSEMBLY__ */