1b2441318SGreg Kroah-Hartman/* SPDX-License-Identifier: GPL-2.0 */ 231cdd0c3SPaul Mackerras#include <asm/ppc_asm.h> 3*ec0c464cSChristophe Leroy#include <asm/asm-compat.h> 431cdd0c3SPaul Mackerras 531cdd0c3SPaul Mackerras/* unsigned long xmon_mfspr(sprn, default_value) */ 631cdd0c3SPaul Mackerras_GLOBAL(xmon_mfspr) 7b42d9023SMichael Ellerman PPC_LL r5, .Lmfspr_table@got(r2) 831cdd0c3SPaul Mackerras b xmon_mxspr 931cdd0c3SPaul Mackerras 1031cdd0c3SPaul Mackerras/* void xmon_mtspr(sprn, new_value) */ 1131cdd0c3SPaul Mackerras_GLOBAL(xmon_mtspr) 12b42d9023SMichael Ellerman PPC_LL r5, .Lmtspr_table@got(r2) 1331cdd0c3SPaul Mackerras b xmon_mxspr 1431cdd0c3SPaul Mackerras 1531cdd0c3SPaul Mackerras/* 1631cdd0c3SPaul Mackerras * r3 = sprn 1731cdd0c3SPaul Mackerras * r4 = default or new value 1831cdd0c3SPaul Mackerras * r5 = table base 1931cdd0c3SPaul Mackerras */ 2031cdd0c3SPaul Mackerrasxmon_mxspr: 2131cdd0c3SPaul Mackerras /* 2231cdd0c3SPaul Mackerras * To index into the table of mxsprs we need: 2331cdd0c3SPaul Mackerras * i = (sprn & 0x3ff) * 8 2431cdd0c3SPaul Mackerras * or using rwlinm: 2531cdd0c3SPaul Mackerras * i = (sprn << 3) & (0x3ff << 3) 2631cdd0c3SPaul Mackerras */ 2731cdd0c3SPaul Mackerras rlwinm r3, r3, 3, 0x3ff << 3 2831cdd0c3SPaul Mackerras add r5, r5, r3 2931cdd0c3SPaul Mackerras mtctr r5 3031cdd0c3SPaul Mackerras mr r3, r4 /* put default_value in r3 for mfspr */ 3131cdd0c3SPaul Mackerras bctr 3231cdd0c3SPaul Mackerras 3331cdd0c3SPaul Mackerras.Lmfspr_table: 3431cdd0c3SPaul Mackerras spr = 0 3531cdd0c3SPaul Mackerras .rept 1024 3631cdd0c3SPaul Mackerras mfspr r3, spr 3731cdd0c3SPaul Mackerras blr 3831cdd0c3SPaul Mackerras spr = spr + 1 3931cdd0c3SPaul Mackerras .endr 4031cdd0c3SPaul Mackerras 4131cdd0c3SPaul Mackerras.Lmtspr_table: 4231cdd0c3SPaul Mackerras spr = 0 4331cdd0c3SPaul Mackerras .rept 1024 4431cdd0c3SPaul Mackerras mtspr spr, r4 4531cdd0c3SPaul Mackerras blr 4631cdd0c3SPaul Mackerras spr = spr + 1 4731cdd0c3SPaul Mackerras .endr 48