]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPkg/Include/Chipset/AArch64.h
ArmPkg: Add Cortex-A72 CPU type
[mirror_edk2.git] / ArmPkg / Include / Chipset / AArch64.h
CommitLineData
25402f5d
HL
1/** @file\r
2\r
3 Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
7aec2926 4 Copyright (c) 2011 - 2015, ARM Ltd. All rights reserved.<BR>\r
25402f5d
HL
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#ifndef __AARCH64_H__\r
17#define __AARCH64_H__\r
18\r
19#include <Chipset/AArch64Mmu.h>\r
20#include <Chipset/ArmArchTimer.h>\r
21\r
22// ARM Interrupt ID in Exception Table\r
23#define ARM_ARCH_EXCEPTION_IRQ EXCEPT_AARCH64_IRQ\r
24\r
25// CPACR - Coprocessor Access Control Register definitions\r
26#define CPACR_TTA_EN (1UL << 28)\r
27#define CPACR_FPEN_EL1 (1UL << 20)\r
28#define CPACR_FPEN_FULL (3UL << 20)\r
29#define CPACR_CP_FULL_ACCESS 0x300000\r
30\r
31// Coprocessor Trap Register (CPTR)\r
32#define AARCH64_CPTR_TFP (1 << 10)\r
33\r
34// ID_AA64PFR0 - AArch64 Processor Feature Register 0 definitions\r
35#define AARCH64_PFR0_FP (0xF << 16)\r
27331bff 36#define AARCH64_PFR0_GIC (0xF << 24)\r
25402f5d 37\r
25402f5d
HL
38// SCR - Secure Configuration Register definitions\r
39#define SCR_NS (1 << 0)\r
40#define SCR_IRQ (1 << 1)\r
41#define SCR_FIQ (1 << 2)\r
42#define SCR_EA (1 << 3)\r
43#define SCR_FW (1 << 4)\r
44#define SCR_AW (1 << 5)\r
45\r
46// MIDR - Main ID Register definitions\r
7aec2926 47#define ARM_CPU_TYPE_SHIFT 4\r
25402f5d
HL
48#define ARM_CPU_TYPE_MASK 0xFFF\r
49#define ARM_CPU_TYPE_AEMv8 0xD0F\r
b7dd4dbd
OM
50#define ARM_CPU_TYPE_A53 0xD03\r
51#define ARM_CPU_TYPE_A57 0xD07\r
25654e24 52#define ARM_CPU_TYPE_A72 0xD08\r
25402f5d
HL
53#define ARM_CPU_TYPE_A15 0xC0F\r
54#define ARM_CPU_TYPE_A9 0xC09\r
7aec2926 55#define ARM_CPU_TYPE_A7 0xC07\r
25402f5d
HL
56#define ARM_CPU_TYPE_A5 0xC05\r
57\r
b7dd4dbd
OM
58#define ARM_CPU_REV_MASK ((0xF << 20) | (0xF) )\r
59#define ARM_CPU_REV(rn, pn) ((((rn) & 0xF) << 20) | ((pn) & 0xF))\r
60\r
25402f5d 61// Hypervisor Configuration Register\r
6a44c227
OM
62#define ARM_HCR_FMO BIT3\r
63#define ARM_HCR_IMO BIT4\r
64#define ARM_HCR_AMO BIT5\r
65#define ARM_HCR_TSC BIT19\r
66#define ARM_HCR_TGE BIT27\r
25402f5d 67\r
f3c5066f
OM
68// Exception Syndrome Register\r
69#define AARCH64_ESR_EC(Ecr) ((0x3F << 26) & (Ecr))\r
70#define AARCH64_ESR_ISS(Ecr) ((0x1FFFFFF) & (Ecr))\r
71\r
72#define AARCH64_ESR_EC_SMC32 (0x13 << 26)\r
73#define AARCH64_ESR_EC_SMC64 (0x17 << 26)\r
74\r
25402f5d
HL
75// AArch64 Exception Level\r
76#define AARCH64_EL3 0xC\r
77#define AARCH64_EL2 0x8\r
78#define AARCH64_EL1 0x4\r
79\r
7e119c67
OM
80// Saved Program Status Register definitions\r
81#define SPSR_A BIT8\r
82#define SPSR_I BIT7\r
83#define SPSR_F BIT6\r
84\r
85#define SPSR_AARCH32 BIT4\r
86\r
87#define SPSR_AARCH32_MODE_USER 0x0\r
88#define SPSR_AARCH32_MODE_FIQ 0x1\r
89#define SPSR_AARCH32_MODE_IRQ 0x2\r
90#define SPSR_AARCH32_MODE_SVC 0x3\r
91#define SPSR_AARCH32_MODE_ABORT 0x7\r
92#define SPSR_AARCH32_MODE_UNDEF 0xB\r
93#define SPSR_AARCH32_MODE_SYS 0xF\r
94\r
95// Counter-timer Hypervisor Control register definitions\r
96#define CNTHCTL_EL2_EL1PCTEN BIT0\r
97#define CNTHCTL_EL2_EL1PCEN BIT1\r
98\r
25402f5d
HL
99#define ARM_VECTOR_TABLE_ALIGNMENT ((1 << 11)-1)\r
100\r
d855b261
MR
101// Vector table offset definitions\r
102#define ARM_VECTOR_CUR_SP0_SYNC 0x000\r
103#define ARM_VECTOR_CUR_SP0_IRQ 0x080\r
104#define ARM_VECTOR_CUR_SP0_FIQ 0x100\r
105#define ARM_VECTOR_CUR_SP0_SERR 0x180\r
106\r
107#define ARM_VECTOR_CUR_SPx_SYNC 0x200\r
108#define ARM_VECTOR_CUR_SPx_IRQ 0x280\r
109#define ARM_VECTOR_CUR_SPx_FIQ 0x300\r
110#define ARM_VECTOR_CUR_SPx_SERR 0x380\r
111\r
112#define ARM_VECTOR_LOW_A64_SYNC 0x400\r
113#define ARM_VECTOR_LOW_A64_IRQ 0x480\r
114#define ARM_VECTOR_LOW_A64_FIQ 0x500\r
115#define ARM_VECTOR_LOW_A64_SERR 0x580\r
116\r
117#define ARM_VECTOR_LOW_A32_SYNC 0x600\r
118#define ARM_VECTOR_LOW_A32_IRQ 0x680\r
119#define ARM_VECTOR_LOW_A32_FIQ 0x700\r
120#define ARM_VECTOR_LOW_A32_SERR 0x780\r
121\r
122#define VECTOR_BASE(tbl) \\r
e7e12013 123 .section .text.##tbl##,"ax"; \\r
d855b261 124 .align 11; \\r
e7e12013 125 .org 0x0; \\r
d855b261
MR
126 GCC_ASM_EXPORT(tbl); \\r
127 ASM_PFX(tbl): \\r
128\r
129#define VECTOR_ENTRY(tbl, off) \\r
e7e12013 130 .org off\r
d855b261
MR
131\r
132#define VECTOR_END(tbl) \\r
e7e12013
AB
133 .org 0x800; \\r
134 .previous\r
d855b261 135\r
25402f5d
HL
136VOID\r
137EFIAPI\r
138ArmEnableSWPInstruction (\r
139 VOID\r
140 );\r
141\r
142UINTN\r
143EFIAPI\r
144ArmReadCbar (\r
145 VOID\r
146 );\r
147\r
148UINTN\r
149EFIAPI\r
150ArmReadTpidrurw (\r
151 VOID\r
152 );\r
153\r
154VOID\r
155EFIAPI\r
156ArmWriteTpidrurw (\r
157 UINTN Value\r
158 );\r
159\r
25402f5d
HL
160UINTN\r
161EFIAPI\r
162ArmGetTCR (\r
163 VOID\r
164 );\r
165\r
166VOID\r
167EFIAPI\r
168ArmSetTCR (\r
169 UINTN Value\r
170 );\r
171\r
172UINTN\r
173EFIAPI\r
174ArmGetMAIR (\r
175 VOID\r
176 );\r
177\r
178VOID\r
179EFIAPI\r
180ArmSetMAIR (\r
181 UINTN Value\r
182 );\r
183\r
184VOID\r
185EFIAPI\r
186ArmDisableAlignmentCheck (\r
187 VOID\r
188 );\r
189\r
25402f5d
HL
190VOID\r
191EFIAPI\r
192ArmEnableAlignmentCheck (\r
193 VOID\r
194 );\r
195\r
196VOID\r
197EFIAPI\r
198ArmDisableAllExceptions (\r
199 VOID\r
200 );\r
201\r
202VOID\r
203ArmWriteHcr (\r
204 IN UINTN Hcr\r
205 );\r
206\r
d2bb61a2
EC
207UINTN\r
208ArmReadHcr (\r
209 VOID\r
210 );\r
211\r
25402f5d
HL
212UINTN\r
213ArmReadCurrentEL (\r
214 VOID\r
215 );\r
216\r
217UINT64\r
218PageAttributeToGcdAttribute (\r
219 IN UINT64 PageAttributes\r
220 );\r
221\r
d6dc67ba
OM
222UINTN\r
223ArmWriteCptr (\r
224 IN UINT64 Cptr\r
225 );\r
226\r
25402f5d 227#endif // __AARCH64_H__\r