aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/blackfin/kernel/setup.c8
-rw-r--r--arch/blackfin/kernel/traps.c141
-rw-r--r--arch/blackfin/lib/memcmp.S5
-rw-r--r--arch/blackfin/lib/memcpy.S13
-rw-r--r--arch/blackfin/lib/memmove.S17
-rw-r--r--arch/blackfin/mach-common/cache.S20
-rw-r--r--arch/blackfin/mach-common/interrupt.S2
-rw-r--r--include/asm-blackfin/blackfin.h33
-rw-r--r--include/asm-blackfin/dma-mapping.h2
-rw-r--r--include/asm-blackfin/io.h6
-rw-r--r--include/asm-blackfin/mach-bf533/anomaly.h84
-rw-r--r--include/asm-blackfin/mach-bf533/bfin_serial_5xx.h2
-rw-r--r--include/asm-blackfin/mach-bf537/anomaly.h21
-rw-r--r--include/asm-blackfin/mach-bf561/bfin_serial_5xx.h2
-rw-r--r--include/asm-blackfin/mach-common/cdef_LPBlackfin.h27
-rw-r--r--include/asm-blackfin/unistd.h3
16 files changed, 299 insertions, 87 deletions
diff --git a/arch/blackfin/kernel/setup.c b/arch/blackfin/kernel/setup.c
index a24fa1ab802b..5b9b434c1ed9 100644
--- a/arch/blackfin/kernel/setup.c
+++ b/arch/blackfin/kernel/setup.c
@@ -329,9 +329,10 @@ void __init setup_arch(char **cmdline_p)
329 329
330 printk(KERN_INFO "Memory map:\n" 330 printk(KERN_INFO "Memory map:\n"
331 KERN_INFO " text = 0x%p-0x%p\n" 331 KERN_INFO " text = 0x%p-0x%p\n"
332 KERN_INFO " init = 0x%p-0x%p\n" 332 KERN_INFO " rodata = 0x%p-0x%p\n"
333 KERN_INFO " data = 0x%p-0x%p\n" 333 KERN_INFO " data = 0x%p-0x%p\n"
334 KERN_INFO " stack = 0x%p-0x%p\n" 334 KERN_INFO " stack = 0x%p-0x%p\n"
335 KERN_INFO " init = 0x%p-0x%p\n"
335 KERN_INFO " bss = 0x%p-0x%p\n" 336 KERN_INFO " bss = 0x%p-0x%p\n"
336 KERN_INFO " available = 0x%p-0x%p\n" 337 KERN_INFO " available = 0x%p-0x%p\n"
337#ifdef CONFIG_MTD_UCLINUX 338#ifdef CONFIG_MTD_UCLINUX
@@ -341,9 +342,10 @@ void __init setup_arch(char **cmdline_p)
341 KERN_INFO " DMA Zone = 0x%p-0x%p\n" 342 KERN_INFO " DMA Zone = 0x%p-0x%p\n"
342#endif 343#endif
343 , _stext, _etext, 344 , _stext, _etext,
344 __init_begin, __init_end, 345 __start_rodata, __end_rodata,
345 _sdata, _edata, 346 _sdata, _edata,
346 (void*)&init_thread_union, (void*)((int)(&init_thread_union) + 0x2000), 347 (void*)&init_thread_union, (void*)((int)(&init_thread_union) + 0x2000),
348 __init_begin, __init_end,
347 __bss_start, __bss_stop, 349 __bss_start, __bss_stop,
348 (void*)_ramstart, (void*)memory_end 350 (void*)_ramstart, (void*)memory_end
349#ifdef CONFIG_MTD_UCLINUX 351#ifdef CONFIG_MTD_UCLINUX
diff --git a/arch/blackfin/kernel/traps.c b/arch/blackfin/kernel/traps.c
index 5ab87b0b92dd..aa660f32d8c8 100644
--- a/arch/blackfin/kernel/traps.c
+++ b/arch/blackfin/kernel/traps.c
@@ -148,8 +148,15 @@ asmlinkage void trap_c(struct pt_regs *fp)
148 unsigned long trapnr = fp->seqstat & SEQSTAT_EXCAUSE; 148 unsigned long trapnr = fp->seqstat & SEQSTAT_EXCAUSE;
149 149
150#ifdef CONFIG_KGDB 150#ifdef CONFIG_KGDB
151# define CHK_DEBUGGER_TRAP() do { CHK_DEBUGGER(trapnr, sig, info.si_code, fp,); } while (0) 151# define CHK_DEBUGGER_TRAP() \
152# define CHK_DEBUGGER_TRAP_MAYBE() do { if (kgdb_connected) CHK_DEBUGGER_TRAP(); } while (0) 152 do { \
153 CHK_DEBUGGER(trapnr, sig, info.si_code, fp); \
154 } while (0)
155# define CHK_DEBUGGER_TRAP_MAYBE() \
156 do { \
157 if (kgdb_connected) \
158 CHK_DEBUGGER_TRAP(); \
159 } while (0)
153#else 160#else
154# define CHK_DEBUGGER_TRAP() do { } while (0) 161# define CHK_DEBUGGER_TRAP() do { } while (0)
155# define CHK_DEBUGGER_TRAP_MAYBE() do { } while (0) 162# define CHK_DEBUGGER_TRAP_MAYBE() do { } while (0)
@@ -297,7 +304,8 @@ asmlinkage void trap_c(struct pt_regs *fp)
297 info.si_code = ILL_CPLB_MULHIT; 304 info.si_code = ILL_CPLB_MULHIT;
298#ifdef CONFIG_DEBUG_HUNT_FOR_ZERO 305#ifdef CONFIG_DEBUG_HUNT_FOR_ZERO
299 sig = SIGSEGV; 306 sig = SIGSEGV;
300 printk(KERN_EMERG "\n\nNULL pointer access (probably)\n"); 307 printk(KERN_EMERG "\n"
308 KERN_EMERG "NULL pointer access (probably)\n");
301#else 309#else
302 sig = SIGILL; 310 sig = SIGILL;
303 printk(KERN_EMERG EXC_0x27); 311 printk(KERN_EMERG EXC_0x27);
@@ -418,7 +426,9 @@ asmlinkage void trap_c(struct pt_regs *fp)
418 if (current->mm) { 426 if (current->mm) {
419 fp->pc = current->mm->start_code; 427 fp->pc = current->mm->start_code;
420 } else { 428 } else {
421 printk(KERN_EMERG "I can't return to memory that doesn't exist - bad things happen\n"); 429 printk(KERN_EMERG
430 "I can't return to memory that doesn't exist"
431 " - bad things happen\n");
422 panic("Help - I've fallen and can't get up\n"); 432 panic("Help - I've fallen and can't get up\n");
423 } 433 }
424 } 434 }
@@ -522,15 +532,19 @@ EXPORT_SYMBOL(dump_stack);
522void dump_bfin_regs(struct pt_regs *fp, void *retaddr) 532void dump_bfin_regs(struct pt_regs *fp, void *retaddr)
523{ 533{
524 if (current->pid) { 534 if (current->pid) {
525 printk("\nCURRENT PROCESS:\n\n"); 535 printk(KERN_EMERG "\n" KERN_EMERG "CURRENT PROCESS:\n"
526 printk("COMM=%s PID=%d\n", current->comm, current->pid); 536 KERN_EMERG "\n");
537 printk(KERN_EMERG "COMM=%s PID=%d\n",
538 current->comm, current->pid);
527 } else { 539 } else {
528 printk 540 printk
529 ("\nNo Valid pid - Either things are really messed up, or you are in the kernel\n"); 541 (KERN_EMERG "\n" KERN_EMERG
542 "No Valid pid - Either things are really messed up,"
543 " or you are in the kernel\n");
530 } 544 }
531 545
532 if (current->mm) { 546 if (current->mm) {
533 printk("TEXT = 0x%p-0x%p DATA = 0x%p-0x%p\n" 547 printk(KERN_EMERG "TEXT = 0x%p-0x%p DATA = 0x%p-0x%p\n"
534 "BSS = 0x%p-0x%p USER-STACK = 0x%p\n\n", 548 "BSS = 0x%p-0x%p USER-STACK = 0x%p\n\n",
535 (void*)current->mm->start_code, 549 (void*)current->mm->start_code,
536 (void*)current->mm->end_code, 550 (void*)current->mm->end_code,
@@ -541,7 +555,7 @@ void dump_bfin_regs(struct pt_regs *fp, void *retaddr)
541 (void*)current->mm->start_stack); 555 (void*)current->mm->start_stack);
542 } 556 }
543 557
544 printk("return address: 0x%p; contents of [PC-16...PC+8]:\n", retaddr); 558 printk(KERN_EMERG "return address: [0x%p]; contents of:", retaddr);
545 if (retaddr != 0 && retaddr <= (void*)physical_mem_end 559 if (retaddr != 0 && retaddr <= (void*)physical_mem_end
546#if L1_CODE_LENGTH != 0 560#if L1_CODE_LENGTH != 0
547 /* FIXME: Copy the code out of L1 Instruction SRAM through dma 561 /* FIXME: Copy the code out of L1 Instruction SRAM through dma
@@ -550,10 +564,15 @@ void dump_bfin_regs(struct pt_regs *fp, void *retaddr)
550 && retaddr < (void*)(L1_CODE_START + L1_CODE_LENGTH)) 564 && retaddr < (void*)(L1_CODE_START + L1_CODE_LENGTH))
551#endif 565#endif
552 ) { 566 ) {
553 int i = 0; 567 int i = ((unsigned int)retaddr & 0xFFFFFFF0) - 32;
554 unsigned short x = 0; 568 unsigned short x = 0;
555 for (i = -16; i < 8; i++) { 569 for (; i < ((unsigned int)retaddr & 0xFFFFFFF0 ) + 32 ;
556 if (get_user(x, (unsigned short *)retaddr + i)) 570 i += 2) {
571 if ( !(i & 0xF) )
572 printk(KERN_EMERG "\n" KERN_EMERG
573 "0x%08x: ", i);
574
575 if (get_user(x, (unsigned short *)i))
557 break; 576 break;
558#ifndef CONFIG_DEBUG_HWERR 577#ifndef CONFIG_DEBUG_HWERR
559 /* If one of the last few instructions was a STI 578 /* If one of the last few instructions was a STI
@@ -561,53 +580,65 @@ void dump_bfin_regs(struct pt_regs *fp, void *retaddr)
561 * and we just noticed 580 * and we just noticed
562 */ 581 */
563 if (x >= 0x0040 && x <= 0x0047 && i <= 0) 582 if (x >= 0x0040 && x <= 0x0047 && i <= 0)
564 panic("\n\nWARNING : You should reconfigure the kernel to turn on\n" 583 panic("\n\nWARNING : You should reconfigure"
565 " 'Hardware error interrupt debugging'\n" 584 " the kernel to turn on\n"
566 " The rest of this error is meanless\n"); 585 " 'Hardware error interrupt"
586 " debugging'\n"
587 " The rest of this error"
588 " is meanless\n");
567#endif 589#endif
568 590 if ( i == (unsigned int)retaddr )
569 if (i == -8) 591 printk("[%04x]", x);
570 printk("\n"); 592 else
571 if (i == 0) 593 printk(" %04x ", x);
572 printk("X\n");
573 printk("%04x ", x);
574 } 594 }
595 printk("\n" KERN_EMERG "\n");
575 } else 596 } else
576 printk("Cannot look at the [PC] for it is in unreadable L1 SRAM - sorry\n"); 597 printk(KERN_EMERG
577 598 "Cannot look at the [PC] for it is"
578 printk("\n\n"); 599 "in unreadable L1 SRAM - sorry\n");
579 600
580 printk("RETE: %08lx RETN: %08lx RETX: %08lx RETS: %08lx\n", 601
581 fp->rete, fp->retn, fp->retx, fp->rets); 602 printk(KERN_EMERG
582 printk("IPEND: %04lx SYSCFG: %04lx\n", fp->ipend, fp->syscfg); 603 "RETE: %08lx RETN: %08lx RETX: %08lx RETS: %08lx\n",
583 printk("SEQSTAT: %08lx SP: %08lx\n", (long)fp->seqstat, (long)fp); 604 fp->rete, fp->retn, fp->retx, fp->rets);
584 printk("R0: %08lx R1: %08lx R2: %08lx R3: %08lx\n", 605 printk(KERN_EMERG "IPEND: %04lx SYSCFG: %04lx\n",
585 fp->r0, fp->r1, fp->r2, fp->r3); 606 fp->ipend, fp->syscfg);
586 printk("R4: %08lx R5: %08lx R6: %08lx R7: %08lx\n", 607 printk(KERN_EMERG "SEQSTAT: %08lx SP: %08lx\n",
587 fp->r4, fp->r5, fp->r6, fp->r7); 608 (long)fp->seqstat, (long)fp);
588 printk("P0: %08lx P1: %08lx P2: %08lx P3: %08lx\n", 609 printk(KERN_EMERG "R0: %08lx R1: %08lx R2: %08lx R3: %08lx\n",
589 fp->p0, fp->p1, fp->p2, fp->p3); 610 fp->r0, fp->r1, fp->r2, fp->r3);
590 printk("P4: %08lx P5: %08lx FP: %08lx\n", fp->p4, fp->p5, fp->fp); 611 printk(KERN_EMERG "R4: %08lx R5: %08lx R6: %08lx R7: %08lx\n",
591 printk("A0.w: %08lx A0.x: %08lx A1.w: %08lx A1.x: %08lx\n", 612 fp->r4, fp->r5, fp->r6, fp->r7);
592 fp->a0w, fp->a0x, fp->a1w, fp->a1x); 613 printk(KERN_EMERG "P0: %08lx P1: %08lx P2: %08lx P3: %08lx\n",
593 614 fp->p0, fp->p1, fp->p2, fp->p3);
594 printk("LB0: %08lx LT0: %08lx LC0: %08lx\n", fp->lb0, fp->lt0, 615 printk(KERN_EMERG
595 fp->lc0); 616 "P4: %08lx P5: %08lx FP: %08lx\n",
596 printk("LB1: %08lx LT1: %08lx LC1: %08lx\n", fp->lb1, fp->lt1, 617 fp->p4, fp->p5, fp->fp);
597 fp->lc1); 618 printk(KERN_EMERG
598 printk("B0: %08lx L0: %08lx M0: %08lx I0: %08lx\n", fp->b0, fp->l0, 619 "A0.w: %08lx A0.x: %08lx A1.w: %08lx A1.x: %08lx\n",
599 fp->m0, fp->i0); 620 fp->a0w, fp->a0x, fp->a1w, fp->a1x);
600 printk("B1: %08lx L1: %08lx M1: %08lx I1: %08lx\n", fp->b1, fp->l1, 621
601 fp->m1, fp->i1); 622 printk(KERN_EMERG "LB0: %08lx LT0: %08lx LC0: %08lx\n",
602 printk("B2: %08lx L2: %08lx M2: %08lx I2: %08lx\n", fp->b2, fp->l2, 623 fp->lb0, fp->lt0, fp->lc0);
603 fp->m2, fp->i2); 624 printk(KERN_EMERG "LB1: %08lx LT1: %08lx LC1: %08lx\n",
604 printk("B3: %08lx L3: %08lx M3: %08lx I3: %08lx\n", fp->b3, fp->l3, 625 fp->lb1, fp->lt1, fp->lc1);
605 fp->m3, fp->i3); 626 printk(KERN_EMERG "B0: %08lx L0: %08lx M0: %08lx I0: %08lx\n",
606 627 fp->b0, fp->l0, fp->m0, fp->i0);
607 printk("\nUSP: %08lx ASTAT: %08lx\n", rdusp(), fp->astat); 628 printk(KERN_EMERG "B1: %08lx L1: %08lx M1: %08lx I1: %08lx\n",
629 fp->b1, fp->l1, fp->m1, fp->i1);
630 printk(KERN_EMERG "B2: %08lx L2: %08lx M2: %08lx I2: %08lx\n",
631 fp->b2, fp->l2, fp->m2, fp->i2);
632 printk(KERN_EMERG "B3: %08lx L3: %08lx M3: %08lx I3: %08lx\n",
633 fp->b3, fp->l3, fp->m3, fp->i3);
634
635 printk(KERN_EMERG "\n" KERN_EMERG "USP: %08lx ASTAT: %08lx\n",
636 rdusp(), fp->astat);
608 if ((long)fp->seqstat & SEQSTAT_EXCAUSE) { 637 if ((long)fp->seqstat & SEQSTAT_EXCAUSE) {
609 printk(KERN_EMERG "DCPLB_FAULT_ADDR=%p\n", (void*)bfin_read_DCPLB_FAULT_ADDR()); 638 printk(KERN_EMERG "DCPLB_FAULT_ADDR=%p\n",
610 printk(KERN_EMERG "ICPLB_FAULT_ADDR=%p\n", (void*)bfin_read_ICPLB_FAULT_ADDR()); 639 (void *)bfin_read_DCPLB_FAULT_ADDR());
640 printk(KERN_EMERG "ICPLB_FAULT_ADDR=%p\n",
641 (void *)bfin_read_ICPLB_FAULT_ADDR());
611 } 642 }
612 643
613 printk("\n\n"); 644 printk("\n\n");
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];
1281: 1281:
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;
135ENDPROC(_blackfin_icache_flush_range) 135ENDPROC(_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];
1531: 1531:
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;
162ENDPROC(_blackfin_icache_dcache_flush_range) 162ENDPROC(_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];
1791: 1791:
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;
191ENDPROC(_blackfin_dcache_invalidate_range) 191ENDPROC(_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];
2401: 2401:
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;
252ENDPROC(_blackfin_dcache_flush_range) 252ENDPROC(_blackfin_dcache_flush_range)
253 253
254ENTRY(_blackfin_dflush_page) 254ENTRY(_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;
263ENDPROC(_blackfin_dflush_page) 263ENDPROC(_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)
40static inline void SSYNC (void) 40static 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)
45static inline void SSYNC (void) 47static 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)
72static inline void CSYNC (void) 74static 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)
77static inline void CSYNC (void) 81static 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/dma-mapping.h b/include/asm-blackfin/dma-mapping.h
index 7a77d7fe3a33..282fabccf6a6 100644
--- a/include/asm-blackfin/dma-mapping.h
+++ b/include/asm-blackfin/dma-mapping.h
@@ -15,6 +15,8 @@ void dma_free_coherent(struct device *dev, size_t size, void *vaddr,
15#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f) 15#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f)
16#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h) 16#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h)
17 17
18#define dma_mapping_error
19
18/* 20/*
19 * Map a single buffer of the indicated size for DMA in streaming mode. 21 * Map a single buffer of the indicated size for DMA in streaming mode.
20 * The 32-bit bus address to use is returned. 22 * The 32-bit bus address to use is returned.
diff --git a/include/asm-blackfin/io.h b/include/asm-blackfin/io.h
index eac8bcaf64c2..142cb333db29 100644
--- a/include/asm-blackfin/io.h
+++ b/include/asm-blackfin/io.h
@@ -20,7 +20,7 @@
20 */ 20 */
21#ifndef __ASSEMBLY__ 21#ifndef __ASSEMBLY__
22 22
23static inline unsigned char readb(void __iomem *addr) 23static inline unsigned char readb(const volatile void __iomem *addr)
24{ 24{
25 unsigned int val; 25 unsigned int val;
26 int tmp; 26 int tmp;
@@ -35,7 +35,7 @@ static inline unsigned char readb(void __iomem *addr)
35 return (unsigned char) val; 35 return (unsigned char) val;
36} 36}
37 37
38static inline unsigned short readw(void __iomem *addr) 38static inline unsigned short readw(const volatile void __iomem *addr)
39{ 39{
40 unsigned int val; 40 unsigned int val;
41 int tmp; 41 int tmp;
@@ -50,7 +50,7 @@ static inline unsigned short readw(void __iomem *addr)
50 return (unsigned short) val; 50 return (unsigned short) val;
51} 51}
52 52
53static inline unsigned int readl(void __iomem *addr) 53static inline unsigned int readl(const volatile void __iomem *addr)
54{ 54{
55 unsigned int val; 55 unsigned int val;
56 int tmp; 56 int tmp;
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-bf533/bfin_serial_5xx.h b/include/asm-blackfin/mach-bf533/bfin_serial_5xx.h
index 23bf76aa3451..e043cafa3c42 100644
--- a/include/asm-blackfin/mach-bf533/bfin_serial_5xx.h
+++ b/include/asm-blackfin/mach-bf533/bfin_serial_5xx.h
@@ -78,6 +78,7 @@ struct bfin_serial_res {
78}; 78};
79 79
80struct bfin_serial_res bfin_serial_resource[] = { 80struct bfin_serial_res bfin_serial_resource[] = {
81 {
81 0xFFC00400, 82 0xFFC00400,
82 IRQ_UART_RX, 83 IRQ_UART_RX,
83#ifdef CONFIG_SERIAL_BFIN_DMA 84#ifdef CONFIG_SERIAL_BFIN_DMA
@@ -88,6 +89,7 @@ struct bfin_serial_res bfin_serial_resource[] = {
88 CONFIG_UART0_CTS_PIN, 89 CONFIG_UART0_CTS_PIN,
89 CONFIG_UART0_RTS_PIN, 90 CONFIG_UART0_RTS_PIN,
90#endif 91#endif
92 }
91}; 93};
92 94
93 95
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-bf561/bfin_serial_5xx.h b/include/asm-blackfin/mach-bf561/bfin_serial_5xx.h
index 23bf76aa3451..e043cafa3c42 100644
--- a/include/asm-blackfin/mach-bf561/bfin_serial_5xx.h
+++ b/include/asm-blackfin/mach-bf561/bfin_serial_5xx.h
@@ -78,6 +78,7 @@ struct bfin_serial_res {
78}; 78};
79 79
80struct bfin_serial_res bfin_serial_resource[] = { 80struct bfin_serial_res bfin_serial_resource[] = {
81 {
81 0xFFC00400, 82 0xFFC00400,
82 IRQ_UART_RX, 83 IRQ_UART_RX,
83#ifdef CONFIG_SERIAL_BFIN_DMA 84#ifdef CONFIG_SERIAL_BFIN_DMA
@@ -88,6 +89,7 @@ struct bfin_serial_res bfin_serial_resource[] = {
88 CONFIG_UART0_CTS_PIN, 89 CONFIG_UART0_CTS_PIN,
89 CONFIG_UART0_RTS_PIN, 90 CONFIG_UART0_RTS_PIN,
90#endif 91#endif
92 }
91}; 93};
92 94
93 95
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
43static __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
142static __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)
diff --git a/include/asm-blackfin/unistd.h b/include/asm-blackfin/unistd.h
index 4df8790a67d5..0df9f2d322a3 100644
--- a/include/asm-blackfin/unistd.h
+++ b/include/asm-blackfin/unistd.h
@@ -369,7 +369,6 @@
369#define __ARCH_WANT_SYS_NICE 369#define __ARCH_WANT_SYS_NICE
370#define __ARCH_WANT_SYS_RT_SIGACTION 370#define __ARCH_WANT_SYS_RT_SIGACTION
371#define __ARCH_WANT_SYS_RT_SIGSUSPEND 371#define __ARCH_WANT_SYS_RT_SIGSUSPEND
372#endif
373 372
374/* 373/*
375 * "Conditional" syscalls 374 * "Conditional" syscalls
@@ -379,4 +378,6 @@
379 */ 378 */
380#define cond_syscall(x) asm(".weak\t_" #x "\n\t.set\t_" #x ",_sys_ni_syscall"); 379#define cond_syscall(x) asm(".weak\t_" #x "\n\t.set\t_" #x ",_sys_ni_syscall");
381 380
381#endif /* __KERNEL__ */
382
382#endif /* __ASM_BFIN_UNISTD_H */ 383#endif /* __ASM_BFIN_UNISTD_H */