]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPkg/Library/ArmLib/Common/Arm/ArmLibSupport.asm
ARM: Remove NSACR from the common code
[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 ArmReadScr\r
bd6b9799 42 EXPORT ArmWriteScr\r
836c3500 43 EXPORT ArmReadMVBar\r
44 EXPORT ArmWriteMVBar\r
5ea2c2d3 45 EXPORT ArmReadHVBar\r
46 EXPORT ArmWriteHVBar\r
b1d41be7 47 EXPORT ArmCallWFE\r
48 EXPORT ArmCallSEV\r
836c3500 49 EXPORT ArmReadSctlr\r
bd6b9799 50\r
51 AREA ArmLibSupport, CODE, READONLY\r
52\r
53Cp15IdCode\r
54 mrc p15,0,R0,c0,c0,0\r
55 bx LR\r
56\r
57Cp15CacheInfo\r
58 mrc p15,0,R0,c0,c0,1\r
59 bx LR\r
60\r
61ArmGetInterruptState\r
62 mrs R0,CPSR\r
63 tst R0,#0x80 // Check if IRQ is enabled.\r
64 moveq R0,#1\r
65 movne R0,#0\r
66 bx LR\r
67\r
68ArmGetFiqState\r
69 mrs R0,CPSR\r
70 tst R0,#0x40 // Check if FIQ is enabled.\r
71 moveq R0,#1\r
72 movne R0,#0\r
73 bx LR\r
74\r
75ArmSetDomainAccessControl\r
76 mcr p15,0,r0,c3,c0,0\r
77 bx lr\r
78\r
79CPSRMaskInsert // on entry, r0 is the mask and r1 is the field to insert\r
80 stmfd sp!, {r4-r12, lr} // save all the banked registers\r
81 mov r3, sp // copy the stack pointer into a non-banked register\r
82 mrs r2, cpsr // read the cpsr\r
83 bic r2, r2, r0 // clear mask in the cpsr\r
84 and r1, r1, r0 // clear bits outside the mask in the input\r
85 orr r2, r2, r1 // set field\r
86 msr cpsr_cxsf, r2 // write back cpsr (may have caused a mode switch)\r
87 isb\r
88 mov sp, r3 // restore stack pointer\r
89 ldmfd sp!, {r4-r12, lr} // restore registers\r
90 bx lr // return (hopefully thumb-safe!) // return (hopefully thumb-safe!)\r
91\r
92CPSRRead\r
93 mrs r0, cpsr\r
94 bx lr\r
95\r
836c3500 96ArmReadCpacr\r
97 mrc p15, 0, r0, c1, c0, 2\r
98 bx lr\r
99\r
100ArmWriteCpacr\r
bd6b9799 101 mcr p15, 0, r0, c1, c0, 2\r
18029bb9 102 isb\r
bd6b9799 103 bx lr\r
104\r
105ArmWriteAuxCr\r
106 mcr p15, 0, r0, c1, c0, 1\r
107 bx lr\r
108\r
109ArmReadAuxCr\r
110 mrc p15, 0, r0, c1, c0, 1\r
111 bx lr \r
112\r
113ArmSetTTBR0\r
114 mcr p15,0,r0,c2,c0,0\r
115 isb\r
116 bx lr\r
117\r
118ArmGetTTBR0BaseAddress\r
119 mrc p15,0,r0,c2,c0,0\r
120 LoadConstantToReg(0xFFFFC000, r1)\r
121 and r0, r0, r1\r
122 isb\r
123 bx lr\r
124\r
125//\r
126//VOID\r
127//ArmUpdateTranslationTableEntry (\r
128// IN VOID *TranslationTableEntry // R0\r
129// IN VOID *MVA // R1\r
130// );\r
131ArmUpdateTranslationTableEntry\r
132 mcr p15,0,R0,c7,c14,1 // DCCIMVAC Clean data cache by MVA\r
133 dsb\r
134 mcr p15,0,R1,c8,c7,1 // TLBIMVA TLB Invalidate MVA\r
135 mcr p15,0,R9,c7,c5,6 // BPIALL Invalidate Branch predictor array. R9 == NoOp\r
136 dsb\r
137 isb\r
138 bx lr\r
139\r
140ArmInvalidateTlb\r
141 mov r0,#0\r
142 mcr p15,0,r0,c8,c7,0\r
143 mcr p15,0,R9,c7,c5,6 // BPIALL Invalidate Branch predictor array. R9 == NoOp\r
144 dsb\r
145 isb\r
146 bx lr\r
147\r
836c3500 148ArmReadScr\r
149 mrc p15, 0, r0, c1, c1, 0\r
150 bx lr\r
151\r
bd6b9799 152ArmWriteScr\r
153 mcr p15, 0, r0, c1, c1, 0\r
154 bx lr\r
155\r
5ea2c2d3 156ArmReadHVBar\r
157 mrc p15, 4, r0, c12, c0, 0\r
158 bx lr\r
159\r
160ArmWriteHVBar\r
161 mcr p15, 4, r0, c12, c0, 0\r
162 bx lr\r
163\r
836c3500 164ArmReadMVBar\r
165 mrc p15, 0, r0, c12, c0, 1\r
166 bx lr\r
167\r
168ArmWriteMVBar\r
bd6b9799 169 mcr p15, 0, r0, c12, c0, 1\r
170 bx lr\r
171 \r
b1d41be7 172ArmCallWFE\r
173 wfe\r
174 blx lr\r
175\r
176ArmCallSEV\r
177 sev\r
178 blx lr\r
179\r
836c3500 180ArmReadSctlr\r
181 mrc p15, 0, R0, c1, c0, 0 // Read SCTLR into R0 (Read control register configuration data)\r
182 bx lr\r
183\r
bd6b9799 184 END\r