blob: e6410a53f480ba17c9995f2afdd059214c16007b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
|
/** @file
Chassis specific functions common to all SOCs based on a specific Chessis
Copyright 2020 NXP
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include <Chassis.h>
#include <Uefi.h>
#include <Library/IoAccessLib.h>
#include <Library/IoLib.h>
#include <Library/PcdLib.h>
#include <Library/SerialPortLib.h>
/**
Or Scfg register
@param Address The MMIO register to read.
@return The value read.
**/
UINT32
EFIAPI
ScfgOr32 (
IN UINTN Address,
IN UINT32 Value
)
{
MMIO_OPERATIONS *ScfgOps;
ScfgOps = GetMmioOperations (FeaturePcdGet (PcdScfgBigEndian));
return ScfgOps->Or32 (Address, Value);
}
/**
Read Scfg register
@param Address The MMIO register to read.
@return The value read.
**/
UINT32
EFIAPI
ScfgRead32 (
IN UINTN Address
)
{
MMIO_OPERATIONS *ScfgOps;
ScfgOps = GetMmioOperations (FeaturePcdGet (PcdScfgBigEndian));
return ScfgOps->Read32 (Address);
}
/**
Write Scfg register
@param Address The MMIO register to write.
@param Value The value to write to the MMIO register.
@return Value.
**/
UINT32
EFIAPI
ScfgWrite32 (
IN UINTN Address,
IN UINT32 Value
)
{
MMIO_OPERATIONS *ScfgOps;
ScfgOps = GetMmioOperations (FeaturePcdGet (PcdScfgBigEndian));
return ScfgOps->Write32 (Address, Value);
}
/**
Read Dcfg register
@param Address The MMIO register to read.
@return The value read.
**/
UINT32
EFIAPI
DcfgRead32 (
IN UINTN Address
)
{
MMIO_OPERATIONS *DcfgOps;
DcfgOps = GetMmioOperations (FeaturePcdGet (PcdDcfgBigEndian));
return DcfgOps->Read32 (Address);
}
/**
Write Dcfg register
@param Address The MMIO register to write.
@param Value The value to write to the MMIO register.
@return Value.
**/
UINT32
EFIAPI
DcfgWrite32 (
IN UINTN Address,
IN UINT32 Value
)
{
MMIO_OPERATIONS *DcfgOps;
DcfgOps = GetMmioOperations (FeaturePcdGet (PcdDcfgBigEndian));
return DcfgOps->Write32 (Address, Value);
}
/*
* Setup SMMU in bypass mode
* and also set its pagesize
*/
STATIC
VOID
SmmuInit (
VOID
)
{
UINT32 Value;
/* set pagesize as 64K and ssmu-500 in bypass mode */
Value = (MmioRead32 ((UINTN)SMMU_REG_SACR) | SACR_PAGESIZE_MASK);
MmioWrite32 ((UINTN)SMMU_REG_SACR, Value);
Value = (MmioRead32 ((UINTN)SMMU_REG_SCR0) | SCR0_CLIENTPD_MASK);
Value &= ~SCR0_USFCFG_MASK;
MmioWrite32 ((UINTN)SMMU_REG_SCR0, Value);
Value = (MmioRead32 ((UINTN)SMMU_REG_NSCR0) | SCR0_CLIENTPD_MASK);
Value &= ~SCR0_USFCFG_MASK;
MmioWrite32 ((UINTN)SMMU_REG_NSCR0, Value);
}
/**
Function to initialize Chassis Specific functions
**/
VOID
ChassisInit (
VOID
)
{
//
// Early init serial Port to get board information.
//
SerialPortInitialize ();
SmmuInit ();
}
|