]> git.proxmox.com Git - mirror_edk2.git/blob - ArmPkg/Library/ArmLib/ArmLib.c
c682c3ab63396a97f57573b89c00f3dff3800934
[mirror_edk2.git] / ArmPkg / Library / ArmLib / ArmLib.c
1 /** @file
2
3 Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
4 Copyright (c) 2011 - 2014, ARM Ltd. All rights reserved.<BR>
5
6 SPDX-License-Identifier: BSD-2-Clause-Patent
7
8 **/
9
10 #include <Base.h>
11
12 #include <Library/ArmLib.h>
13 #include <Library/DebugLib.h>
14 #include <Library/PcdLib.h>
15
16 #include "ArmLibPrivate.h"
17
18 VOID
19 EFIAPI
20 ArmSetAuxCrBit (
21 IN UINT32 Bits
22 )
23 {
24 UINT32 val = ArmReadAuxCr();
25 val |= Bits;
26 ArmWriteAuxCr(val);
27 }
28
29 VOID
30 EFIAPI
31 ArmUnsetAuxCrBit (
32 IN UINT32 Bits
33 )
34 {
35 UINT32 val = ArmReadAuxCr();
36 val &= ~Bits;
37 ArmWriteAuxCr(val);
38 }
39
40 //
41 // Helper functions for accessing CPUACTLR
42 //
43
44 VOID
45 EFIAPI
46 ArmSetCpuActlrBit (
47 IN UINTN Bits
48 )
49 {
50 UINTN Value;
51 Value = ArmReadCpuActlr ();
52 Value |= Bits;
53 ArmWriteCpuActlr (Value);
54 }
55
56 VOID
57 EFIAPI
58 ArmUnsetCpuActlrBit (
59 IN UINTN Bits
60 )
61 {
62 UINTN Value;
63 Value = ArmReadCpuActlr ();
64 Value &= ~Bits;
65 ArmWriteCpuActlr (Value);
66 }
67
68 UINTN
69 EFIAPI
70 ArmDataCacheLineLength (
71 VOID
72 )
73 {
74 return 4 << ((ArmCacheInfo () >> 16) & 0xf); // CTR_EL0.DminLine
75 }
76
77 UINTN
78 EFIAPI
79 ArmInstructionCacheLineLength (
80 VOID
81 )
82 {
83 return 4 << (ArmCacheInfo () & 0xf); // CTR_EL0.IminLine
84 }
85
86 UINTN
87 EFIAPI
88 ArmCacheWritebackGranule (
89 VOID
90 )
91 {
92 UINTN CWG;
93
94 CWG = (ArmCacheInfo () >> 24) & 0xf; // CTR_EL0.CWG
95
96 if (CWG == 0) {
97 return SIZE_2KB;
98 }
99
100 return 4 << CWG;
101 }