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>
This commit is contained in:
Chao Li 2023-10-12 11:04:54 +08:00 committed by Liming Gao
parent e5b5073153
commit 57684402e4
3 changed files with 62 additions and 0 deletions

View File

@ -287,6 +287,26 @@ typedef struct {
#define BASE_LIBRARY_JUMP_BUFFER_ALIGNMENT 8
/*
* Set the exception base address for LoongArch.
*
* @param ExceptionBaseAddress The exception base address, must be aligned greater than or qeual to 4K .
*/
VOID
SetExceptionBaseAddress (
IN UINT64
);
/*
* Set the TlbRebase address for LoongArch.
*
* @param TlbRebaseAddress The TlbRebase address, must be aligned greater than or qeual to 4K .
*/
VOID
SetTlbRebaseAddress (
IN UINT64
);
#endif // defined (MDE_CPU_LOONGARCH64)
//

View File

@ -420,6 +420,7 @@
LoongArch64/CpuPause.S | GCC
LoongArch64/SetJumpLongJump.S | GCC
LoongArch64/SwitchStack.S | GCC
LoongArch64/ExceptionBase.S | GCC
[Packages]
MdePkg/MdePkg.dec

View File

@ -0,0 +1,41 @@
#------------------------------------------------------------------------------
#
# 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