]> git.proxmox.com Git - mirror_edk2.git/blob - ArmPkg/Library/ArmLib/ArmLib.c
3905d02c5e7e27e387b78038c277c7e9dd35bf86
[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
14 #include "ArmLibPrivate.h"
15
16 VOID
17 EFIAPI
18 ArmSetAuxCrBit (
19 IN UINT32 Bits
20 )
21 {
22 UINT32 val = ArmReadAuxCr();
23 val |= Bits;
24 ArmWriteAuxCr(val);
25 }
26
27 VOID
28 EFIAPI
29 ArmUnsetAuxCrBit (
30 IN UINT32 Bits
31 )
32 {
33 UINT32 val = ArmReadAuxCr();
34 val &= ~Bits;
35 ArmWriteAuxCr(val);
36 }
37
38 //
39 // Helper functions for accessing CPUACTLR
40 //
41
42 VOID
43 EFIAPI
44 ArmSetCpuActlrBit (
45 IN UINTN Bits
46 )
47 {
48 UINTN Value;
49 Value = ArmReadCpuActlr ();
50 Value |= Bits;
51 ArmWriteCpuActlr (Value);
52 }
53
54 VOID
55 EFIAPI
56 ArmUnsetCpuActlrBit (
57 IN UINTN Bits
58 )
59 {
60 UINTN Value;
61 Value = ArmReadCpuActlr ();
62 Value &= ~Bits;
63 ArmWriteCpuActlr (Value);
64 }
65
66 UINTN
67 EFIAPI
68 ArmDataCacheLineLength (
69 VOID
70 )
71 {
72 return 4 << ((ArmCacheInfo () >> 16) & 0xf); // CTR_EL0.DminLine
73 }
74
75 UINTN
76 EFIAPI
77 ArmInstructionCacheLineLength (
78 VOID
79 )
80 {
81 return 4 << (ArmCacheInfo () & 0xf); // CTR_EL0.IminLine
82 }
83
84 UINTN
85 EFIAPI
86 ArmCacheWritebackGranule (
87 VOID
88 )
89 {
90 UINTN CWG;
91
92 CWG = (ArmCacheInfo () >> 24) & 0xf; // CTR_EL0.CWG
93
94 if (CWG == 0) {
95 return SIZE_2KB;
96 }
97
98 return 4 << CWG;
99 }