]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPkg/Library/ArmLib/Common/ArmLibSupport.asm
ARM Packages: Fixed th 'NS' (Non Secure) bit in the MMU page Table Descriptor
[mirror_edk2.git] / ArmPkg / Library / ArmLib / Common / ArmLibSupport.asm
CommitLineData
bd6b9799 1//------------------------------------------------------------------------------ \r
2//\r
3// Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
4// Copyright (c) 2011, ARM Limited. All rights reserved.\r
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
35 EXPORT ArmWriteCPACR\r
36 EXPORT ArmWriteAuxCr\r
37 EXPORT ArmReadAuxCr\r
38 EXPORT ArmInvalidateTlb\r
39 EXPORT ArmUpdateTranslationTableEntry\r
40 EXPORT ArmWriteNsacr\r
41 EXPORT ArmWriteScr\r
42 EXPORT ArmWriteVMBar\r
b1d41be7 43 EXPORT ArmCallWFE\r
44 EXPORT ArmCallSEV\r
bd6b9799 45\r
46 AREA ArmLibSupport, CODE, READONLY\r
47\r
48Cp15IdCode\r
49 mrc p15,0,R0,c0,c0,0\r
50 bx LR\r
51\r
52Cp15CacheInfo\r
53 mrc p15,0,R0,c0,c0,1\r
54 bx LR\r
55\r
56ArmGetInterruptState\r
57 mrs R0,CPSR\r
58 tst R0,#0x80 // Check if IRQ is enabled.\r
59 moveq R0,#1\r
60 movne R0,#0\r
61 bx LR\r
62\r
63ArmGetFiqState\r
64 mrs R0,CPSR\r
65 tst R0,#0x40 // Check if FIQ is enabled.\r
66 moveq R0,#1\r
67 movne R0,#0\r
68 bx LR\r
69\r
70ArmSetDomainAccessControl\r
71 mcr p15,0,r0,c3,c0,0\r
72 bx lr\r
73\r
74CPSRMaskInsert // on entry, r0 is the mask and r1 is the field to insert\r
75 stmfd sp!, {r4-r12, lr} // save all the banked registers\r
76 mov r3, sp // copy the stack pointer into a non-banked register\r
77 mrs r2, cpsr // read the cpsr\r
78 bic r2, r2, r0 // clear mask in the cpsr\r
79 and r1, r1, r0 // clear bits outside the mask in the input\r
80 orr r2, r2, r1 // set field\r
81 msr cpsr_cxsf, r2 // write back cpsr (may have caused a mode switch)\r
82 isb\r
83 mov sp, r3 // restore stack pointer\r
84 ldmfd sp!, {r4-r12, lr} // restore registers\r
85 bx lr // return (hopefully thumb-safe!) // return (hopefully thumb-safe!)\r
86\r
87CPSRRead\r
88 mrs r0, cpsr\r
89 bx lr\r
90\r
91ArmWriteCPACR\r
92 mcr p15, 0, r0, c1, c0, 2\r
18029bb9 93 isb\r
bd6b9799 94 bx lr\r
95\r
96ArmWriteAuxCr\r
97 mcr p15, 0, r0, c1, c0, 1\r
98 bx lr\r
99\r
100ArmReadAuxCr\r
101 mrc p15, 0, r0, c1, c0, 1\r
102 bx lr \r
103\r
104ArmSetTTBR0\r
105 mcr p15,0,r0,c2,c0,0\r
106 isb\r
107 bx lr\r
108\r
109ArmGetTTBR0BaseAddress\r
110 mrc p15,0,r0,c2,c0,0\r
111 LoadConstantToReg(0xFFFFC000, r1)\r
112 and r0, r0, r1\r
113 isb\r
114 bx lr\r
115\r
116//\r
117//VOID\r
118//ArmUpdateTranslationTableEntry (\r
119// IN VOID *TranslationTableEntry // R0\r
120// IN VOID *MVA // R1\r
121// );\r
122ArmUpdateTranslationTableEntry\r
123 mcr p15,0,R0,c7,c14,1 // DCCIMVAC Clean data cache by MVA\r
124 dsb\r
125 mcr p15,0,R1,c8,c7,1 // TLBIMVA TLB Invalidate MVA\r
126 mcr p15,0,R9,c7,c5,6 // BPIALL Invalidate Branch predictor array. R9 == NoOp\r
127 dsb\r
128 isb\r
129 bx lr\r
130\r
131ArmInvalidateTlb\r
132 mov r0,#0\r
133 mcr p15,0,r0,c8,c7,0\r
134 mcr p15,0,R9,c7,c5,6 // BPIALL Invalidate Branch predictor array. R9 == NoOp\r
135 dsb\r
136 isb\r
137 bx lr\r
138\r
139ArmWriteNsacr\r
140 mcr p15, 0, r0, c1, c1, 2\r
141 bx lr\r
142\r
143ArmWriteScr\r
144 mcr p15, 0, r0, c1, c1, 0\r
145 bx lr\r
146\r
147ArmWriteVMBar\r
148 mcr p15, 0, r0, c12, c0, 1\r
149 bx lr\r
150 \r
b1d41be7 151ArmCallWFE\r
152 wfe\r
153 blx lr\r
154\r
155ArmCallSEV\r
156 sev\r
157 blx lr\r
158\r
bd6b9799 159 END\r