diff options
author | 2007-05-21 18:09:09 +0800 | |
---|---|---|
committer | 2007-05-21 09:50:21 -0700 | |
commit | 8af10b79877ff5dfd5c7b1928d57cf38483e819d (patch) | |
tree | 764cb92a90fd2853044a9edb1c1eb575b0bce6ed /arch/blackfin/lib | |
parent | Detach sched.h from mm.h (diff) | |
download | linux-8af10b79877ff5dfd5c7b1928d57cf38483e819d.tar.gz linux-8af10b79877ff5dfd5c7b1928d57cf38483e819d.tar.bz2 linux-8af10b79877ff5dfd5c7b1928d57cf38483e819d.zip |
Blackfin arch: Add Workaround for ANOMALY 05000257
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>
Diffstat (limited to 'arch/blackfin/lib')
-rw-r--r-- | arch/blackfin/lib/ins.S | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/arch/blackfin/lib/ins.S b/arch/blackfin/lib/ins.S index 730d2b427538..7d5e9846311d 100644 --- a/arch/blackfin/lib/ins.S +++ b/arch/blackfin/lib/ins.S @@ -29,6 +29,7 @@ */ #include <linux/linkage.h> +#include <asm/blackfin.h> .align 2 @@ -39,11 +40,14 @@ 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; @@ -51,8 +55,10 @@ ENTRY(_insw) 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; @@ -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; |