1*b2441318SGreg Kroah-Hartman/* SPDX-License-Identifier: GPL-2.0 */ 26729cf79SSam Ravnborg/* Assembler variants of srmmu access functions. 36729cf79SSam Ravnborg * Implemented in assembler to allow run-time patching. 46729cf79SSam Ravnborg * LEON uses a different ASI for MMUREGS than SUN. 56729cf79SSam Ravnborg * 66729cf79SSam Ravnborg * The leon_1insn_patch infrastructure is used 76729cf79SSam Ravnborg * for the run-time patching. 86729cf79SSam Ravnborg */ 96729cf79SSam Ravnborg 106729cf79SSam Ravnborg#include <linux/linkage.h> 116729cf79SSam Ravnborg 126729cf79SSam Ravnborg#include <asm/asmmacro.h> 136729cf79SSam Ravnborg#include <asm/pgtsrmmu.h> 146729cf79SSam Ravnborg#include <asm/asi.h> 156729cf79SSam Ravnborg 166729cf79SSam Ravnborg/* unsigned int srmmu_get_mmureg(void) */ 176729cf79SSam RavnborgENTRY(srmmu_get_mmureg) 186729cf79SSam RavnborgLEON_PI(lda [%g0] ASI_LEON_MMUREGS, %o0) 196729cf79SSam RavnborgSUN_PI_(lda [%g0] ASI_M_MMUREGS, %o0) 206729cf79SSam Ravnborg retl 216729cf79SSam Ravnborg nop 226729cf79SSam RavnborgENDPROC(srmmu_get_mmureg) 236729cf79SSam Ravnborg 246729cf79SSam Ravnborg/* void srmmu_set_mmureg(unsigned long regval) */ 256729cf79SSam RavnborgENTRY(srmmu_set_mmureg) 266729cf79SSam RavnborgLEON_PI(sta %o0, [%g0] ASI_LEON_MMUREGS) 276729cf79SSam RavnborgSUN_PI_(sta %o0, [%g0] ASI_M_MMUREGS) 286729cf79SSam Ravnborg retl 296729cf79SSam Ravnborg nop 306729cf79SSam RavnborgENDPROC(srmmu_set_mmureg) 316729cf79SSam Ravnborg 326729cf79SSam Ravnborg/* void srmmu_set_ctable_ptr(unsigned long paddr) */ 336729cf79SSam RavnborgENTRY(srmmu_set_ctable_ptr) 346729cf79SSam Ravnborg /* paddr = ((paddr >> 4) & SRMMU_CTX_PMASK); */ 356729cf79SSam Ravnborg srl %o0, 4, %g1 366729cf79SSam Ravnborg and %g1, SRMMU_CTX_PMASK, %g1 376729cf79SSam Ravnborg 386729cf79SSam Ravnborg mov SRMMU_CTXTBL_PTR, %g2 396729cf79SSam RavnborgLEON_PI(sta %g1, [%g2] ASI_LEON_MMUREGS) 406729cf79SSam RavnborgSUN_PI_(sta %g1, [%g2] ASI_M_MMUREGS) 416729cf79SSam Ravnborg retl 426729cf79SSam Ravnborg nop 436729cf79SSam RavnborgENDPROC(srmmu_set_ctable_ptr) 446729cf79SSam Ravnborg 456729cf79SSam Ravnborg 466729cf79SSam Ravnborg/* void srmmu_set_context(int context) */ 476729cf79SSam RavnborgENTRY(srmmu_set_context) 486729cf79SSam Ravnborg mov SRMMU_CTX_REG, %g1 496729cf79SSam RavnborgLEON_PI(sta %o0, [%g1] ASI_LEON_MMUREGS) 506729cf79SSam RavnborgSUN_PI_(sta %o0, [%g1] ASI_M_MMUREGS) 516729cf79SSam Ravnborg retl 526729cf79SSam Ravnborg nop 536729cf79SSam RavnborgENDPROC(srmmu_set_context) 546729cf79SSam Ravnborg 556729cf79SSam Ravnborg 566729cf79SSam Ravnborg/* int srmmu_get_context(void) */ 576729cf79SSam RavnborgENTRY(srmmu_get_context) 586729cf79SSam Ravnborg mov SRMMU_CTX_REG, %o0 596729cf79SSam RavnborgLEON_PI(lda [%o0] ASI_LEON_MMUREGS, %o0) 606729cf79SSam RavnborgSUN_PI_(lda [%o0] ASI_M_MMUREGS, %o0) 616729cf79SSam Ravnborg retl 626729cf79SSam Ravnborg nop 636729cf79SSam RavnborgENDPROC(srmmu_get_context) 646729cf79SSam Ravnborg 656729cf79SSam Ravnborg 666729cf79SSam Ravnborg/* unsigned int srmmu_get_fstatus(void) */ 676729cf79SSam RavnborgENTRY(srmmu_get_fstatus) 686729cf79SSam Ravnborg mov SRMMU_FAULT_STATUS, %o0 696729cf79SSam RavnborgLEON_PI(lda [%o0] ASI_LEON_MMUREGS, %o0) 706729cf79SSam RavnborgSUN_PI_(lda [%o0] ASI_M_MMUREGS, %o0) 716729cf79SSam Ravnborg retl 726729cf79SSam Ravnborg nop 736729cf79SSam RavnborgENDPROC(srmmu_get_fstatus) 746729cf79SSam Ravnborg 756729cf79SSam Ravnborg 766729cf79SSam Ravnborg/* unsigned int srmmu_get_faddr(void) */ 776729cf79SSam RavnborgENTRY(srmmu_get_faddr) 786729cf79SSam Ravnborg mov SRMMU_FAULT_ADDR, %o0 796729cf79SSam RavnborgLEON_PI(lda [%o0] ASI_LEON_MMUREGS, %o0) 806729cf79SSam RavnborgSUN_PI_(lda [%o0] ASI_M_MMUREGS, %o0) 816729cf79SSam Ravnborg retl 826729cf79SSam Ravnborg nop 836729cf79SSam RavnborgENDPROC(srmmu_get_faddr) 84