Chao Li 57684402e4 MdePkg: Add LoongArch64 exception function set into BaseLib
Adding SetExceptionBaseAddress and SetTlbRebaseAddress functions
for LoongArch64.

BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4584

Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Zhiguang Liu <zhiguang.liu@intel.com>
Signed-off-by: Chao Li <lichao@loongson.cn>
Acked-by: Michael D Kinney <michael.d.kinney@intel.com>
Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
2024-02-06 23:51:47 +08:00

42 lines
1.2 KiB
ArmAsm

#------------------------------------------------------------------------------
#
# 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