Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /* Assembler variants of srmmu access functions.
0003  * Implemented in assembler to allow run-time patching.
0004  * LEON uses a different ASI for MMUREGS than SUN.
0005  *
0006  * The leon_1insn_patch infrastructure is used
0007  * for the run-time patching.
0008  */
0009 
0010 #include <linux/linkage.h>
0011 
0012 #include <asm/asmmacro.h>
0013 #include <asm/pgtsrmmu.h>
0014 #include <asm/asi.h>
0015 
0016 /* unsigned int srmmu_get_mmureg(void) */
0017 ENTRY(srmmu_get_mmureg)
0018 LEON_PI(lda [%g0] ASI_LEON_MMUREGS, %o0)
0019 SUN_PI_(lda [%g0] ASI_M_MMUREGS, %o0)
0020     retl
0021      nop
0022 ENDPROC(srmmu_get_mmureg)
0023 
0024 /* void srmmu_set_mmureg(unsigned long regval) */
0025 ENTRY(srmmu_set_mmureg)
0026 LEON_PI(sta %o0, [%g0] ASI_LEON_MMUREGS)
0027 SUN_PI_(sta %o0, [%g0] ASI_M_MMUREGS)
0028     retl
0029      nop
0030 ENDPROC(srmmu_set_mmureg)
0031 
0032 /* void srmmu_set_ctable_ptr(unsigned long paddr) */
0033 ENTRY(srmmu_set_ctable_ptr)
0034     /* paddr = ((paddr >> 4) & SRMMU_CTX_PMASK); */
0035     srl %o0, 4, %g1
0036     and %g1, SRMMU_CTX_PMASK, %g1
0037 
0038     mov SRMMU_CTXTBL_PTR, %g2
0039 LEON_PI(sta %g1, [%g2] ASI_LEON_MMUREGS)
0040 SUN_PI_(sta %g1, [%g2] ASI_M_MMUREGS)
0041     retl
0042      nop
0043 ENDPROC(srmmu_set_ctable_ptr)
0044 
0045 
0046 /* void srmmu_set_context(int context) */
0047 ENTRY(srmmu_set_context)
0048     mov SRMMU_CTX_REG, %g1
0049 LEON_PI(sta %o0, [%g1] ASI_LEON_MMUREGS)
0050 SUN_PI_(sta %o0, [%g1] ASI_M_MMUREGS)
0051     retl
0052      nop
0053 ENDPROC(srmmu_set_context)
0054 
0055 
0056 /* int srmmu_get_context(void) */
0057 ENTRY(srmmu_get_context)
0058     mov SRMMU_CTX_REG, %o0
0059 LEON_PI(lda     [%o0] ASI_LEON_MMUREGS, %o0)
0060 SUN_PI_(lda [%o0] ASI_M_MMUREGS, %o0)
0061     retl
0062      nop
0063 ENDPROC(srmmu_get_context)
0064 
0065 
0066 /* unsigned int srmmu_get_fstatus(void) */
0067 ENTRY(srmmu_get_fstatus)
0068     mov SRMMU_FAULT_STATUS, %o0
0069 LEON_PI(lda     [%o0] ASI_LEON_MMUREGS, %o0)
0070 SUN_PI_(lda [%o0] ASI_M_MMUREGS, %o0)
0071     retl
0072      nop
0073 ENDPROC(srmmu_get_fstatus)
0074 
0075 
0076 /* unsigned int srmmu_get_faddr(void) */
0077 ENTRY(srmmu_get_faddr)
0078     mov SRMMU_FAULT_ADDR, %o0
0079 LEON_PI(lda     [%o0] ASI_LEON_MMUREGS, %o0)
0080 SUN_PI_(lda [%o0] ASI_M_MMUREGS, %o0)
0081     retl
0082      nop
0083 ENDPROC(srmmu_get_faddr)