]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPlatformPkg/ArmVExpressPkg/Library/ArmVExpressLibRTSM/RTSM.c
ARM Packages: Fixed line endings
[mirror_edk2.git] / ArmPlatformPkg / ArmVExpressPkg / Library / ArmVExpressLibRTSM / RTSM.c
CommitLineData
1e57a462 1/** @file\r
2*\r
3* Copyright (c) 2011-2012, ARM Limited. All rights reserved.\r
4* \r
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
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
24UINTN\r
25ArmGetCpuCountPerCluster (\r
26 VOID\r
27 );\r
28\r
29ARM_CORE_INFO mVersatileExpressMpCoreInfoTable[] = {\r
30 {\r
31 // Cluster 0, Core 0\r
32 0x0, 0x0,\r
33\r
34 // MP Core MailBox Set/Get/Clear Addresses and Clear Value\r
35 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_REG,\r
36 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_SET_REG,\r
37 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_CLR_REG,\r
38 (UINT64)0xFFFFFFFF\r
39 },\r
40 {\r
41 // Cluster 0, Core 1\r
42 0x0, 0x1,\r
43\r
44 // MP Core MailBox Set/Get/Clear Addresses and Clear Value\r
45 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_REG,\r
46 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_SET_REG,\r
47 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_CLR_REG,\r
48 (UINT64)0xFFFFFFFF\r
49 },\r
50 {\r
51 // Cluster 0, Core 2\r
52 0x0, 0x2,\r
53\r
54 // MP Core MailBox Set/Get/Clear Addresses and Clear Value\r
55 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_REG,\r
56 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_SET_REG,\r
57 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_CLR_REG,\r
58 (UINT64)0xFFFFFFFF\r
59 },\r
60 {\r
61 // Cluster 0, Core 3\r
62 0x0, 0x3,\r
63\r
64 // MP Core MailBox Set/Get/Clear Addresses and Clear Value\r
65 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_REG,\r
66 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_SET_REG,\r
67 (EFI_PHYSICAL_ADDRESS)ARM_VE_SYS_FLAGS_CLR_REG,\r
68 (UINT64)0xFFFFFFFF\r
69 }\r
70};\r
71\r
72/**\r
73 Return the current Boot Mode\r
74\r
75 This function returns the boot reason on the platform\r
76\r
77 @return Return the current Boot Mode of the platform\r
78\r
79**/\r
80EFI_BOOT_MODE\r
81ArmPlatformGetBootMode (\r
82 VOID\r
83 )\r
84{\r
85 return BOOT_WITH_FULL_CONFIGURATION;\r
86}\r
87\r
88/**\r
89 Initialize controllers that must setup in the normal world\r
90\r
91 This function is called by the ArmPlatformPkg/Pei or ArmPlatformPkg/Pei/PlatformPeim\r
92 in the PEI phase.\r
93\r
94**/\r
95RETURN_STATUS\r
96ArmPlatformInitialize (\r
97 IN UINTN MpId\r
98 )\r
99{\r
100 if (!IS_PRIMARY_CORE(MpId)) {\r
101 return RETURN_SUCCESS;\r
102 }\r
103\r
104 // Disable memory remapping and return to normal mapping\r
105 MmioOr32 (SP810_CTRL_BASE, BIT8);\r
106\r
107 return RETURN_SUCCESS;\r
108}\r
109\r
110/**\r
111 Initialize the system (or sometimes called permanent) memory\r
112\r
113 This memory is generally represented by the DRAM.\r
114\r
115**/\r
116VOID\r
117ArmPlatformInitializeSystemMemory (\r
118 VOID\r
119 )\r
120{\r
121 // Nothing to do here\r
122}\r
123\r
124EFI_STATUS\r
125PrePeiCoreGetMpCoreInfo (\r
126 OUT UINTN *CoreCount,\r
127 OUT ARM_CORE_INFO **ArmCoreTable\r
128 )\r
129{\r
130 UINT32 ProcType;\r
131\r
132 ProcType = MmioRead32 (ARM_VE_SYS_PROCID0_REG) & ARM_VE_SYS_PROC_ID_MASK;\r
133 if ((ProcType == ARM_VE_SYS_PROC_ID_CORTEX_A9) || (ProcType == ARM_VE_SYS_PROC_ID_CORTEX_A15)) {\r
134 // Only support one cluster\r
135 *CoreCount = ArmGetCpuCountPerCluster ();\r
136 *ArmCoreTable = mVersatileExpressMpCoreInfoTable;\r
137 return EFI_SUCCESS;\r
138 } else {\r
139 return EFI_UNSUPPORTED;\r
140 }\r
141}\r
142\r
143// Needs to be declared in the file. Otherwise gArmMpCoreInfoPpiGuid is undefined in the contect of PrePeiCore\r
144EFI_GUID mArmMpCoreInfoPpiGuid = ARM_MP_CORE_INFO_PPI_GUID;\r
145ARM_MP_CORE_INFO_PPI mMpCoreInfoPpi = { PrePeiCoreGetMpCoreInfo };\r
146\r
147EFI_PEI_PPI_DESCRIPTOR gPlatformPpiTable[] = {\r
148 {\r
149 EFI_PEI_PPI_DESCRIPTOR_PPI,\r
150 &mArmMpCoreInfoPpiGuid,\r
151 &mMpCoreInfoPpi\r
152 }\r
153};\r
154\r
155VOID\r
156ArmPlatformGetPlatformPpiList (\r
157 OUT UINTN *PpiListSize,\r
158 OUT EFI_PEI_PPI_DESCRIPTOR **PpiList\r
159 )\r
160{\r
161 *PpiListSize = sizeof(gPlatformPpiTable);\r
162 *PpiList = gPlatformPpiTable;\r
163}\r