This commit was manufactured by cvs2svn to create tag
[linux-2.6.git] / arch / sparc64 / lib / VIScopy.S
index 2c90b25..f02f8ee 100644 (file)
                .type                   bcopy,@function
 
 #ifdef __KERNEL__
+               .globl                  __memcpy_begin
+__memcpy_begin:
+
+               .globl                  __memcpy
+               .type                   __memcpy,@function
+
 memcpy_private:
+__memcpy:
 memcpy:                mov             ASI_P, asi_src                  ! IEU0  Group
                brnz,pt         %o2, __memcpy_entry             ! CTI
                 mov            ASI_P, asi_dest                 ! IEU1
@@ -360,6 +367,28 @@ bcopy:             or              %o0, 0, %g3                     ! IEU0  Group
        or      %g3, %lo(NOP), %g3; \
        stw     %g3, [%g2 + 0x4]; \
        flush   %g2;
+#define ULTRA3_PCACHE_DO_NOP(symbol)   \
+       sethi   %hi(symbol##_nop_1_6), %g1; \
+       or      %g1, %lo(symbol##_nop_1_6), %g1; \
+       sethi   %hi(NOP), %g2; \
+       stw     %g2, [%g1 + 0x00]; \
+       stw     %g2, [%g1 + 0x04]; \
+       flush   %g1 + 0x00; \
+       stw     %g2, [%g1 + 0x08]; \
+       stw     %g2, [%g1 + 0x0c]; \
+       flush   %g1 + 0x08; \
+       stw     %g2, [%g1 + 0x10]; \
+       stw     %g2, [%g1 + 0x04]; \
+       flush   %g1 + 0x10; \
+       sethi   %hi(symbol##_nop_2_3), %g1; \
+       or      %g1, %lo(symbol##_nop_2_3), %g1; \
+       stw     %g2, [%g1 + 0x00]; \
+       stw     %g2, [%g1 + 0x04]; \
+       flush   %g1 + 0x00; \
+       stw     %g2, [%g1 + 0x08]; \
+       flush   %g1 + 0x08;
+
+#include <asm/dcu.h>
 
        .globl  cheetah_patch_copyops
 cheetah_patch_copyops:
@@ -367,6 +396,23 @@ cheetah_patch_copyops:
        ULTRA3_DO_PATCH(__copy_from_user, U3copy_from_user)
        ULTRA3_DO_PATCH(__copy_to_user, U3copy_to_user)
        ULTRA3_DO_PATCH(__copy_in_user, U3copy_in_user)
+#if 0 /* Causes data corruption, nop out the optimization
+       * for now -DaveM
+       */
+       ldxa                    [%g0] ASI_DCU_CONTROL_REG, %g3
+       sethi                   %uhi(DCU_PE), %o3
+       sllx                    %o3, 32, %o3
+       andcc                   %g3, %o3, %g0
+       be,pn                   %xcc, pcache_disabled
+        nop
+#endif
+       ULTRA3_PCACHE_DO_NOP(U3memcpy)
+       ULTRA3_PCACHE_DO_NOP(U3copy_from_user)
+       ULTRA3_PCACHE_DO_NOP(U3copy_to_user)
+       ULTRA3_PCACHE_DO_NOP(cheetah_copy_user_page)
+#if 0
+pcache_disabled:
+#endif
        retl
         nop
 #undef BRANCH_ALWAYS
@@ -1013,6 +1059,9 @@ fpu_retl:
        FPU_RETL
 
 #ifdef __KERNEL__
+       .globl          __memcpy_end
+__memcpy_end:
+
                .section        .fixup
                .align          4
 VIScopyfixup_reto2: