| #------------------------------------------------------------------------------ | |
| # | |
| # LoongArch set exception base address operations | |
| # | |
| # Copyright (c) 2024, Loongson Technology Corporation Limited. All rights reserved.<BR> | |
| # | |
| # SPDX-License-Identifier: BSD-2-Clause-Patent | |
| # | |
| #------------------------------------------------------------------------------ | |
| #include <Base.h> | |
| #include <Register/LoongArch64/Csr.h> | |
| ASM_GLOBAL ASM_PFX(SetExceptionBaseAddress) | |
| ASM_GLOBAL ASM_PFX(SetTlbRebaseAddress) | |
| #/** | |
| # Set the exception base address for LoongArch. | |
| # | |
| # @param ExceptionBaseAddress The exception base address, must be aligned greater than or qeual to 4K . | |
| #**/ | |
| ASM_PFX(SetExceptionBaseAddress): | |
| csrrd $t0, LOONGARCH_CSR_ECFG | |
| li.d $t1, ~(BIT16 | BIT17 | BIT18) | |
| and $t0, $t0, $t1 | |
| csrwr $t0, LOONGARCH_CSR_ECFG | |
| move $t0, $a0 | |
| csrwr $t0, LOONGARCH_CSR_EBASE | |
| jirl $zero, $ra, 0 | |
| #/** | |
| # Set the TlbRebase address for LoongArch. | |
| # | |
| # @param TlbRebaseAddress The TlbRebase address, must be aligned greater than or qeual to 4K . | |
| #**/ | |
| ASM_PFX(SetTlbRebaseAddress): | |
| move $t0, $a0 | |
| csrwr $t0, LOONGARCH_CSR_TLBREBASE | |
| jirl $zero, $ra, 0 | |
| .end |