]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPkg/Drivers/ArmCpuLib/ArmCortexA5xLib/ArmCortexA5xLib.c
EmbeddedPkg/RTC: use returned status at init-time
[mirror_edk2.git] / ArmPkg / Drivers / ArmCpuLib / ArmCortexA5xLib / ArmCortexA5xLib.c
CommitLineData
25402f5d
HL
1/** @file\r
2\r
cf02da52 3 Copyright (c) 2011-2014, ARM Limited. All rights reserved.\r
25402f5d
HL
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 <Base.h>\r
16#include <Library/ArmLib.h>\r
17#include <Library/ArmCpuLib.h>\r
4f6d34b4 18#include <Library/ArmGenericTimerCounterLib.h>\r
25402f5d 19#include <Library/DebugLib.h>\r
25402f5d
HL
20#include <Library/PcdLib.h>\r
21\r
22#include <Chipset/ArmCortexA5x.h>\r
23\r
24VOID\r
25ArmCpuSetup (\r
26 IN UINTN MpId\r
27 )\r
28{\r
29 // Check if Architectural Timer frequency is valid number (should not be 0)\r
30 ASSERT (PcdGet32 (PcdArmArchTimerFreqInHz));\r
31 ASSERT (ArmIsArchTimerImplemented () != 0);\r
32\r
33 // Note: System Counter frequency can only be set in Secure privileged mode,\r
34 // if security extensions are implemented.\r
4f6d34b4 35 ArmGenericTimerSetTimerFreq (PcdGet32 (PcdArmArchTimerFreqInHz));\r
25402f5d
HL
36\r
37 if (ArmIsMpCore ()) {\r
38 // Turn on SMP coherency\r
cf02da52 39 ArmSetCpuExCrBit (A5X_FEATURE_SMP);\r
25402f5d
HL
40 }\r
41\r
44372159
OM
42 //\r
43 // If CPU is CortexA57 r0p0 apply Errata: 806969\r
44 //\r
45 if ((ArmReadMidr () & ((ARM_CPU_TYPE_MASK << 4) | ARM_CPU_REV_MASK)) ==\r
46 ((ARM_CPU_TYPE_A57 << 4) | ARM_CPU_REV(0,0))) {\r
47 // DisableLoadStoreWB\r
48 ArmSetCpuActlrBit (1ULL << 49);\r
49 }\r
25402f5d
HL
50}\r
51\r
52VOID\r
53ArmCpuSetupSmpNonSecure (\r
54 IN UINTN MpId\r
55 )\r
56{\r
57}\r
47d183db
OM
58\r
59VOID\r
60EFIAPI\r
61ArmSetCpuExCrBit (\r
62 IN UINT64 Bits\r
63 )\r
64{\r
65 UINT64 Value;\r
66 Value = ArmReadCpuExCr ();\r
67 Value |= Bits;\r
68 ArmWriteCpuExCr (Value);\r
69}\r
70\r
71VOID\r
72EFIAPI\r
73ArmUnsetCpuExCrBit (\r
74 IN UINT64 Bits\r
75 )\r
76{\r
77 UINT64 Value;\r
78 Value = ArmReadCpuExCr ();\r
79 Value &= ~Bits;\r
80 ArmWriteCpuExCr (Value);\r
81}\r