ArmV7.h revision 53205a55e87259864453bc187e7607732c6fbd0e
1/** @file
2
3  Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
4
5  This program and the accompanying materials
6  are licensed and made available under the terms and conditions of the BSD License
7  which accompanies this distribution.  The full text of the license may be found at
8  http://opensource.org/licenses/bsd-license.php
9
10  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13**/
14
15#ifndef __ARM_V7_H__
16#define __ARM_V7_H__
17
18// Domain Access Control Register
19#define DOMAIN_ACCESS_CONTROL_MASK(a)     (3UL << (2 * (a)))
20#define DOMAIN_ACCESS_CONTROL_NONE(a)     (0UL << (2 * (a)))
21#define DOMAIN_ACCESS_CONTROL_CLIENT(a)   (1UL << (2 * (a)))
22#define DOMAIN_ACCESS_CONTROL_RESERVED(a) (2UL << (2 * (a)))
23#define DOMAIN_ACCESS_CONTROL_MANAGER(a)  (3UL << (2 * (a)))
24
25#define TTBR_NOT_OUTER_SHAREABLE             BIT5
26#define TTBR_RGN_OUTER_NON_CACHEABLE         0
27#define TTBR_RGN_OUTER_WRITE_BACK_ALLOC      BIT3
28#define TTBR_RGN_OUTER_WRITE_THROUGH         BIT4
29#define TTBR_RGN_OUTER_WRITE_BACK_NO_ALLOC   (BIT3|BIT4)
30#define TTBR_SHAREABLE                       BIT1
31#define TTBR_NON_SHAREABLE                   0
32#define TTBR_INNER_CACHEABLE                 BIT0
33#define TTBR_NON_INNER_CACHEABLE             BIT0
34#define TTBR_RGN_INNER_NON_CACHEABLE         0
35#define TTBR_RGN_INNER_WRITE_BACK_ALLOC      BIT6
36#define TTBR_RGN_INNER_WRITE_THROUGH         BIT0
37#define TTBR_RGN_INNER_WRITE_BACK_NO_ALLOC   (BIT0|BIT6)
38
39#define TTBR_WRITE_THROUGH_NO_ALLOC     ( TTBR_RGN_OUTER_WRITE_BACK_ALLOC | TTBR_RGN_INNER_WRITE_BACK_ALLOC )
40#define TTBR_WRITE_BACK_NO_ALLOC        ( TTBR_RGN_OUTER_WRITE_BACK_NO_ALLOC | TTBR_RGN_INNER_WRITE_BACK_NO_ALLOC )
41#define TTBR_NON_CACHEABLE              ( TTBR_RGN_OUTER_NON_CACHEABLE | TTBR_RGN_INNER_NON_CACHEABLE )
42#define TTBR_WRITE_BACK_ALLOC           ( TTBR_RGN_OUTER_WRITE_BACK_ALLOC | TTBR_RGN_INNER_WRITE_BACK_ALLOC )
43
44
45#define TRANSLATION_TABLE_SECTION_COUNT                 4096
46#define TRANSLATION_TABLE_SECTION_SIZE                  (sizeof(UINT32) * TRANSLATION_TABLE_SECTION_COUNT)
47#define TRANSLATION_TABLE_SECTION_ALIGNMENT             (sizeof(UINT32) * TRANSLATION_TABLE_SECTION_COUNT)
48#define TRANSLATION_TABLE_SECTION_ALIGNMENT_MASK        (TRANSLATION_TABLE_SECTION_ALIGNMENT - 1)
49
50#define TRANSLATION_TABLE_PAGE_COUNT                 256
51#define TRANSLATION_TABLE_PAGE_SIZE                  (sizeof(UINT32) * TRANSLATION_TABLE_PAGE_COUNT)
52#define TRANSLATION_TABLE_PAGE_ALIGNMENT             (sizeof(UINT32) * TRANSLATION_TABLE_PAGE_COUNT)
53#define TRANSLATION_TABLE_PAGE_ALIGNMENT_MASK        (TRANSLATION_TABLE_PAGE_ALIGNMENT - 1)
54
55#define TRANSLATION_TABLE_ENTRY_FOR_VIRTUAL_ADDRESS(table, address) ((UINT32 *)(table) + (((UINTN)(address)) >> 20))
56
57// Translation table descriptor types
58#define TT_DESCRIPTOR_SECTION_TYPE_MASK         ((1UL << 18) | (3UL << 0))
59#define TT_DESCRIPTOR_SECTION_TYPE_FAULT        (0UL << 0)
60#define TT_DESCRIPTOR_SECTION_TYPE_PAGE_TABLE   (1UL << 0)
61#define TT_DESCRIPTOR_SECTION_TYPE_SECTION      ((0UL << 18) | (2UL << 0))
62#define TT_DESCRIPTOR_SECTION_TYPE_SUPERSECTION ((1UL << 18) | (2UL << 0))
63#define TT_DESCRIPTOR_SECTION_TYPE_IS_PAGE_TABLE(Desc) (((Desc) & 3UL) == TT_DESCRIPTOR_SECTION_TYPE_PAGE_TABLE)
64
65// Translation table descriptor types
66#define TT_DESCRIPTOR_PAGE_TYPE_MASK         (3UL << 0)
67#define TT_DESCRIPTOR_PAGE_TYPE_FAULT        (0UL << 0)
68#define TT_DESCRIPTOR_PAGE_TYPE_PAGE         (2UL << 0)
69#define TT_DESCRIPTOR_PAGE_TYPE_PAGE_XN      (3UL << 0)
70#define TT_DESCRIPTOR_PAGE_TYPE_LARGEPAGE    (1UL << 0)
71
72// Section descriptor definitions
73#define TT_DESCRIPTOR_SECTION_SIZE                              (0x00100000)
74
75#define TT_DESCRIPTOR_SECTION_NS_MASK                           (1UL << 19)
76#define TT_DESCRIPTOR_SECTION_NS_SECURE                         (0UL << 19)
77#define TT_DESCRIPTOR_SECTION_NS_NON_SECURE                     (1UL << 19)
78
79#define TT_DESCRIPTOR_SECTION_NG_MASK                           (1UL << 17)
80#define TT_DESCRIPTOR_SECTION_NG_GLOBAL                         (0UL << 17)
81#define TT_DESCRIPTOR_SECTION_NG_LOCAL                          (1UL << 17)
82
83#define TT_DESCRIPTOR_PAGE_NG_MASK                              (1UL << 11)
84#define TT_DESCRIPTOR_PAGE_NG_GLOBAL                            (0UL << 11)
85#define TT_DESCRIPTOR_PAGE_NG_LOCAL                             (1UL << 11)
86
87#define TT_DESCRIPTOR_SECTION_S_MASK                            (1UL << 16)
88#define TT_DESCRIPTOR_SECTION_S_NOT_SHARED                      (0UL << 16)
89#define TT_DESCRIPTOR_SECTION_S_SHARED                          (1UL << 16)
90
91#define TT_DESCRIPTOR_PAGE_S_MASK                               (1UL << 10)
92#define TT_DESCRIPTOR_PAGE_S_NOT_SHARED                         (0UL << 10)
93#define TT_DESCRIPTOR_PAGE_S_SHARED                             (1UL << 10)
94
95#define TT_DESCRIPTOR_SECTION_AP_MASK                           ((1UL << 15) | (3UL << 10))
96#define TT_DESCRIPTOR_SECTION_AP_NO_NO                          ((0UL << 15) | (0UL << 10))
97#define TT_DESCRIPTOR_SECTION_AP_RW_NO                          ((0UL << 15) | (1UL << 10))
98#define TT_DESCRIPTOR_SECTION_AP_RW_RO                          ((0UL << 15) | (2UL << 10))
99#define TT_DESCRIPTOR_SECTION_AP_RW_RW                          ((0UL << 15) | (3UL << 10))
100#define TT_DESCRIPTOR_SECTION_AP_RO_NO                          ((1UL << 15) | (1UL << 10))
101#define TT_DESCRIPTOR_SECTION_AP_RO_RO                          ((1UL << 15) | (3UL << 10))
102
103#define TT_DESCRIPTOR_PAGE_AP_MASK                              ((1UL << 9) | (3UL << 4))
104#define TT_DESCRIPTOR_PAGE_AP_NO_NO                             ((0UL << 9) | (0UL << 4))
105#define TT_DESCRIPTOR_PAGE_AP_RW_NO                             ((0UL << 9) | (1UL << 4))
106#define TT_DESCRIPTOR_PAGE_AP_RW_RO                             ((0UL << 9) | (2UL << 4))
107#define TT_DESCRIPTOR_PAGE_AP_RW_RW                             ((0UL << 9) | (3UL << 4))
108#define TT_DESCRIPTOR_PAGE_AP_RO_NO                             ((1UL << 9) | (1UL << 4))
109#define TT_DESCRIPTOR_PAGE_AP_RO_RO                             ((1UL << 9) | (3UL << 4))
110
111#define TT_DESCRIPTOR_SECTION_XN_MASK                           (0x1UL << 4)
112#define TT_DESCRIPTOR_PAGE_XN_MASK                              (0x1UL << 0)
113#define TT_DESCRIPTOR_LARGEPAGE_XN_MASK                         (0x1UL << 15)
114
115#define TT_DESCRIPTOR_SECTION_CACHE_POLICY_MASK                   ((3UL << 12) | (1UL << 3) | (1UL << 2))
116#define TT_DESCRIPTOR_SECTION_CACHEABLE_MASK                      (1UL << 3)
117#define TT_DESCRIPTOR_SECTION_CACHE_POLICY_STRONGLY_ORDERED       ((0UL << 12) | (0UL << 3) | (0UL << 2))
118#define TT_DESCRIPTOR_SECTION_CACHE_POLICY_SHAREABLE_DEVICE       ((0UL << 12) | (0UL << 3) | (1UL << 2))
119#define TT_DESCRIPTOR_SECTION_CACHE_POLICY_WRITE_THROUGH_NO_ALLOC ((0UL << 12) | (1UL << 3) | (0UL << 2))
120#define TT_DESCRIPTOR_SECTION_CACHE_POLICY_WRITE_BACK_NO_ALLOC    ((0UL << 12) | (1UL << 3) | (1UL << 2))
121#define TT_DESCRIPTOR_SECTION_CACHE_POLICY_NON_CACHEABLE          ((1UL << 12) | (0UL << 3) | (0UL << 2))
122#define TT_DESCRIPTOR_SECTION_CACHE_POLICY_WRITE_BACK_ALLOC       ((1UL << 12) | (1UL << 3) | (1UL << 2))
123#define TT_DESCRIPTOR_SECTION_CACHE_POLICY_NON_SHAREABLE_DEVICE   ((2UL << 12) | (0UL << 3) | (0UL << 2))
124
125#define TT_DESCRIPTOR_PAGE_SIZE                               (0x00001000)
126
127#define TT_DESCRIPTOR_PAGE_CACHE_POLICY_MASK                   ((3UL << 6) | (1UL << 3) | (1UL << 2))
128#define TT_DESCRIPTOR_PAGE_CACHEABLE_MASK                       (1UL << 3)
129#define TT_DESCRIPTOR_PAGE_CACHE_POLICY_STRONGLY_ORDERED       ((0UL << 6) | (0UL << 3) | (0UL << 2))
130#define TT_DESCRIPTOR_PAGE_CACHE_POLICY_SHAREABLE_DEVICE       ((0UL << 6) | (0UL << 3) | (1UL << 2))
131#define TT_DESCRIPTOR_PAGE_CACHE_POLICY_WRITE_THROUGH_NO_ALLOC ((0UL << 6) | (1UL << 3) | (0UL << 2))
132#define TT_DESCRIPTOR_PAGE_CACHE_POLICY_WRITE_BACK_NO_ALLOC    ((0UL << 6) | (1UL << 3) | (1UL << 2))
133#define TT_DESCRIPTOR_PAGE_CACHE_POLICY_NON_CACHEABLE          ((1UL << 6) | (0UL << 3) | (0UL << 2))
134#define TT_DESCRIPTOR_PAGE_CACHE_POLICY_WRITE_BACK_ALLOC       ((1UL << 6) | (1UL << 3) | (1UL << 2))
135#define TT_DESCRIPTOR_PAGE_CACHE_POLICY_NON_SHAREABLE_DEVICE   ((2UL << 6) | (0UL << 3) | (0UL << 2))
136
137#define TT_DESCRIPTOR_LARGEPAGE_CACHE_POLICY_MASK                   ((3UL << 12) | (1UL << 3) | (1UL << 2))
138#define TT_DESCRIPTOR_LARGEPAGE_CACHE_POLICY_STRONGLY_ORDERED       ((0UL << 12) | (0UL << 3) | (0UL << 2))
139#define TT_DESCRIPTOR_LARGEPAGE_CACHE_POLICY_SHAREABLE_DEVICE       ((0UL << 12) | (0UL << 3) | (1UL << 2))
140#define TT_DESCRIPTOR_LARGEPAGE_CACHE_POLICY_WRITE_THROUGH_NO_ALLOC ((0UL << 12) | (1UL << 3) | (0UL << 2))
141#define TT_DESCRIPTOR_LARGEPAGE_CACHE_POLICY_WRITE_BACK_NO_ALLOC    ((0UL << 12) | (1UL << 3) | (1UL << 2))
142#define TT_DESCRIPTOR_LARGEPAGE_CACHE_POLICY_NON_CACHEABLE          ((1UL << 12) | (0UL << 3) | (0UL << 2))
143#define TT_DESCRIPTOR_LARGEPAGE_CACHE_POLICY_WRITE_BACK_ALLOC       ((1UL << 12) | (1UL << 3) | (1UL << 2))
144#define TT_DESCRIPTOR_LARGEPAGE_CACHE_POLICY_NON_SHAREABLE_DEVICE   ((2UL << 12) | (0UL << 3) | (0UL << 2))
145
146#define TT_DESCRIPTOR_CONVERT_TO_PAGE_AP(Desc)                  ((((Desc) & TT_DESCRIPTOR_SECTION_AP_MASK) >> 6) & TT_DESCRIPTOR_PAGE_AP_MASK)
147#define TT_DESCRIPTOR_CONVERT_TO_PAGE_NG(Desc)                  ((((Desc) & TT_DESCRIPTOR_SECTION_NG_MASK) >> 6) & TT_DESCRIPTOR_PAGE_NG_MASK)
148#define TT_DESCRIPTOR_CONVERT_TO_PAGE_S(Desc)                  ((((Desc) & TT_DESCRIPTOR_SECTION_S_MASK) >> 6) & TT_DESCRIPTOR_PAGE_S_MASK)
149#define TT_DESCRIPTOR_CONVERT_TO_PAGE_XN(Desc,IsLargePage)      ((IsLargePage)? \
150                                                                    ((((Desc) & TT_DESCRIPTOR_SECTION_XN_MASK) >> 4) & TT_DESCRIPTOR_LARGEPAGE_XN_MASK):    \
151                                                                    ((((Desc) & TT_DESCRIPTOR_SECTION_XN_MASK) << 11) & TT_DESCRIPTOR_PAGE_XN_MASK))
152#define TT_DESCRIPTOR_CONVERT_TO_PAGE_CACHE_POLICY(Desc,IsLargePage)      (IsLargePage? \
153                                                                    (((Desc) & TT_DESCRIPTOR_SECTION_CACHE_POLICY_MASK) & TT_DESCRIPTOR_LARGEPAGE_CACHE_POLICY_MASK): \
154                                                                    (((((Desc) & (0x3 << 12)) >> 6) | (Desc & (0x3 << 2)))))
155
156#define TT_DESCRIPTOR_CONVERT_TO_SECTION_AP(Desc)                  ((((Desc) & TT_DESCRIPTOR_PAGE_AP_MASK) << 6) & TT_DESCRIPTOR_SECTION_AP_MASK)
157
158#define TT_DESCRIPTOR_CONVERT_TO_SECTION_CACHE_POLICY(Desc,IsLargePage)      (IsLargePage? \
159                                                                    (((Desc) & TT_DESCRIPTOR_LARGEPAGE_CACHE_POLICY_MASK) & TT_DESCRIPTOR_SECTION_CACHE_POLICY_MASK): \
160                                                                    (((((Desc) & (0x3 << 6)) << 6) | (Desc & (0x3 << 2)))))
161
162
163#define TT_DESCRIPTOR_SECTION_DOMAIN_MASK                       (0x0FUL << 5)
164#define TT_DESCRIPTOR_SECTION_DOMAIN(a)                         (((a) & 0x0FUL) << 5)
165
166#define TT_DESCRIPTOR_SECTION_BASE_ADDRESS_MASK                 (0xFFF00000)
167#define TT_DESCRIPTOR_SECTION_PAGETABLE_ADDRESS_MASK            (0xFFFFFC00)
168#define TT_DESCRIPTOR_SECTION_BASE_ADDRESS(a)                   ((a) & TT_DESCRIPTOR_SECTION_BASE_ADDRESS_MASK)
169#define TT_DESCRIPTOR_SECTION_BASE_SHIFT                        20
170
171#define TT_DESCRIPTOR_PAGE_BASE_ADDRESS_MASK                 (0xFFFFF000)
172#define TT_DESCRIPTOR_PAGE_INDEX_MASK                        (0x000FF000)
173#define TT_DESCRIPTOR_PAGE_BASE_ADDRESS(a)                   ((a) & TT_DESCRIPTOR_PAGE_BASE_ADDRESS_MASK)
174#define TT_DESCRIPTOR_PAGE_BASE_SHIFT                        12
175
176#define TT_DESCRIPTOR_SECTION_WRITE_BACK(Secure)       (TT_DESCRIPTOR_SECTION_TYPE_SECTION                                                           | \
177                                                        ((Secure) ?  TT_DESCRIPTOR_SECTION_NS_SECURE : TT_DESCRIPTOR_SECTION_NS_NON_SECURE )    | \
178                                                                     TT_DESCRIPTOR_SECTION_NG_GLOBAL                         | \
179                                                                     TT_DESCRIPTOR_SECTION_S_NOT_SHARED                      | \
180                                                                     TT_DESCRIPTOR_SECTION_DOMAIN(0)                         | \
181                                                                     TT_DESCRIPTOR_SECTION_AP_RW_RW                          | \
182                                                                     TT_DESCRIPTOR_SECTION_CACHE_POLICY_WRITE_BACK_ALLOC)
183#define TT_DESCRIPTOR_SECTION_WRITE_THROUGH(Secure)    (TT_DESCRIPTOR_SECTION_TYPE_SECTION                                                           | \
184                                                        ((Secure) ?  TT_DESCRIPTOR_SECTION_NS_SECURE : TT_DESCRIPTOR_SECTION_NS_NON_SECURE )    | \
185                                                                     TT_DESCRIPTOR_SECTION_NG_GLOBAL                         | \
186                                                                     TT_DESCRIPTOR_SECTION_S_NOT_SHARED                      | \
187                                                                     TT_DESCRIPTOR_SECTION_DOMAIN(0)                         | \
188                                                                     TT_DESCRIPTOR_SECTION_AP_RW_RW                          | \
189                                                                     TT_DESCRIPTOR_SECTION_CACHE_POLICY_WRITE_THROUGH_NO_ALLOC)
190#define TT_DESCRIPTOR_SECTION_DEVICE(Secure)           (TT_DESCRIPTOR_SECTION_TYPE_SECTION                                                           | \
191                                                        ((Secure) ?  TT_DESCRIPTOR_SECTION_NS_SECURE : TT_DESCRIPTOR_SECTION_NS_NON_SECURE )    | \
192                                                                     TT_DESCRIPTOR_SECTION_NG_GLOBAL                         | \
193                                                                     TT_DESCRIPTOR_SECTION_S_NOT_SHARED                      | \
194                                                                     TT_DESCRIPTOR_SECTION_DOMAIN(0)                         | \
195                                                                     TT_DESCRIPTOR_SECTION_AP_RW_RW                          | \
196                                                                     TT_DESCRIPTOR_SECTION_CACHE_POLICY_SHAREABLE_DEVICE)
197#define TT_DESCRIPTOR_SECTION_UNCACHED(Secure)         (TT_DESCRIPTOR_SECTION_TYPE_SECTION                                                           | \
198                                                        ((Secure) ?  TT_DESCRIPTOR_SECTION_NS_SECURE : TT_DESCRIPTOR_SECTION_NS_NON_SECURE )    | \
199                                                                     TT_DESCRIPTOR_SECTION_NG_GLOBAL                         | \
200                                                                     TT_DESCRIPTOR_SECTION_S_NOT_SHARED                      | \
201                                                                     TT_DESCRIPTOR_SECTION_DOMAIN(0)                         | \
202                                                                     TT_DESCRIPTOR_SECTION_AP_RW_RW                          | \
203                                                                     TT_DESCRIPTOR_SECTION_CACHE_POLICY_NON_CACHEABLE)
204
205#define TT_DESCRIPTOR_PAGE_WRITE_BACK              (TT_DESCRIPTOR_PAGE_TYPE_PAGE                                                           | \
206                                                        TT_DESCRIPTOR_PAGE_NG_GLOBAL                                                      | \
207                                                        TT_DESCRIPTOR_PAGE_S_NOT_SHARED                                                   | \
208                                                        TT_DESCRIPTOR_PAGE_AP_RW_RW                                                       | \
209                                                        TT_DESCRIPTOR_PAGE_CACHE_POLICY_WRITE_BACK_ALLOC)
210#define TT_DESCRIPTOR_PAGE_WRITE_THROUGH           (TT_DESCRIPTOR_PAGE_TYPE_PAGE                                                           | \
211                                                        TT_DESCRIPTOR_PAGE_NG_GLOBAL                                                      | \
212                                                        TT_DESCRIPTOR_PAGE_S_NOT_SHARED                                                   | \
213                                                        TT_DESCRIPTOR_PAGE_AP_RW_RW                                                       | \
214                                                        TT_DESCRIPTOR_PAGE_CACHE_POLICY_WRITE_THROUGH_NO_ALLOC)
215#define TT_DESCRIPTOR_PAGE_DEVICE                  (TT_DESCRIPTOR_PAGE_TYPE_PAGE                                                           | \
216                                                        TT_DESCRIPTOR_PAGE_NG_GLOBAL                                                      | \
217                                                        TT_DESCRIPTOR_PAGE_S_NOT_SHARED                                                   | \
218                                                        TT_DESCRIPTOR_PAGE_AP_RW_RW                                                       | \
219                                                        TT_DESCRIPTOR_PAGE_CACHE_POLICY_SHAREABLE_DEVICE)
220#define TT_DESCRIPTOR_PAGE_UNCACHED                (TT_DESCRIPTOR_PAGE_TYPE_PAGE                                                           | \
221                                                        TT_DESCRIPTOR_PAGE_NG_GLOBAL                                                      | \
222                                                        TT_DESCRIPTOR_PAGE_S_NOT_SHARED                                                   | \
223                                                        TT_DESCRIPTOR_PAGE_AP_RW_RW                                                       | \
224                                                        TT_DESCRIPTOR_PAGE_CACHE_POLICY_NON_CACHEABLE)
225
226// Cortex A9 feature bit definitions
227#define A9_FEATURE_PARITY  (1<<9)
228#define A9_FEATURE_AOW     (1<<8)
229#define A9_FEATURE_EXCL    (1<<7)
230#define A9_FEATURE_SMP     (1<<6)
231#define A9_FEATURE_FOZ     (1<<3)
232#define A9_FEATURE_DPREF   (1<<2)
233#define A9_FEATURE_HINT    (1<<1)
234#define A9_FEATURE_FWD     (1<<0)
235
236// SCU register offsets & masks
237#define SCU_CONTROL_OFFSET       0x0
238#define SCU_CONFIG_OFFSET        0x4
239#define SCU_INVALL_OFFSET        0xC
240#define SCU_FILT_START_OFFSET    0x40
241#define SCU_FILT_END_OFFSET      0x44
242#define SCU_SACR_OFFSET          0x50
243#define SCU_SSACR_OFFSET         0x54
244
245#define SMP_GIC_CPUIF_BASE       0x100
246#define SMP_GIC_DIST_BASE        0x1000
247
248// CPACR - Coprocessor Access Control Register defintions
249#define CPACR_CP_DENIED(cp)     0x00
250#define CPACR_CP_PRIV(cp)       ((0x1 << ((cp) << 1)) & 0x0FFFFFFF)
251#define CPACR_CP_FULL(cp)       ((0x3 << ((cp) << 1)) & 0x0FFFFFFF)
252#define CPACR_ASEDIS            (1 << 31)
253#define CPACR_D32DIS            (1 << 30)
254#define CPACR_CP_FULL_ACCESS    0x0FFFFFFF
255
256// NSACR - Non-Secure Access Control Register defintions
257#define NSACR_CP(cp)            ((1 << (cp)) & 0x3FFF)
258#define NSACR_NSD32DIS          (1 << 14)
259#define NSACR_NSASEDIS          (1 << 15)
260#define NSACR_PLE               (1 << 16)
261#define NSACR_TL                (1 << 17)
262#define NSACR_NS_SMP            (1 << 18)
263#define NSACR_RFR               (1 << 19)
264
265// SCR - Secure Configuration Register defintions
266#define SCR_NS                  (1 << 0)
267#define SCR_IRQ                 (1 << 1)
268#define SCR_FIQ                 (1 << 2)
269#define SCR_EA                  (1 << 3)
270#define SCR_FW                  (1 << 4)
271#define SCR_AW                  (1 << 5)
272
273VOID
274EFIAPI
275ArmEnableSWPInstruction (
276  VOID
277  );
278
279VOID
280EFIAPI
281ArmWriteNsacr (
282  IN  UINT32   SetWayFormat
283  );
284
285VOID
286EFIAPI
287ArmWriteScr (
288  IN  UINT32   SetWayFormat
289  );
290
291VOID
292EFIAPI
293ArmWriteVMBar (
294  IN  UINT32   SetWayFormat
295  );
296
297VOID
298EFIAPI
299ArmWriteVBar (
300  IN  UINT32   SetWayFormat
301  );
302
303UINT32
304EFIAPI
305ArmReadVBar (
306  VOID
307  );
308
309VOID
310EFIAPI
311ArmWriteCPACR (
312  IN  UINT32   SetWayFormat
313  );
314
315VOID
316EFIAPI
317ArmEnableVFP (
318  VOID
319  );
320
321VOID
322EFIAPI
323ArmCallWFI (
324  VOID
325  );
326
327VOID
328EFIAPI
329ArmInvalidScu (
330  VOID
331  );
332
333
334UINTN
335EFIAPI
336ArmGetScuBaseAddress (
337  VOID
338  );
339
340UINT32
341EFIAPI
342ArmIsScuEnable(
343  VOID
344  );
345
346VOID
347EFIAPI
348ArmWriteAuxCr (
349  IN  UINT32    Bit
350  );
351
352UINT32
353EFIAPI
354ArmReadAuxCr (
355  VOID
356  );
357
358VOID
359EFIAPI
360ArmSetAuxCrBit (
361  IN  UINT32    Bits
362  );
363
364VOID
365EFIAPI
366ArmSetupSmpNonSecure (
367  IN  UINTN                     CoreId
368  );
369
370
371UINTN
372EFIAPI
373ArmReadCbar(
374VOID
375);
376
377VOID
378EFIAPI
379ArmInvalidateInstructionAndDataTlb(
380VOID
381);
382
383
384UINTN
385EFIAPI
386ArmReadMpidr(
387VOID
388);
389
390
391#endif // __ARM_V7_H__
392