Skip to content

Commit

Permalink
Blackfin arch: Add Workaround for ANOMALY 05000257
Browse files Browse the repository at this point in the history
Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
Signed-off-by: Bryan Wu <bryan.wu@analog.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Michael Hennerich authored and Linus Torvalds committed May 21, 2007
1 parent e8edc6e commit 8af10b7
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 6 deletions.
20 changes: 14 additions & 6 deletions arch/blackfin/lib/ins.S
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
*/

#include <linux/linkage.h>
#include <asm/blackfin.h>

.align 2

Expand All @@ -39,20 +40,25 @@ ENTRY(_insl)
P2 = R2; /* P2 = count */
SSYNC;
LSETUP( .Llong_loop_s, .Llong_loop_e) LC0 = P2;
.Llong_loop_s: R0 = [P0];
.Llong_loop_e: [P1++] = R0;
.Llong_loop_s: R0 = [P0];
[P1++] = R0;
NOP;
.Llong_loop_e: NOP;
sti R3;
RTS;


ENTRY(_insw)
P0 = R0; /* P0 = port */
cli R3;
P1 = R1; /* P1 = address */
P2 = R2; /* P2 = count */
SSYNC;
LSETUP( .Lword_loop_s, .Lword_loop_e) LC0 = P2;
.Lword_loop_s: R0 = W[P0];
.Lword_loop_e: W[P1++] = R0;
.Lword_loop_s: R0 = W[P0];
W[P1++] = R0;
NOP;
.Lword_loop_e: NOP;
sti R3;
RTS;

Expand All @@ -63,7 +69,9 @@ ENTRY(_insb)
P2 = R2; /* P2 = count */
SSYNC;
LSETUP( .Lbyte_loop_s, .Lbyte_loop_e) LC0 = P2;
.Lbyte_loop_s: R0 = B[P0];
.Lbyte_loop_e: B[P1++] = R0;
.Lbyte_loop_s: R0 = B[P0];
B[P1++] = R0;
NOP;
.Lbyte_loop_e: NOP;
sti R3;
RTS;
6 changes: 6 additions & 0 deletions arch/blackfin/mach-common/entry.S
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,12 @@ ENTRY(_ex_single_step)

_return_from_exception:
DEBUG_START_HWTRACE
#ifdef ANOMALY_05000257
R7=LC0;
LC0=R7;
R7=LC1;
LC1=R7;
#endif
(R7:6,P5:4) = [sp++];
ASTAT = [sp++];
sp = retn;
Expand Down

0 comments on commit 8af10b7

Please sign in to comment.