diff options
| -rw-r--r-- | arch/parisc/kernel/pacache.S | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/arch/parisc/kernel/pacache.S b/arch/parisc/kernel/pacache.S index 985e06da37f5..1b39a2acaadf 100644 --- a/arch/parisc/kernel/pacache.S +++ b/arch/parisc/kernel/pacache.S | |||
| @@ -96,7 +96,7 @@ fitmanyloop: /* Loop if LOOP >= 2 */ | |||
| 96 | 96 | ||
| 97 | fitmanymiddle: /* Loop if LOOP >= 2 */ | 97 | fitmanymiddle: /* Loop if LOOP >= 2 */ |
| 98 | addib,COND(>) -1, %r31, fitmanymiddle /* Adjusted inner loop decr */ | 98 | addib,COND(>) -1, %r31, fitmanymiddle /* Adjusted inner loop decr */ |
| 99 | pitlbe 0(%sr1, %r28) | 99 | pitlbe %r0(%sr1, %r28) |
| 100 | pitlbe,m %arg1(%sr1, %r28) /* Last pitlbe and addr adjust */ | 100 | pitlbe,m %arg1(%sr1, %r28) /* Last pitlbe and addr adjust */ |
| 101 | addib,COND(>) -1, %r29, fitmanymiddle /* Middle loop decr */ | 101 | addib,COND(>) -1, %r29, fitmanymiddle /* Middle loop decr */ |
| 102 | copy %arg3, %r31 /* Re-init inner loop count */ | 102 | copy %arg3, %r31 /* Re-init inner loop count */ |
| @@ -139,7 +139,7 @@ fdtmanyloop: /* Loop if LOOP >= 2 */ | |||
| 139 | 139 | ||
| 140 | fdtmanymiddle: /* Loop if LOOP >= 2 */ | 140 | fdtmanymiddle: /* Loop if LOOP >= 2 */ |
| 141 | addib,COND(>) -1, %r31, fdtmanymiddle /* Adjusted inner loop decr */ | 141 | addib,COND(>) -1, %r31, fdtmanymiddle /* Adjusted inner loop decr */ |
| 142 | pdtlbe 0(%sr1, %r28) | 142 | pdtlbe %r0(%sr1, %r28) |
| 143 | pdtlbe,m %arg1(%sr1, %r28) /* Last pdtlbe and addr adjust */ | 143 | pdtlbe,m %arg1(%sr1, %r28) /* Last pdtlbe and addr adjust */ |
| 144 | addib,COND(>) -1, %r29, fdtmanymiddle /* Middle loop decr */ | 144 | addib,COND(>) -1, %r29, fdtmanymiddle /* Middle loop decr */ |
| 145 | copy %arg3, %r31 /* Re-init inner loop count */ | 145 | copy %arg3, %r31 /* Re-init inner loop count */ |
| @@ -626,12 +626,12 @@ ENTRY_CFI(copy_user_page_asm) | |||
| 626 | /* Purge any old translations */ | 626 | /* Purge any old translations */ |
| 627 | 627 | ||
| 628 | #ifdef CONFIG_PA20 | 628 | #ifdef CONFIG_PA20 |
| 629 | pdtlb,l 0(%r28) | 629 | pdtlb,l %r0(%r28) |
| 630 | pdtlb,l 0(%r29) | 630 | pdtlb,l %r0(%r29) |
| 631 | #else | 631 | #else |
| 632 | tlb_lock %r20,%r21,%r22 | 632 | tlb_lock %r20,%r21,%r22 |
| 633 | pdtlb 0(%r28) | 633 | pdtlb %r0(%r28) |
| 634 | pdtlb 0(%r29) | 634 | pdtlb %r0(%r29) |
| 635 | tlb_unlock %r20,%r21,%r22 | 635 | tlb_unlock %r20,%r21,%r22 |
| 636 | #endif | 636 | #endif |
| 637 | 637 | ||
| @@ -774,10 +774,10 @@ ENTRY_CFI(clear_user_page_asm) | |||
| 774 | /* Purge any old translation */ | 774 | /* Purge any old translation */ |
| 775 | 775 | ||
| 776 | #ifdef CONFIG_PA20 | 776 | #ifdef CONFIG_PA20 |
| 777 | pdtlb,l 0(%r28) | 777 | pdtlb,l %r0(%r28) |
| 778 | #else | 778 | #else |
| 779 | tlb_lock %r20,%r21,%r22 | 779 | tlb_lock %r20,%r21,%r22 |
| 780 | pdtlb 0(%r28) | 780 | pdtlb %r0(%r28) |
| 781 | tlb_unlock %r20,%r21,%r22 | 781 | tlb_unlock %r20,%r21,%r22 |
| 782 | #endif | 782 | #endif |
| 783 | 783 | ||
| @@ -858,10 +858,10 @@ ENTRY_CFI(flush_dcache_page_asm) | |||
| 858 | /* Purge any old translation */ | 858 | /* Purge any old translation */ |
| 859 | 859 | ||
| 860 | #ifdef CONFIG_PA20 | 860 | #ifdef CONFIG_PA20 |
| 861 | pdtlb,l 0(%r28) | 861 | pdtlb,l %r0(%r28) |
| 862 | #else | 862 | #else |
| 863 | tlb_lock %r20,%r21,%r22 | 863 | tlb_lock %r20,%r21,%r22 |
| 864 | pdtlb 0(%r28) | 864 | pdtlb %r0(%r28) |
| 865 | tlb_unlock %r20,%r21,%r22 | 865 | tlb_unlock %r20,%r21,%r22 |
| 866 | #endif | 866 | #endif |
| 867 | 867 | ||
| @@ -898,10 +898,10 @@ ENTRY_CFI(flush_dcache_page_asm) | |||
| 898 | sync | 898 | sync |
| 899 | 899 | ||
| 900 | #ifdef CONFIG_PA20 | 900 | #ifdef CONFIG_PA20 |
| 901 | pdtlb,l 0(%r25) | 901 | pdtlb,l %r0(%r25) |
| 902 | #else | 902 | #else |
| 903 | tlb_lock %r20,%r21,%r22 | 903 | tlb_lock %r20,%r21,%r22 |
| 904 | pdtlb 0(%r25) | 904 | pdtlb %r0(%r25) |
| 905 | tlb_unlock %r20,%r21,%r22 | 905 | tlb_unlock %r20,%r21,%r22 |
| 906 | #endif | 906 | #endif |
| 907 | 907 | ||
| @@ -931,13 +931,18 @@ ENTRY_CFI(flush_icache_page_asm) | |||
| 931 | depwi 0, 31,PAGE_SHIFT, %r28 /* Clear any offset bits */ | 931 | depwi 0, 31,PAGE_SHIFT, %r28 /* Clear any offset bits */ |
| 932 | #endif | 932 | #endif |
| 933 | 933 | ||
| 934 | /* Purge any old translation */ | 934 | /* Purge any old translation. Note that the FIC instruction |
| 935 | * may use either the instruction or data TLB. Given that we | ||
| 936 | * have a flat address space, it's not clear which TLB will be | ||
| 937 | * used. So, we purge both entries. */ | ||
| 935 | 938 | ||
| 936 | #ifdef CONFIG_PA20 | 939 | #ifdef CONFIG_PA20 |
| 940 | pdtlb,l %r0(%r28) | ||
| 937 | pitlb,l %r0(%sr4,%r28) | 941 | pitlb,l %r0(%sr4,%r28) |
| 938 | #else | 942 | #else |
| 939 | tlb_lock %r20,%r21,%r22 | 943 | tlb_lock %r20,%r21,%r22 |
| 940 | pitlb (%sr4,%r28) | 944 | pdtlb %r0(%r28) |
| 945 | pitlb %r0(%sr4,%r28) | ||
| 941 | tlb_unlock %r20,%r21,%r22 | 946 | tlb_unlock %r20,%r21,%r22 |
| 942 | #endif | 947 | #endif |
| 943 | 948 | ||
| @@ -976,10 +981,12 @@ ENTRY_CFI(flush_icache_page_asm) | |||
| 976 | sync | 981 | sync |
| 977 | 982 | ||
| 978 | #ifdef CONFIG_PA20 | 983 | #ifdef CONFIG_PA20 |
| 984 | pdtlb,l %r0(%r28) | ||
| 979 | pitlb,l %r0(%sr4,%r25) | 985 | pitlb,l %r0(%sr4,%r25) |
| 980 | #else | 986 | #else |
| 981 | tlb_lock %r20,%r21,%r22 | 987 | tlb_lock %r20,%r21,%r22 |
| 982 | pitlb (%sr4,%r25) | 988 | pdtlb %r0(%r28) |
| 989 | pitlb %r0(%sr4,%r25) | ||
| 983 | tlb_unlock %r20,%r21,%r22 | 990 | tlb_unlock %r20,%r21,%r22 |
| 984 | #endif | 991 | #endif |
| 985 | 992 | ||
