mirror of https://github.com/acidanthera/audk.git
42 lines
1.2 KiB
ArmAsm
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
|