hc
2024-03-22 a0752693d998599af469473b8dc239ef973a012f
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 ();
}