diff options
| -rw-r--r-- | arch/parisc/include/asm/prefetch.h | 7 | ||||
| -rw-r--r-- | arch/parisc/kernel/entry.S | 4 | ||||
| -rw-r--r-- | arch/parisc/kernel/pacache.S | 38 |
3 files changed, 30 insertions, 19 deletions
diff --git a/arch/parisc/include/asm/prefetch.h b/arch/parisc/include/asm/prefetch.h index c5edc60c059f..1ee7c82672c1 100644 --- a/arch/parisc/include/asm/prefetch.h +++ b/arch/parisc/include/asm/prefetch.h | |||
| @@ -21,7 +21,12 @@ | |||
| 21 | #define ARCH_HAS_PREFETCH | 21 | #define ARCH_HAS_PREFETCH |
| 22 | static inline void prefetch(const void *addr) | 22 | static inline void prefetch(const void *addr) |
| 23 | { | 23 | { |
| 24 | __asm__("ldw 0(%0), %%r0" : : "r" (addr)); | 24 | __asm__( |
| 25 | #ifndef CONFIG_PA20 | ||
| 26 | /* Need to avoid prefetch of NULL on PA7300LC */ | ||
| 27 | " extrw,u,= %0,31,32,%%r0\n" | ||
| 28 | #endif | ||
| 29 | " ldw 0(%0), %%r0" : : "r" (addr)); | ||
| 25 | } | 30 | } |
| 26 | 31 | ||
| 27 | /* LDD is a PA2.0 addition. */ | 32 | /* LDD is a PA2.0 addition. */ |
diff --git a/arch/parisc/kernel/entry.S b/arch/parisc/kernel/entry.S index 6f0594439143..535034217021 100644 --- a/arch/parisc/kernel/entry.S +++ b/arch/parisc/kernel/entry.S | |||
| @@ -581,7 +581,11 @@ | |||
| 581 | */ | 581 | */ |
| 582 | cmpiclr,= 0x01,\tmp,%r0 | 582 | cmpiclr,= 0x01,\tmp,%r0 |
| 583 | ldi (_PAGE_DIRTY|_PAGE_READ|_PAGE_WRITE),\prot | 583 | ldi (_PAGE_DIRTY|_PAGE_READ|_PAGE_WRITE),\prot |
| 584 | #ifdef CONFIG_64BIT | ||
| 584 | depd,z \prot,8,7,\prot | 585 | depd,z \prot,8,7,\prot |
| 586 | #else | ||
| 587 | depw,z \prot,8,7,\prot | ||
| 588 | #endif | ||
| 585 | /* | 589 | /* |
| 586 | * OK, it is in the temp alias region, check whether "from" or "to". | 590 | * OK, it is in the temp alias region, check whether "from" or "to". |
| 587 | * Check "subtle" note in pacache.S re: r23/r26. | 591 | * Check "subtle" note in pacache.S re: r23/r26. |
diff --git a/arch/parisc/kernel/pacache.S b/arch/parisc/kernel/pacache.S index 93ff3d90edd1..5d7218ad885c 100644 --- a/arch/parisc/kernel/pacache.S +++ b/arch/parisc/kernel/pacache.S | |||
| @@ -692,7 +692,7 @@ ENTRY(flush_icache_page_asm) | |||
| 692 | 692 | ||
| 693 | /* Purge any old translation */ | 693 | /* Purge any old translation */ |
| 694 | 694 | ||
| 695 | pitlb (%sr0,%r28) | 695 | pitlb (%sr4,%r28) |
| 696 | 696 | ||
| 697 | ldil L%icache_stride, %r1 | 697 | ldil L%icache_stride, %r1 |
| 698 | ldw R%icache_stride(%r1), %r1 | 698 | ldw R%icache_stride(%r1), %r1 |
| @@ -706,27 +706,29 @@ ENTRY(flush_icache_page_asm) | |||
| 706 | sub %r25, %r1, %r25 | 706 | sub %r25, %r1, %r25 |
| 707 | 707 | ||
| 708 | 708 | ||
| 709 | 1: fic,m %r1(%r28) | 709 | /* fic only has the type 26 form on PA1.1, requiring an |
| 710 | fic,m %r1(%r28) | 710 | * explicit space specification, so use %sr4 */ |
| 711 | fic,m %r1(%r28) | 711 | 1: fic,m %r1(%sr4,%r28) |
| 712 | fic,m %r1(%r28) | 712 | fic,m %r1(%sr4,%r28) |
| 713 | fic,m %r1(%r28) | 713 | fic,m %r1(%sr4,%r28) |
| 714 | fic,m %r1(%r28) | 714 | fic,m %r1(%sr4,%r28) |
| 715 | fic,m %r1(%r28) | 715 | fic,m %r1(%sr4,%r28) |
| 716 | fic,m %r1(%r28) | 716 | fic,m %r1(%sr4,%r28) |
| 717 | fic,m %r1(%r28) | 717 | fic,m %r1(%sr4,%r28) |
| 718 | fic,m %r1(%r28) | 718 | fic,m %r1(%sr4,%r28) |
| 719 | fic,m %r1(%r28) | 719 | fic,m %r1(%sr4,%r28) |
| 720 | fic,m %r1(%r28) | 720 | fic,m %r1(%sr4,%r28) |
| 721 | fic,m %r1(%r28) | 721 | fic,m %r1(%sr4,%r28) |
| 722 | fic,m %r1(%r28) | 722 | fic,m %r1(%sr4,%r28) |
| 723 | fic,m %r1(%r28) | 723 | fic,m %r1(%sr4,%r28) |
| 724 | fic,m %r1(%sr4,%r28) | ||
| 725 | fic,m %r1(%sr4,%r28) | ||
| 724 | cmpb,COND(<<) %r28, %r25,1b | 726 | cmpb,COND(<<) %r28, %r25,1b |
| 725 | fic,m %r1(%r28) | 727 | fic,m %r1(%sr4,%r28) |
| 726 | 728 | ||
| 727 | sync | 729 | sync |
| 728 | bv %r0(%r2) | 730 | bv %r0(%r2) |
| 729 | pitlb (%sr0,%r25) | 731 | pitlb (%sr4,%r25) |
| 730 | .exit | 732 | .exit |
| 731 | 733 | ||
| 732 | .procend | 734 | .procend |
