root/arch/sparc/lib/M7patch.S

/* [<][>][^][v][top][bottom][index][help] */
   1 /*
   2  * M7patch.S: Patch generic routines with M7 variant.
   3  *
   4  * Copyright (c) 2016, Oracle and/or its affiliates.  All rights reserved.
   5  */
   6 
   7 #include <linux/linkage.h>
   8 
   9 #define BRANCH_ALWAYS   0x10680000
  10 #define NOP             0x01000000
  11 #define NG_DO_PATCH(OLD, NEW)   \
  12         sethi   %hi(NEW), %g1; \
  13         or      %g1, %lo(NEW), %g1; \
  14         sethi   %hi(OLD), %g2; \
  15         or      %g2, %lo(OLD), %g2; \
  16         sub     %g1, %g2, %g1; \
  17         sethi   %hi(BRANCH_ALWAYS), %g3; \
  18         sll     %g1, 11, %g1; \
  19         srl     %g1, 11 + 2, %g1; \
  20         or      %g3, %lo(BRANCH_ALWAYS), %g3; \
  21         or      %g3, %g1, %g3; \
  22         stw     %g3, [%g2]; \
  23         sethi   %hi(NOP), %g3; \
  24         or      %g3, %lo(NOP), %g3; \
  25         stw     %g3, [%g2 + 0x4]; \
  26         flush   %g2;
  27 
  28 ENTRY(m7_patch_copyops)
  29         NG_DO_PATCH(memcpy, M7memcpy)
  30         NG_DO_PATCH(raw_copy_from_user, M7copy_from_user)
  31         NG_DO_PATCH(raw_copy_to_user, M7copy_to_user)
  32         retl
  33          nop
  34 ENDPROC(m7_patch_copyops)
  35 
  36 ENTRY(m7_patch_bzero)
  37         NG_DO_PATCH(memset, M7memset)
  38         NG_DO_PATCH(__bzero, M7bzero)
  39         NG_DO_PATCH(__clear_user, NGclear_user)
  40         NG_DO_PATCH(tsb_init, NGtsb_init)
  41         retl
  42          nop
  43 ENDPROC(m7_patch_bzero)
  44 
  45 ENTRY(m7_patch_pageops)
  46         NG_DO_PATCH(copy_user_page, NG4copy_user_page)
  47         NG_DO_PATCH(_clear_page, M7clear_page)
  48         NG_DO_PATCH(clear_user_page, M7clear_user_page)
  49         retl
  50          nop
  51 ENDPROC(m7_patch_pageops)

/* [<][>][^][v][top][bottom][index][help] */