summaryrefslogtreecommitdiffstats
path: root/MdePkg/Library/BaseLib/LoongArch64/ExceptionBase.S
blob: b6e90a8f28d45eeae40c28208bd587ffeea0a605 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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