diff options
author | Robin Getz <robin.getz@analog.com> | 2007-06-20 23:34:16 -0400 |
---|---|---|
committer | Bryan Wu <bryan.wu@analog.com> | 2007-06-20 23:34:16 -0400 |
commit | 4bf3f3cbb6add01d3e6a18c73f594b73113b14f2 (patch) | |
tree | a80839f98a64052f4d004a5207da2731fe556908 | |
parent | 0864a4e201b1ea442f4c8b887418a29f67e24d30 (diff) |
Blackfin arch: update ANOMALY handling
update lists for 533, 537, and add SSYNC workaround into assembly files.
Signed-off-by: Robin Getz <robin.getz@analog.com>
Signed-off-by: Bryan Wu <bryan.wu@analog.com>
-rw-r--r-- | arch/blackfin/lib/memcmp.S | 5 | ||||
-rw-r--r-- | arch/blackfin/lib/memcpy.S | 13 | ||||
-rw-r--r-- | arch/blackfin/lib/memmove.S | 17 | ||||
-rw-r--r-- | arch/blackfin/mach-common/cache.S | 20 | ||||
-rw-r--r-- | arch/blackfin/mach-common/interrupt.S | 2 | ||||
-rw-r--r-- | include/asm-blackfin/blackfin.h | 33 | ||||
-rw-r--r-- | include/asm-blackfin/mach-bf533/anomaly.h | 84 | ||||
-rw-r--r-- | include/asm-blackfin/mach-bf537/anomaly.h | 21 | ||||
-rw-r--r-- | include/asm-blackfin/mach-common/cdef_LPBlackfin.h | 27 |
9 files changed, 197 insertions, 25 deletions
diff --git a/arch/blackfin/lib/memcmp.S b/arch/blackfin/lib/memcmp.S index a6b8ee6a6bf2..b88c5d2d1ebe 100644 --- a/arch/blackfin/lib/memcmp.S +++ b/arch/blackfin/lib/memcmp.S | |||
@@ -61,7 +61,12 @@ ENTRY(_memcmp) | |||
61 | 61 | ||
62 | LSETUP (.Lquad_loop_s, .Lquad_loop_e) LC0=P1; | 62 | LSETUP (.Lquad_loop_s, .Lquad_loop_e) LC0=P1; |
63 | .Lquad_loop_s: | 63 | .Lquad_loop_s: |
64 | #ifdef ANOMALY_05000202 | ||
65 | R0 = [P0++]; | ||
66 | R1 = [I0++]; | ||
67 | #else | ||
64 | MNOP || R0 = [P0++] || R1 = [I0++]; | 68 | MNOP || R0 = [P0++] || R1 = [I0++]; |
69 | #endif | ||
65 | CC = R0 == R1; | 70 | CC = R0 == R1; |
66 | IF !CC JUMP .Lquad_different; | 71 | IF !CC JUMP .Lquad_different; |
67 | .Lquad_loop_e: | 72 | .Lquad_loop_e: |
diff --git a/arch/blackfin/lib/memcpy.S b/arch/blackfin/lib/memcpy.S index 34b5a91c215c..14a5585bbd02 100644 --- a/arch/blackfin/lib/memcpy.S +++ b/arch/blackfin/lib/memcpy.S | |||
@@ -94,13 +94,20 @@ ENTRY(_memcpy) | |||
94 | .Lmore_than_seven: | 94 | .Lmore_than_seven: |
95 | /* There's at least eight bytes to copy. */ | 95 | /* There's at least eight bytes to copy. */ |
96 | P2 += -1; /* because we unroll one iteration */ | 96 | P2 += -1; /* because we unroll one iteration */ |
97 | LSETUP(.Lword_loop, .Lword_loop) LC0=P2; | 97 | LSETUP(.Lword_loops, .Lword_loope) LC0=P2; |
98 | R0 = R1; | 98 | R0 = R1; |
99 | I1 = P1; | 99 | I1 = P1; |
100 | R3 = [I1++]; | 100 | R3 = [I1++]; |
101 | .Lword_loop: | 101 | #ifdef ANOMALY_05000202 |
102 | .Lword_loops: | ||
103 | [P0++] = R3; | ||
104 | .Lword_loope: | ||
105 | R3 = [I1++]; | ||
106 | #else | ||
107 | .Lword_loops: | ||
108 | .Lword_loope: | ||
102 | MNOP || [P0++] = R3 || R3 = [I1++]; | 109 | MNOP || [P0++] = R3 || R3 = [I1++]; |
103 | 110 | #endif | |
104 | [P0++] = R3; | 111 | [P0++] = R3; |
105 | /* Any remaining bytes to copy? */ | 112 | /* Any remaining bytes to copy? */ |
106 | R3 = 0x3; | 113 | R3 = 0x3; |
diff --git a/arch/blackfin/lib/memmove.S b/arch/blackfin/lib/memmove.S index c371585e9dbd..6ee6e206e77c 100644 --- a/arch/blackfin/lib/memmove.S +++ b/arch/blackfin/lib/memmove.S | |||
@@ -69,8 +69,17 @@ ENTRY(_memmove) | |||
69 | P2 = R2; /* set remainder */ | 69 | P2 = R2; /* set remainder */ |
70 | R1 = [I0++]; | 70 | R1 = [I0++]; |
71 | 71 | ||
72 | LSETUP (.Lquad_loop, .Lquad_loop) LC0=P1; | 72 | LSETUP (.Lquad_loops, .Lquad_loope) LC0=P1; |
73 | .Lquad_loop: MNOP || [P0++] = R1 || R1 = [I0++]; | 73 | #ifdef ANOMALY_05000202 |
74 | .Lquad_loops: | ||
75 | [P0++] = R1; | ||
76 | .Lquad_loope: | ||
77 | R1 = [I0++]; | ||
78 | #else | ||
79 | .Lquad_loops: | ||
80 | .Lquad_loope: | ||
81 | MNOP || [P0++] = R1 || R1 = [I0++]; | ||
82 | #endif | ||
74 | [P0++] = R1; | 83 | [P0++] = R1; |
75 | 84 | ||
76 | CC = P2 == 0; /* any remaining bytes? */ | 85 | CC = P2 == 0; /* any remaining bytes? */ |
@@ -93,6 +102,10 @@ ENTRY(_memmove) | |||
93 | R1 = B[P3--] (Z); | 102 | R1 = B[P3--] (Z); |
94 | CC = P2 == 0; | 103 | CC = P2 == 0; |
95 | IF CC JUMP .Lno_loop; | 104 | IF CC JUMP .Lno_loop; |
105 | #ifdef ANOMALY_05000245 | ||
106 | NOP; | ||
107 | NOP; | ||
108 | #endif | ||
96 | LSETUP (.Lol_s, .Lol_e) LC0 = P2; | 109 | LSETUP (.Lol_s, .Lol_e) LC0 = P2; |
97 | .Lol_s: B[P0--] = R1; | 110 | .Lol_s: B[P0--] = R1; |
98 | .Lol_e: R1 = B[P3--] (Z); | 111 | .Lol_e: R1 = B[P3--] (Z); |
diff --git a/arch/blackfin/mach-common/cache.S b/arch/blackfin/mach-common/cache.S index 8bd2af1935bd..7063795eb7c0 100644 --- a/arch/blackfin/mach-common/cache.S +++ b/arch/blackfin/mach-common/cache.S | |||
@@ -123,14 +123,14 @@ ENTRY(_blackfin_icache_flush_range) | |||
123 | R2 = R0 & R2; | 123 | R2 = R0 & R2; |
124 | P0 = R2; | 124 | P0 = R2; |
125 | P1 = R1; | 125 | P1 = R1; |
126 | CSYNC; | 126 | CSYNC(R3); |
127 | IFLUSH [P0]; | 127 | IFLUSH [P0]; |
128 | 1: | 128 | 1: |
129 | IFLUSH [P0++]; | 129 | IFLUSH [P0++]; |
130 | CC = P0 < P1 (iu); | 130 | CC = P0 < P1 (iu); |
131 | IF CC JUMP 1b (bp); | 131 | IF CC JUMP 1b (bp); |
132 | IFLUSH [P0]; | 132 | IFLUSH [P0]; |
133 | SSYNC; | 133 | SSYNC(R3); |
134 | RTS; | 134 | RTS; |
135 | ENDPROC(_blackfin_icache_flush_range) | 135 | ENDPROC(_blackfin_icache_flush_range) |
136 | 136 | ||
@@ -148,7 +148,7 @@ ENTRY(_blackfin_icache_dcache_flush_range) | |||
148 | R2 = R0 & R2; | 148 | R2 = R0 & R2; |
149 | P0 = R2; | 149 | P0 = R2; |
150 | P1 = R1; | 150 | P1 = R1; |
151 | CSYNC; | 151 | CSYNC(R3); |
152 | IFLUSH [P0]; | 152 | IFLUSH [P0]; |
153 | 1: | 153 | 1: |
154 | FLUSH [P0]; | 154 | FLUSH [P0]; |
@@ -157,7 +157,7 @@ ENTRY(_blackfin_icache_dcache_flush_range) | |||
157 | IF CC JUMP 1b (bp); | 157 | IF CC JUMP 1b (bp); |
158 | IFLUSH [P0]; | 158 | IFLUSH [P0]; |
159 | FLUSH [P0]; | 159 | FLUSH [P0]; |
160 | SSYNC; | 160 | SSYNC(R3); |
161 | RTS; | 161 | RTS; |
162 | ENDPROC(_blackfin_icache_dcache_flush_range) | 162 | ENDPROC(_blackfin_icache_dcache_flush_range) |
163 | 163 | ||
@@ -174,7 +174,7 @@ ENTRY(_blackfin_dcache_invalidate_range) | |||
174 | R2 = R0 & R2; | 174 | R2 = R0 & R2; |
175 | P0 = R2; | 175 | P0 = R2; |
176 | P1 = R1; | 176 | P1 = R1; |
177 | CSYNC; | 177 | CSYNC(R3); |
178 | FLUSHINV[P0]; | 178 | FLUSHINV[P0]; |
179 | 1: | 179 | 1: |
180 | FLUSHINV[P0++]; | 180 | FLUSHINV[P0++]; |
@@ -186,7 +186,7 @@ ENTRY(_blackfin_dcache_invalidate_range) | |||
186 | * so do one more. | 186 | * so do one more. |
187 | */ | 187 | */ |
188 | FLUSHINV[P0]; | 188 | FLUSHINV[P0]; |
189 | SSYNC; | 189 | SSYNC(R3); |
190 | RTS; | 190 | RTS; |
191 | ENDPROC(_blackfin_dcache_invalidate_range) | 191 | ENDPROC(_blackfin_dcache_invalidate_range) |
192 | 192 | ||
@@ -235,7 +235,7 @@ ENTRY(_blackfin_dcache_flush_range) | |||
235 | R2 = R0 & R2; | 235 | R2 = R0 & R2; |
236 | P0 = R2; | 236 | P0 = R2; |
237 | P1 = R1; | 237 | P1 = R1; |
238 | CSYNC; | 238 | CSYNC(R3); |
239 | FLUSH[P0]; | 239 | FLUSH[P0]; |
240 | 1: | 240 | 1: |
241 | FLUSH[P0++]; | 241 | FLUSH[P0++]; |
@@ -247,17 +247,17 @@ ENTRY(_blackfin_dcache_flush_range) | |||
247 | * one more. | 247 | * one more. |
248 | */ | 248 | */ |
249 | FLUSH[P0]; | 249 | FLUSH[P0]; |
250 | SSYNC; | 250 | SSYNC(R3); |
251 | RTS; | 251 | RTS; |
252 | ENDPROC(_blackfin_dcache_flush_range) | 252 | ENDPROC(_blackfin_dcache_flush_range) |
253 | 253 | ||
254 | ENTRY(_blackfin_dflush_page) | 254 | ENTRY(_blackfin_dflush_page) |
255 | P1 = 1 << (PAGE_SHIFT - L1_CACHE_SHIFT); | 255 | P1 = 1 << (PAGE_SHIFT - L1_CACHE_SHIFT); |
256 | P0 = R0; | 256 | P0 = R0; |
257 | CSYNC; | 257 | CSYNC(R3); |
258 | FLUSH[P0]; | 258 | FLUSH[P0]; |
259 | LSETUP (.Lfl1, .Lfl1) LC0 = P1; | 259 | LSETUP (.Lfl1, .Lfl1) LC0 = P1; |
260 | .Lfl1: FLUSH [P0++]; | 260 | .Lfl1: FLUSH [P0++]; |
261 | SSYNC; | 261 | SSYNC(R3); |
262 | RTS; | 262 | RTS; |
263 | ENDPROC(_blackfin_dflush_page) | 263 | ENDPROC(_blackfin_dflush_page) |
diff --git a/arch/blackfin/mach-common/interrupt.S b/arch/blackfin/mach-common/interrupt.S index b69f517a650b..8be548e061bf 100644 --- a/arch/blackfin/mach-common/interrupt.S +++ b/arch/blackfin/mach-common/interrupt.S | |||
@@ -139,7 +139,7 @@ __common_int_entry: | |||
139 | fp = 0; | 139 | fp = 0; |
140 | #endif | 140 | #endif |
141 | 141 | ||
142 | #ifdef ANOMALY_05000283 | 142 | #if defined (ANOMALY_05000283) || defined (ANOMALY_05000315) |
143 | cc = r7 == r7; | 143 | cc = r7 == r7; |
144 | p5.h = 0xffc0; | 144 | p5.h = 0xffc0; |
145 | p5.l = 0x0014; | 145 | p5.l = 0x0014; |
diff --git a/include/asm-blackfin/blackfin.h b/include/asm-blackfin/blackfin.h index db3b615ffbab..25b934b7f829 100644 --- a/include/asm-blackfin/blackfin.h +++ b/include/asm-blackfin/blackfin.h | |||
@@ -39,7 +39,9 @@ static inline void SSYNC (void) | |||
39 | #elif !defined(ANOMALY_05000312) && defined(ANOMALY_05000244) | 39 | #elif !defined(ANOMALY_05000312) && defined(ANOMALY_05000244) |
40 | static inline void SSYNC (void) | 40 | static inline void SSYNC (void) |
41 | { | 41 | { |
42 | __builtin_bfin_ssync(); | 42 | __asm__ __volatile__ ("nop; nop; nop;\n\t" |
43 | "ssync;\n\t" | ||
44 | ::); | ||
43 | } | 45 | } |
44 | #elif !defined(ANOMALY_05000312) && !defined(ANOMALY_05000244) | 46 | #elif !defined(ANOMALY_05000312) && !defined(ANOMALY_05000244) |
45 | static inline void SSYNC (void) | 47 | static inline void SSYNC (void) |
@@ -71,7 +73,9 @@ static inline void CSYNC (void) | |||
71 | #elif !defined(ANOMALY_05000312) && defined(ANOMALY_05000244) | 73 | #elif !defined(ANOMALY_05000312) && defined(ANOMALY_05000244) |
72 | static inline void CSYNC (void) | 74 | static inline void CSYNC (void) |
73 | { | 75 | { |
74 | __builtin_bfin_csync(); | 76 | __asm__ __volatile__ ("nop; nop; nop;\n\t" |
77 | "ssync;\n\t" | ||
78 | ::); | ||
75 | } | 79 | } |
76 | #elif !defined(ANOMALY_05000312) && !defined(ANOMALY_05000244) | 80 | #elif !defined(ANOMALY_05000312) && !defined(ANOMALY_05000244) |
77 | static inline void CSYNC (void) | 81 | static inline void CSYNC (void) |
@@ -80,6 +84,31 @@ static inline void CSYNC (void) | |||
80 | } | 84 | } |
81 | #endif | 85 | #endif |
82 | 86 | ||
87 | #else /* __ASSEMBLY__ */ | ||
88 | |||
89 | /* SSYNC & CSYNC implementations for assembly files */ | ||
90 | |||
91 | #define ssync(x) SSYNC(x) | ||
92 | #define csync(x) CSYNC(x) | ||
93 | |||
94 | #if defined(ANOMALY_05000312) && defined(ANOMALY_05000244) | ||
95 | #define SSYNC(scratch) cli scratch; nop; nop; SSYNC; sti scratch; | ||
96 | #define CSYNC(scratch) cli scratch; nop; nop; CSYNC; sti scratch; | ||
97 | |||
98 | #elif defined(ANOMALY_05000312) && !defined(ANOMALY_05000244) | ||
99 | #define SSYNC(scratch) cli scratch; nop; nop; SSYNC; sti scratch; | ||
100 | #define CSYNC(scratch) cli scratch; nop; nop; CSYNC; sti scratch; | ||
101 | |||
102 | #elif !defined(ANOMALY_05000312) && defined(ANOMALY_05000244) | ||
103 | #define SSYNC(scratch) nop; nop; nop; SSYNC; | ||
104 | #define CSYNC(scratch) nop; nop; nop; CSYNC; | ||
105 | |||
106 | #elif !defined(ANOMALY_05000312) && !defined(ANOMALY_05000244) | ||
107 | #define SSYNC(scratch) SSYNC; | ||
108 | #define CSYNC(scratch) CSYNC; | ||
109 | |||
110 | #endif /* ANOMALY_05000312 & ANOMALY_05000244 handling */ | ||
111 | |||
83 | #endif /* __ASSEMBLY__ */ | 112 | #endif /* __ASSEMBLY__ */ |
84 | 113 | ||
85 | #endif /* _BLACKFIN_H_ */ | 114 | #endif /* _BLACKFIN_H_ */ |
diff --git a/include/asm-blackfin/mach-bf533/anomaly.h b/include/asm-blackfin/mach-bf533/anomaly.h index a84d3909345e..7302f290b93d 100644 --- a/include/asm-blackfin/mach-bf533/anomaly.h +++ b/include/asm-blackfin/mach-bf533/anomaly.h | |||
@@ -43,7 +43,8 @@ | |||
43 | #endif | 43 | #endif |
44 | 44 | ||
45 | /* Issues that are common to 0.5, 0.4, and 0.3 silicon */ | 45 | /* Issues that are common to 0.5, 0.4, and 0.3 silicon */ |
46 | #if (defined(CONFIG_BF_REV_0_5) || defined(CONFIG_BF_REV_0_4) || defined(CONFIG_BF_REV_0_3)) | 46 | #if (defined(CONFIG_BF_REV_0_5) || defined(CONFIG_BF_REV_0_4) \ |
47 | || defined(CONFIG_BF_REV_0_3)) | ||
47 | #define ANOMALY_05000074 /* A multi issue instruction with dsp32shiftimm in | 48 | #define ANOMALY_05000074 /* A multi issue instruction with dsp32shiftimm in |
48 | slot1 and store of a P register in slot 2 is not | 49 | slot1 and store of a P register in slot 2 is not |
49 | supported */ | 50 | supported */ |
@@ -76,11 +77,16 @@ | |||
76 | control */ | 77 | control */ |
77 | #define ANOMALY_05000283 /* A system MMR write is stalled indefinitely when | 78 | #define ANOMALY_05000283 /* A system MMR write is stalled indefinitely when |
78 | killed in a particular stage*/ | 79 | killed in a particular stage*/ |
80 | #define ANOMALY_05000311 /* Erroneous flag pin operations under specific | ||
81 | sequences */ | ||
79 | #define ANOMALY_05000312 /* Errors when SSYNC, CSYNC, or loads to LT, LB and LC | 82 | #define ANOMALY_05000312 /* Errors when SSYNC, CSYNC, or loads to LT, LB and LC |
80 | registers are interrupted */ | 83 | registers are interrupted */ |
81 | #define ANOMALY_05000311 /* Erroneous flag pin operations under specific sequences*/ | 84 | #define ANOMALY_05000313 /* PPI Is Level-Sensitive on First Transfer */ |
82 | 85 | #define ANOMALY_05000315 /* Killed System MMR Write Completes Erroneously On | |
83 | #endif | 86 | * Next System MMR Access */ |
87 | #define ANOMALY_05000319 /* Internal Voltage Regulator Values of 1.05V, 1.10V | ||
88 | * and 1.15V Not Allowed for LQFP Packages */ | ||
89 | #endif /* Issues that are common to 0.5, 0.4, and 0.3 silicon */ | ||
84 | 90 | ||
85 | /* These issues only occur on 0.3 or 0.4 BF533 */ | 91 | /* These issues only occur on 0.3 or 0.4 BF533 */ |
86 | #if (defined(CONFIG_BF_REV_0_4) || defined(CONFIG_BF_REV_0_3)) | 92 | #if (defined(CONFIG_BF_REV_0_4) || defined(CONFIG_BF_REV_0_3)) |
@@ -134,14 +140,14 @@ | |||
134 | internal voltage regulator (VDDint) to increase. */ | 140 | internal voltage regulator (VDDint) to increase. */ |
135 | #define ANOMALY_05000270 /* High I/O activity causes the output voltage of the | 141 | #define ANOMALY_05000270 /* High I/O activity causes the output voltage of the |
136 | internal voltage regulator (VDDint) to decrease */ | 142 | internal voltage regulator (VDDint) to decrease */ |
137 | #endif | 143 | #endif /* issues only occur on 0.3 or 0.4 BF533 */ |
138 | 144 | ||
139 | /* These issues are only on 0.4 silicon */ | 145 | /* These issues are only on 0.4 silicon */ |
140 | #if (defined(CONFIG_BF_REV_0_4)) | 146 | #if (defined(CONFIG_BF_REV_0_4)) |
141 | #define ANOMALY_05000234 /* Incorrect Revision Number in DSPID Register */ | 147 | #define ANOMALY_05000234 /* Incorrect Revision Number in DSPID Register */ |
142 | #define ANOMALY_05000250 /* Incorrect Bit-Shift of Data Word in Multichannel | 148 | #define ANOMALY_05000250 /* Incorrect Bit-Shift of Data Word in Multichannel |
143 | (TDM) */ | 149 | (TDM) */ |
144 | #endif | 150 | #endif /* issues are only on 0.4 silicon */ |
145 | 151 | ||
146 | /* These issues are only on 0.3 silicon */ | 152 | /* These issues are only on 0.3 silicon */ |
147 | #if defined(CONFIG_BF_REV_0_3) | 153 | #if defined(CONFIG_BF_REV_0_3) |
@@ -170,6 +176,72 @@ | |||
170 | #define ANOMALY_05000233 /* PPI_FS3 is not driven in 2 or 3 internal Frame | 176 | #define ANOMALY_05000233 /* PPI_FS3 is not driven in 2 or 3 internal Frame |
171 | Sync Transmit Mode */ | 177 | Sync Transmit Mode */ |
172 | #define ANOMALY_05000271 /* Spontaneous reset of Internal Voltage Regulator */ | 178 | #define ANOMALY_05000271 /* Spontaneous reset of Internal Voltage Regulator */ |
179 | #endif /* only on 0.3 silicon */ | ||
180 | |||
181 | #if defined(CONFIG_BF_REV_0_2) | ||
182 | #define ANOMALY_05000067 /* Watchpoints (Hardware Breakpoints) are not | ||
183 | * supported */ | ||
184 | #define ANOMALY_05000109 /* Reserved bits in SYSCFG register not set at | ||
185 | * power on */ | ||
186 | #define ANOMALY_05000116 /* Trace Buffers may record discontinuities into | ||
187 | * emulation mode and/or exception, NMI, reset | ||
188 | * handlers */ | ||
189 | #define ANOMALY_05000123 /* DTEST_COMMAND initiated memory access may be | ||
190 | * incorrect if data cache or DMA is active */ | ||
191 | #define ANOMALY_05000124 /* DMA Lock-up at CCLK to SCLK ratios of 4:1, 2:1, | ||
192 | * or 1:1 */ | ||
193 | #define ANOMALY_05000125 /* Erroneous exception when enabling cache */ | ||
194 | #define ANOMALY_05000126 /* SPI clock polarity and phase bits incorrect | ||
195 | * during booting */ | ||
196 | #define ANOMALY_05000137 /* DMEM_CONTROL is not set on Reset */ | ||
197 | #define ANOMALY_05000138 /* SPI boot will not complete if there is a zero fill | ||
198 | * block in the loader file */ | ||
199 | #define ANOMALY_05000140 /* Allowing the SPORT RX FIFO to fill will cause an | ||
200 | * overflow */ | ||
201 | #define ANOMALY_05000141 /* An Infinite Stall occurs with a particular sequence | ||
202 | * of consecutive dual dag events */ | ||
203 | #define ANOMALY_05000142 /* Interrupts may be lost when a programmable input | ||
204 | * flag is configured to be edge sensitive */ | ||
205 | #define ANOMALY_05000143 /* A read from external memory may return a wrong | ||
206 | * value with data cache enabled */ | ||
207 | #define ANOMALY_05000144 /* DMA and TESTSET conflict when both are accessing | ||
208 | * external memory */ | ||
209 | #define ANOMALY_05000145 /* In PWM_OUT mode, you must enable the PPI block to | ||
210 | * generate a waveform from PPI_CLK */ | ||
211 | #define ANOMALY_05000146 /* MDMA may lose the first few words of a descriptor | ||
212 | * chain */ | ||
213 | #define ANOMALY_05000147 /* The source MDMA descriptor may stop with a DMA | ||
214 | * Error */ | ||
215 | #define ANOMALY_05000148 /* When booting from a 16-bit asynchronous memory | ||
216 | * device, the upper 8-bits of each word must be | ||
217 | * 0x00 */ | ||
218 | #define ANOMALY_05000153 /* Frame Delay in SPORT Multichannel Mode */ | ||
219 | #define ANOMALY_05000154 /* SPORT TFS signal is active in Multi-channel mode | ||
220 | * outside of valid channels */ | ||
221 | #define ANOMALY_05000155 /* Timer1 can not be used for PWMOUT mode when a | ||
222 | * certain PPI mode is in use */ | ||
223 | #define ANOMALY_05000157 /* A killed 32-bit System MMR write will lead to | ||
224 | * the next system MMR access thinking it should be | ||
225 | * 32-bit. */ | ||
226 | #define ANOMALY_05000163 /* SPORT transmit data is not gated by external frame | ||
227 | * sync in certain conditions */ | ||
228 | #define ANOMALY_05000168 /* SDRAM auto-refresh and subsequent Power Ups */ | ||
229 | #define ANOMALY_05000169 /* DATA CPLB page miss can result in lost | ||
230 | * write-through cache data writes */ | ||
231 | #define ANOMALY_05000173 /* DMA vs Core accesses to external memory */ | ||
232 | #define ANOMALY_05000174 /* Cache Fill Buffer Data lost */ | ||
233 | #define ANOMALY_05000175 /* Overlapping Sequencer and Memory Stalls */ | ||
234 | #define ANOMALY_05000176 /* Multiplication of (-1) by (-1) followed by an | ||
235 | * accumulator saturation */ | ||
236 | #define ANOMALY_05000181 /* Disabling the PPI resets the PPI configuration | ||
237 | * registers */ | ||
238 | #define ANOMALY_05000185 /* PPI TX Mode with 2 External Frame Syncs */ | ||
239 | #define ANOMALY_05000191 /* PPI does not invert the Driving PPICLK edge in | ||
240 | * Transmit Modes */ | ||
241 | #define ANOMALY_05000192 /* In PPI Transmit Modes with External Frame Syncs | ||
242 | * POLC */ | ||
243 | #define ANOMALY_05000206 /* Internal Voltage Regulator may not start up */ | ||
244 | |||
173 | #endif | 245 | #endif |
174 | 246 | ||
175 | #endif /* _MACH_ANOMALY_H_ */ | 247 | #endif /* _MACH_ANOMALY_H_ */ |
diff --git a/include/asm-blackfin/mach-bf537/anomaly.h b/include/asm-blackfin/mach-bf537/anomaly.h index 7f040f5ba018..4453e614c3b1 100644 --- a/include/asm-blackfin/mach-bf537/anomaly.h +++ b/include/asm-blackfin/mach-bf537/anomaly.h | |||
@@ -73,8 +73,13 @@ | |||
73 | control */ | 73 | control */ |
74 | #define ANOMALY_05000283 /* A system MMR write is stalled indefinitely when | 74 | #define ANOMALY_05000283 /* A system MMR write is stalled indefinitely when |
75 | killed in a particular stage*/ | 75 | killed in a particular stage*/ |
76 | #define ANOMALY_05000310 /* False hardware errors caused by fetches at the | ||
77 | * boundary of reserved memory */ | ||
76 | #define ANOMALY_05000312 /* Errors when SSYNC, CSYNC, or loads to LT, LB and LC | 78 | #define ANOMALY_05000312 /* Errors when SSYNC, CSYNC, or loads to LT, LB and LC |
77 | registers are interrupted */ | 79 | registers are interrupted */ |
80 | #define ANOMALY_05000313 /* PPI is level sensitive on first transfer */ | ||
81 | #define ANOMALY_05000322 /* EMAC RMII mode at 10-Base-T speed: RX frames not | ||
82 | * received properly */ | ||
78 | #endif | 83 | #endif |
79 | 84 | ||
80 | #if defined(CONFIG_BF_REV_0_2) | 85 | #if defined(CONFIG_BF_REV_0_2) |
@@ -114,7 +119,21 @@ | |||
114 | DMA system instability */ | 119 | DMA system instability */ |
115 | #define ANOMALY_05000280 /* SPI Master boot mode does not work well with | 120 | #define ANOMALY_05000280 /* SPI Master boot mode does not work well with |
116 | Atmel Dataflash devices */ | 121 | Atmel Dataflash devices */ |
117 | 122 | #define ANOMALY_05000281 /* False Hardware Error Exception when ISR context | |
123 | * is not restored */ | ||
124 | #define ANOMALY_05000282 /* Memory DMA corruption with 32-bit data and traffic | ||
125 | * control */ | ||
126 | #define ANOMALY_05000283 /* System MMR Write Is Stalled Indefinitely When | ||
127 | * Killed in a Particular Stage */ | ||
128 | #define ANOMALY_05000285 /* New Feature: EMAC TX DMA Word Alignment | ||
129 | * (Not Available On Older Silicon) */ | ||
130 | #define ANOMALY_05000288 /* SPORTs may receive bad data if FIFOs fill up */ | ||
131 | #define ANOMALY_05000315 /* Killed System MMR Write Completes Erroneously | ||
132 | * On Next System MMR Access */ | ||
133 | #define ANOMALY_05000316 /* EMAC RMII mode: collisions occur in Full Duplex | ||
134 | * mode */ | ||
135 | #define ANOMALY_05000321 /* EMAC RMII mode: TX frames in half duplex fail with | ||
136 | * status No Carrier */ | ||
118 | #endif /* CONFIG_BF_REV_0_2 */ | 137 | #endif /* CONFIG_BF_REV_0_2 */ |
119 | 138 | ||
120 | #endif /* _MACH_ANOMALY_H_ */ | 139 | #endif /* _MACH_ANOMALY_H_ */ |
diff --git a/include/asm-blackfin/mach-common/cdef_LPBlackfin.h b/include/asm-blackfin/mach-common/cdef_LPBlackfin.h index d39c396f850d..58f878947cbc 100644 --- a/include/asm-blackfin/mach-common/cdef_LPBlackfin.h +++ b/include/asm-blackfin/mach-common/cdef_LPBlackfin.h | |||
@@ -39,7 +39,20 @@ | |||
39 | #define bfin_read_SRAM_BASE_ADDRESS() bfin_read32(SRAM_BASE_ADDRESS) | 39 | #define bfin_read_SRAM_BASE_ADDRESS() bfin_read32(SRAM_BASE_ADDRESS) |
40 | #define bfin_write_SRAM_BASE_ADDRESS(val) bfin_write32(SRAM_BASE_ADDRESS,val) | 40 | #define bfin_write_SRAM_BASE_ADDRESS(val) bfin_write32(SRAM_BASE_ADDRESS,val) |
41 | #define bfin_read_DMEM_CONTROL() bfin_read32(DMEM_CONTROL) | 41 | #define bfin_read_DMEM_CONTROL() bfin_read32(DMEM_CONTROL) |
42 | #ifdef ANOMALY_05000125 | ||
43 | static __inline__ void bfin_write_DMEM_CONTROL(unsigned int val) | ||
44 | { | ||
45 | unsigned long flags, iwr; | ||
46 | |||
47 | local_irq_save(flags); | ||
48 | __asm__(".align 8\n"); | ||
49 | bfin_write32(IMEM_CONTROL, val); | ||
50 | __builtin_bfin_ssync(); | ||
51 | local_irq_restore(flags); | ||
52 | } | ||
53 | #else | ||
42 | #define bfin_write_DMEM_CONTROL(val) bfin_write32(DMEM_CONTROL,val) | 54 | #define bfin_write_DMEM_CONTROL(val) bfin_write32(DMEM_CONTROL,val) |
55 | #endif | ||
43 | #define bfin_read_DCPLB_STATUS() bfin_read32(DCPLB_STATUS) | 56 | #define bfin_read_DCPLB_STATUS() bfin_read32(DCPLB_STATUS) |
44 | #define bfin_write_DCPLB_STATUS(val) bfin_write32(DCPLB_STATUS,val) | 57 | #define bfin_write_DCPLB_STATUS(val) bfin_write32(DCPLB_STATUS,val) |
45 | #define bfin_read_DCPLB_FAULT_ADDR() bfin_read32(DCPLB_FAULT_ADDR) | 58 | #define bfin_read_DCPLB_FAULT_ADDR() bfin_read32(DCPLB_FAULT_ADDR) |
@@ -125,7 +138,21 @@ | |||
125 | #define DTEST_DATA3 0xFFE0040C | 138 | #define DTEST_DATA3 0xFFE0040C |
126 | */ | 139 | */ |
127 | #define bfin_read_IMEM_CONTROL() bfin_read32(IMEM_CONTROL) | 140 | #define bfin_read_IMEM_CONTROL() bfin_read32(IMEM_CONTROL) |
141 | #ifdef ANOMALY_05000125 | ||
142 | static __inline__ void bfin_write_IMEM_CONTROL(unsigned int val) | ||
143 | { | ||
144 | unsigned long flags, iwr; | ||
145 | |||
146 | local_irq_save(flags); | ||
147 | __asm__(".align 8\n"); | ||
148 | bfin_write32(IMEM_CONTROL, val); | ||
149 | __builtin_bfin_ssync(); | ||
150 | local_irq_restore(flags); | ||
151 | |||
152 | } | ||
153 | #else | ||
128 | #define bfin_write_IMEM_CONTROL(val) bfin_write32(IMEM_CONTROL,val) | 154 | #define bfin_write_IMEM_CONTROL(val) bfin_write32(IMEM_CONTROL,val) |
155 | #endif | ||
129 | #define bfin_read_ICPLB_STATUS() bfin_read32(ICPLB_STATUS) | 156 | #define bfin_read_ICPLB_STATUS() bfin_read32(ICPLB_STATUS) |
130 | #define bfin_write_ICPLB_STATUS(val) bfin_write32(ICPLB_STATUS,val) | 157 | #define bfin_write_ICPLB_STATUS(val) bfin_write32(ICPLB_STATUS,val) |
131 | #define bfin_read_ICPLB_FAULT_ADDR() bfin_read32(ICPLB_FAULT_ADDR) | 158 | #define bfin_read_ICPLB_FAULT_ADDR() bfin_read32(ICPLB_FAULT_ADDR) |