]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPkg/Library/ArmLib/Common/Arm/ArmLibSupport.asm
ArmPkg/ArmLib: Functions to access ARM HYP Vector base address register.
[mirror_edk2.git] / ArmPkg / Library / ArmLib / Common / Arm / ArmLibSupport.asm
CommitLineData
bd6b9799 1//------------------------------------------------------------------------------ \r
2//\r
3// Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
5ea2c2d3 4// Copyright (c) 2011-2013, ARM Limited. All rights reserved.\r
bd6b9799 5//\r
6// This program and the accompanying materials\r
7// are licensed and made available under the terms and conditions of the BSD License\r
8// which accompanies this distribution. The full text of the license may be found at\r
9// http://opensource.org/licenses/bsd-license.php\r
10//\r
11// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13//\r
14//------------------------------------------------------------------------------\r
15\r
16#include <AsmMacroIoLib.h>\r
17 \r
18 INCLUDE AsmMacroIoLib.inc\r
19\r
20#ifdef ARM_CPU_ARMv6\r
21// No memory barriers for ARMv6\r
22#define isb\r
23#define dsb\r
24#endif\r
25\r
26 EXPORT Cp15IdCode\r
27 EXPORT Cp15CacheInfo\r
28 EXPORT ArmGetInterruptState\r
29 EXPORT ArmGetFiqState\r
30 EXPORT ArmGetTTBR0BaseAddress\r
31 EXPORT ArmSetTTBR0\r
32 EXPORT ArmSetDomainAccessControl\r
33 EXPORT CPSRMaskInsert\r
34 EXPORT CPSRRead\r
836c3500 35 EXPORT ArmReadCpacr\r
36 EXPORT ArmWriteCpacr\r
bd6b9799 37 EXPORT ArmWriteAuxCr\r
38 EXPORT ArmReadAuxCr\r
39 EXPORT ArmInvalidateTlb\r
40 EXPORT ArmUpdateTranslationTableEntry\r
836c3500 41 EXPORT ArmReadNsacr\r
bd6b9799 42 EXPORT ArmWriteNsacr\r
836c3500 43 EXPORT ArmReadScr\r
bd6b9799 44 EXPORT ArmWriteScr\r
836c3500 45 EXPORT ArmReadMVBar\r
46 EXPORT ArmWriteMVBar\r
5ea2c2d3 47 EXPORT ArmReadHVBar\r
48 EXPORT ArmWriteHVBar\r
b1d41be7 49 EXPORT ArmCallWFE\r
50 EXPORT ArmCallSEV\r
836c3500 51 EXPORT ArmReadSctlr\r
bd6b9799 52\r
53 AREA ArmLibSupport, CODE, READONLY\r
54\r
55Cp15IdCode\r
56 mrc p15,0,R0,c0,c0,0\r
57 bx LR\r
58\r
59Cp15CacheInfo\r
60 mrc p15,0,R0,c0,c0,1\r
61 bx LR\r
62\r
63ArmGetInterruptState\r
64 mrs R0,CPSR\r
65 tst R0,#0x80 // Check if IRQ is enabled.\r
66 moveq R0,#1\r
67 movne R0,#0\r
68 bx LR\r
69\r
70ArmGetFiqState\r
71 mrs R0,CPSR\r
72 tst R0,#0x40 // Check if FIQ is enabled.\r
73 moveq R0,#1\r
74 movne R0,#0\r
75 bx LR\r
76\r
77ArmSetDomainAccessControl\r
78 mcr p15,0,r0,c3,c0,0\r
79 bx lr\r
80\r
81CPSRMaskInsert // on entry, r0 is the mask and r1 is the field to insert\r
82 stmfd sp!, {r4-r12, lr} // save all the banked registers\r
83 mov r3, sp // copy the stack pointer into a non-banked register\r
84 mrs r2, cpsr // read the cpsr\r
85 bic r2, r2, r0 // clear mask in the cpsr\r
86 and r1, r1, r0 // clear bits outside the mask in the input\r
87 orr r2, r2, r1 // set field\r
88 msr cpsr_cxsf, r2 // write back cpsr (may have caused a mode switch)\r
89 isb\r
90 mov sp, r3 // restore stack pointer\r
91 ldmfd sp!, {r4-r12, lr} // restore registers\r
92 bx lr // return (hopefully thumb-safe!) // return (hopefully thumb-safe!)\r
93\r
94CPSRRead\r
95 mrs r0, cpsr\r
96 bx lr\r
97\r
836c3500 98ArmReadCpacr\r
99 mrc p15, 0, r0, c1, c0, 2\r
100 bx lr\r
101\r
102ArmWriteCpacr\r
bd6b9799 103 mcr p15, 0, r0, c1, c0, 2\r
18029bb9 104 isb\r
bd6b9799 105 bx lr\r
106\r
107ArmWriteAuxCr\r
108 mcr p15, 0, r0, c1, c0, 1\r
109 bx lr\r
110\r
111ArmReadAuxCr\r
112 mrc p15, 0, r0, c1, c0, 1\r
113 bx lr \r
114\r
115ArmSetTTBR0\r
116 mcr p15,0,r0,c2,c0,0\r
117 isb\r
118 bx lr\r
119\r
120ArmGetTTBR0BaseAddress\r
121 mrc p15,0,r0,c2,c0,0\r
122 LoadConstantToReg(0xFFFFC000, r1)\r
123 and r0, r0, r1\r
124 isb\r
125 bx lr\r
126\r
127//\r
128//VOID\r
129//ArmUpdateTranslationTableEntry (\r
130// IN VOID *TranslationTableEntry // R0\r
131// IN VOID *MVA // R1\r
132// );\r
133ArmUpdateTranslationTableEntry\r
134 mcr p15,0,R0,c7,c14,1 // DCCIMVAC Clean data cache by MVA\r
135 dsb\r
136 mcr p15,0,R1,c8,c7,1 // TLBIMVA TLB Invalidate MVA\r
137 mcr p15,0,R9,c7,c5,6 // BPIALL Invalidate Branch predictor array. R9 == NoOp\r
138 dsb\r
139 isb\r
140 bx lr\r
141\r
142ArmInvalidateTlb\r
143 mov r0,#0\r
144 mcr p15,0,r0,c8,c7,0\r
145 mcr p15,0,R9,c7,c5,6 // BPIALL Invalidate Branch predictor array. R9 == NoOp\r
146 dsb\r
147 isb\r
148 bx lr\r
149\r
836c3500 150ArmReadNsacr\r
151 mrc p15, 0, r0, c1, c1, 2\r
152 bx lr\r
153\r
bd6b9799 154ArmWriteNsacr\r
155 mcr p15, 0, r0, c1, c1, 2\r
156 bx lr\r
157\r
836c3500 158ArmReadScr\r
159 mrc p15, 0, r0, c1, c1, 0\r
160 bx lr\r
161\r
bd6b9799 162ArmWriteScr\r
163 mcr p15, 0, r0, c1, c1, 0\r
164 bx lr\r
165\r
5ea2c2d3 166ArmReadHVBar\r
167 mrc p15, 4, r0, c12, c0, 0\r
168 bx lr\r
169\r
170ArmWriteHVBar\r
171 mcr p15, 4, r0, c12, c0, 0\r
172 bx lr\r
173\r
836c3500 174ArmReadMVBar\r
175 mrc p15, 0, r0, c12, c0, 1\r
176 bx lr\r
177\r
178ArmWriteMVBar\r
bd6b9799 179 mcr p15, 0, r0, c12, c0, 1\r
180 bx lr\r
181 \r
b1d41be7 182ArmCallWFE\r
183 wfe\r
184 blx lr\r
185\r
186ArmCallSEV\r
187 sev\r
188 blx lr\r
189\r
836c3500 190ArmReadSctlr\r
191 mrc p15, 0, R0, c1, c0, 0 // Read SCTLR into R0 (Read control register configuration data)\r
192 bx lr\r
193\r
bd6b9799 194 END\r