root/arch/sparc/lib/NG4patch.S

/* [<][>][^][v][top][bottom][index][help] */
   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 /* NG4patch.S: Patch Ultra-I routines with Niagara-4 variant.
   3  *
   4  * Copyright (C) 2012 David S. Miller <davem@davemloft.net>
   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         .globl  niagara4_patch_copyops
  29         .type   niagara4_patch_copyops,#function
  30 niagara4_patch_copyops:
  31         NG_DO_PATCH(memcpy, NG4memcpy)
  32         NG_DO_PATCH(raw_copy_from_user, NG4copy_from_user)
  33         NG_DO_PATCH(raw_copy_to_user, NG4copy_to_user)
  34         retl
  35          nop
  36         .size   niagara4_patch_copyops,.-niagara4_patch_copyops
  37 
  38         .globl  niagara4_patch_bzero
  39         .type   niagara4_patch_bzero,#function
  40 niagara4_patch_bzero:
  41         NG_DO_PATCH(memset, NG4memset)
  42         NG_DO_PATCH(__bzero, NG4bzero)
  43         NG_DO_PATCH(__clear_user, NGclear_user)
  44         NG_DO_PATCH(tsb_init, NGtsb_init)
  45         retl
  46          nop
  47         .size   niagara4_patch_bzero,.-niagara4_patch_bzero
  48 
  49         .globl  niagara4_patch_pageops
  50         .type   niagara4_patch_pageops,#function
  51 niagara4_patch_pageops:
  52         NG_DO_PATCH(copy_user_page, NG4copy_user_page)
  53         NG_DO_PATCH(_clear_page, NG4clear_page)
  54         NG_DO_PATCH(clear_user_page, NG4clear_user_page)
  55         retl
  56          nop
  57         .size   niagara4_patch_pageops,.-niagara4_patch_pageops
  58 
  59 ENTRY(niagara4_patch_fls)
  60         NG_DO_PATCH(fls, NG4fls)
  61         NG_DO_PATCH(__fls, __NG4fls)
  62         retl
  63          nop
  64 ENDPROC(niagara4_patch_fls)

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