diff options
| author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-06-22 14:11:33 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-06-22 14:11:33 -0400 |
| commit | 3f2c6d0f4f0dafdc99af0df71edba57e7815cb13 (patch) | |
| tree | 757a03a92ee24cdd21b26c2f478b10eb607172ab | |
| parent | 4beb2584be3cf1d4fc7a222b0f747735da8e3c91 (diff) | |
| parent | 216e39db112da4d25a52aeb956e7da70fdd0d94c (diff) | |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/cooloney/blackfin-2.6
* 'master' of master.kernel.org:/pub/scm/linux/kernel/git/cooloney/blackfin-2.6:
Blackfin arch: add proper const volatile to addr argument to the read functions
Blackfin arch: Add definition of dma_mapping_error
Blackfin arch: move cond_syscall() behind __KERNEL__ like all other architectures
Blackfin arch: match kernel startup messaage with new linker script
Blackfin arch: add missing braces around array bfin serial init
Blackfin arch: update printk to use KERN_EMERG and reformat crash output
Blackfin arch: update ANOMALY handling
| -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 | ||||
| -rw-r--r-- | include/asm-blackfin/blackfin.h | 33 | ||||
| -rw-r--r-- | include/asm-blackfin/dma-mapping.h | 2 | ||||
| -rw-r--r-- | include/asm-blackfin/io.h | 6 | ||||
| -rw-r--r-- | include/asm-blackfin/mach-bf533/anomaly.h | 84 | ||||
| -rw-r--r-- | include/asm-blackfin/mach-bf533/bfin_serial_5xx.h | 2 | ||||
| -rw-r--r-- | include/asm-blackfin/mach-bf537/anomaly.h | 21 | ||||
| -rw-r--r-- | include/asm-blackfin/mach-bf561/bfin_serial_5xx.h | 2 | ||||
| -rw-r--r-- | include/asm-blackfin/mach-common/cdef_LPBlackfin.h | 27 | ||||
| -rw-r--r-- | include/asm-blackfin/unistd.h | 3 |
16 files changed, 299 insertions, 87 deletions
diff --git a/arch/blackfin/kernel/setup.c b/arch/blackfin/kernel/setup.c index a24fa1ab80..5b9b434c1e 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 5ab87b0b92..aa660f32d8 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 a6b8ee6a6b..b88c5d2d1e 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 34b5a91c21..14a5585bbd 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 c371585e9d..6ee6e206e7 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 8bd2af1935..7063795eb7 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 b69f517a65..8be548e061 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 db3b615ffb..25b934b7f8 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/dma-mapping.h b/include/asm-blackfin/dma-mapping.h index 7a77d7fe3a..282fabccf6 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 eac8bcaf64..142cb333db 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 | ||
| 23 | static inline unsigned char readb(void __iomem *addr) | 23 | static 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 | ||
| 38 | static inline unsigned short readw(void __iomem *addr) | 38 | static 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 | ||
| 53 | static inline unsigned int readl(void __iomem *addr) | 53 | static 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 a84d390934..7302f290b9 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 23bf76aa34..e043cafa3c 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 | ||
| 80 | struct bfin_serial_res bfin_serial_resource[] = { | 80 | struct 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 7f040f5ba0..4453e614c3 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 23bf76aa34..e043cafa3c 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 | ||
| 80 | struct bfin_serial_res bfin_serial_resource[] = { | 80 | struct 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 d39c396f85..58f878947c 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) |
diff --git a/include/asm-blackfin/unistd.h b/include/asm-blackfin/unistd.h index 4df8790a67..0df9f2d322 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 */ |
