]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/RTSM.c
ArmPlatformPkg: remove ArmPlatformInitializeSystemMemory
[mirror_edk2.git] / ArmPlatformPkg / ArmVExpressPkg / Library / ArmVExpressLibRTSM / RTSM.c
CommitLineData
1e57a462 1/** @file\r
2*\r
27be3601 3* Copyright (c) 2011-2013, ARM Limited. All rights reserved.\r
1e57a462 4*\r
27be3601
HL
5* This program and the accompanying materials\r
6* are licensed and made available under the terms and conditions of the BSD License\r
7* which accompanies this distribution. The full text of the license may be found at\r
8* http://opensource.org/licenses/bsd-license.php\r
9*\r
10* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
1e57a462 12*\r
13**/\r
14\r
15#include <Library/IoLib.h>\r
16#include <Library/ArmPlatformLib.h>\r
17#include <Library/DebugLib.h>\r
18#include <Library/PcdLib.h>\r
19\r
20#include <Ppi/ArmMpCoreInfo.h>\r
21\r
22#include <ArmPlatform.h>\r
23\r
4cebe045
AB
24/**\r
25 Return the core per cluster. The method may differ per core type\r
26\r
27 This function might be called from assembler before any stack is set.\r
28\r
29 @return Return the core count per cluster\r
30\r
31**/\r
32UINTN\r
33ArmGetCpuCountPerCluster (\r
34 VOID\r
35 );\r
36\r
1e57a462 37ARM_CORE_INFO mVersatileExpressMpCoreInfoTable[] = {\r
38 {\r
39 // Cluster 0, Core 0\r
40 0x0, 0x0,\r
41\r
42 // MP Core MailBox Set/Get/Clear Addresses and Clear Value\r
43 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_REG,\r
44 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_SET_REG,\r
45 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_CLR_REG,\r
46 (UINT64)0xFFFFFFFF\r
47 },\r
48 {\r
49 // Cluster 0, Core 1\r
50 0x0, 0x1,\r
51\r
52 // MP Core MailBox Set/Get/Clear Addresses and Clear Value\r
53 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_REG,\r
54 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_SET_REG,\r
55 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_CLR_REG,\r
56 (UINT64)0xFFFFFFFF\r
57 },\r
58 {\r
59 // Cluster 0, Core 2\r
60 0x0, 0x2,\r
61\r
62 // MP Core MailBox Set/Get/Clear Addresses and Clear Value\r
63 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_REG,\r
64 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_SET_REG,\r
65 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_CLR_REG,\r
66 (UINT64)0xFFFFFFFF\r
67 },\r
68 {\r
69 // Cluster 0, Core 3\r
70 0x0, 0x3,\r
71\r
27be3601
HL
72 // MP Core MailBox Set/Get/Clear Addresses and Clear Value\r
73 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_REG,\r
74 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_SET_REG,\r
75 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_CLR_REG,\r
76 (UINT64)0xFFFFFFFF\r
77 },\r
78 {\r
79 // Cluster 1, Core 0\r
80 0x1, 0x0,\r
81\r
82 // MP Core MailBox Set/Get/Clear Addresses and Clear Value\r
83 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_REG,\r
84 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_SET_REG,\r
85 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_CLR_REG,\r
86 (UINT64)0xFFFFFFFF\r
87 },\r
88 {\r
89 // Cluster 1, Core 1\r
90 0x1, 0x1,\r
91\r
92 // MP Core MailBox Set/Get/Clear Addresses and Clear Value\r
93 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_REG,\r
94 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_SET_REG,\r
95 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_CLR_REG,\r
96 (UINT64)0xFFFFFFFF\r
97 },\r
98 {\r
99 // Cluster 1, Core 2\r
100 0x1, 0x2,\r
101\r
102 // MP Core MailBox Set/Get/Clear Addresses and Clear Value\r
103 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_REG,\r
104 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_SET_REG,\r
105 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_CLR_REG,\r
106 (UINT64)0xFFFFFFFF\r
107 },\r
108 {\r
109 // Cluster 1, Core 3\r
110 0x1, 0x3,\r
111\r
1e57a462 112 // MP Core MailBox Set/Get/Clear Addresses and Clear Value\r
113 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_REG,\r
114 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_SET_REG,\r
115 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_CLR_REG,\r
116 (UINT64)0xFFFFFFFF\r
117 }\r
118};\r
119\r
120/**\r
121 Return the current Boot Mode\r
122\r
123 This function returns the boot reason on the platform\r
124\r
125 @return Return the current Boot Mode of the platform\r
126\r
127**/\r
128EFI_BOOT_MODE\r
129ArmPlatformGetBootMode (\r
130 VOID\r
131 )\r
132{\r
133 return BOOT_WITH_FULL_CONFIGURATION;\r
134}\r
135\r
136/**\r
137 Initialize controllers that must setup in the normal world\r
138\r
139 This function is called by the ArmPlatformPkg/Pei or ArmPlatformPkg/Pei/PlatformPeim\r
140 in the PEI phase.\r
141\r
142**/\r
143RETURN_STATUS\r
144ArmPlatformInitialize (\r
145 IN UINTN MpId\r
146 )\r
147{\r
bebda7ce 148 if (!ArmPlatformIsPrimaryCore (MpId)) {\r
1e57a462 149 return RETURN_SUCCESS;\r
150 }\r
151\r
152 // Disable memory remapping and return to normal mapping\r
153 MmioOr32 (SP810_CTRL_BASE, BIT8);\r
154\r
155 return RETURN_SUCCESS;\r
156}\r
157\r
1e57a462 158EFI_STATUS\r
159PrePeiCoreGetMpCoreInfo (\r
160 OUT UINTN *CoreCount,\r
161 OUT ARM_CORE_INFO **ArmCoreTable\r
162 )\r
163{\r
164 UINT32 ProcType;\r
165\r
166 ProcType = MmioRead32 (ARM_VE_SYS_PROCID0_REG) & ARM_VE_SYS_PROC_ID_MASK;\r
167 if ((ProcType == ARM_VE_SYS_PROC_ID_CORTEX_A9) || (ProcType == ARM_VE_SYS_PROC_ID_CORTEX_A15)) {\r
27be3601 168 // Only support one cluster on all but ARMv8 FVP platform. FVP still uses CortexA9 ID.\r
1e57a462 169 *CoreCount = ArmGetCpuCountPerCluster ();\r
170 *ArmCoreTable = mVersatileExpressMpCoreInfoTable;\r
171 return EFI_SUCCESS;\r
172 } else {\r
173 return EFI_UNSUPPORTED;\r
174 }\r
175}\r
176\r
1e57a462 177ARM_MP_CORE_INFO_PPI mMpCoreInfoPpi = { PrePeiCoreGetMpCoreInfo };\r
178\r
179EFI_PEI_PPI_DESCRIPTOR gPlatformPpiTable[] = {\r
180 {\r
181 EFI_PEI_PPI_DESCRIPTOR_PPI,\r
aaa08205 182 &gArmMpCoreInfoPpiGuid,\r
1e57a462 183 &mMpCoreInfoPpi\r
184 }\r
185};\r
186\r
187VOID\r
188ArmPlatformGetPlatformPpiList (\r
189 OUT UINTN *PpiListSize,\r
190 OUT EFI_PEI_PPI_DESCRIPTOR **PpiList\r
191 )\r
192{\r
193 *PpiListSize = sizeof(gPlatformPpiTable);\r
194 *PpiList = gPlatformPpiTable;\r
195}\r