diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/blackfin/kernel/setup.c | 8 | ||||
-rw-r--r-- | arch/blackfin/kernel/traps.c | 141 | ||||
-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 |
7 files changed, 132 insertions, 74 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); | |||
522 | void dump_bfin_regs(struct pt_regs *fp, void *retaddr) | 532 | void 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]; |
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; |