blob: f5b081b3cdfcb44301ce46b35895a955853eba15 [file] [log] [blame]
Patrick Rudolph30e743e2022-05-02 09:55:20 +02001/* SPDX-License-Identifier: GPL-2.0-only */
2
3#include <console/console.h>
4#include <soc/romstage.h>
Patrick Rudolph5ca756f2023-07-20 08:59:03 +02005#include <soc/ddr.h>
Johnny Lin646f7b82023-07-06 15:46:49 +08006#include <soc/soc_util.h>
Patrick Rudolph30e743e2022-05-02 09:55:20 +02007#include <defs_cxl.h>
8#include <hob_iiouds.h>
9
Patrick Rudolph30e743e2022-05-02 09:55:20 +020010/* For now only set 3 fields and hard-coded others, should be extended in the future */
11#define CFG_UPD_PCIE_PORT(pexphide, slotimp, slotpsp) \
12 { \
13 .SLOTEIP = 0, \
14 .SLOTHPCAP = slotimp, \
15 .SLOTHPSUP = slotimp, \
16 .SLOTPIP = 0, \
17 .SLOTAIP = 0, \
18 .SLOTMRLSP = 0, \
19 .SLOTPCP = 0, \
20 .SLOTABP = 0, \
21 .SLOTIMP = slotimp, \
22 .SLOTSPLS = 0, \
23 .SLOTSPLV = slotimp ? 25 : 0, \
24 .SLOTPSP = slotpsp, \
25 .VppEnabled = 0, \
26 .VppPort = 0, \
27 .VppAddress = 0, \
28 .MuxAddress = 0, \
29 .ChannelID = 0, \
30 .PciePortEnable = !pexphide, \
31 .PEXPHIDE = pexphide, \
32 .HidePEXPMenu = pexphide, \
33 .PciePortOwnership = 0, \
34 .RetimerConnectCount = 0, \
35 .PcieMaxPayload = 0x7, \
36 .PcieHotPlugOnPort = slotimp, \
37 }
38
Patrick Rudolph30e743e2022-05-02 09:55:20 +020039
40static const UPD_IIO_PCIE_PORT_CONFIG_ENTRY
41sbp1_socket_config[CONFIG_MAX_SOCKET][IIO_PORT_SETTINGS] = {
42 {
43 /* DMI port: array index 0 */
44 CFG_UPD_PCIE_PORT(0, 0, 0),
45 /* IOU0 (PE0): array index 1 ~ 8 Not Used */
46 CFG_UPD_PCIE_PORT(1, 0, 0),
47 CFG_UPD_PCIE_PORT(1, 0, 0),
48 CFG_UPD_PCIE_PORT(1, 0, 0),
49 CFG_UPD_PCIE_PORT(1, 0, 0),
50 CFG_UPD_PCIE_PORT(1, 0, 0),
51 CFG_UPD_PCIE_PORT(1, 0, 0),
52 CFG_UPD_PCIE_PORT(1, 0, 0),
53 CFG_UPD_PCIE_PORT(1, 0, 0),
54 /* IOU1 (PE1): array index 9 ~ 16 IIO_BIFURCATE_x4x4x4x4 */
55 CFG_UPD_PCIE_PORT(0, 1, 12), /* 26:01.0 RSSD12 */
56 CFG_UPD_PCIE_PORT(1, 0, 0),
57 CFG_UPD_PCIE_PORT(0, 1, 11), /* 26:03.0 RSSD11 */
58 CFG_UPD_PCIE_PORT(1, 0, 0),
59 CFG_UPD_PCIE_PORT(0, 1, 10), /* 26:05.0 RSSD10 */
60 CFG_UPD_PCIE_PORT(1, 0, 0),
61 CFG_UPD_PCIE_PORT(0, 1, 9), /* 26:07.0 RSSD09 */
62 CFG_UPD_PCIE_PORT(1, 0, 0),
63 /* IOU2 (PE2): array index 17 ~ 24 IIO_BIFURCATE_x4x4x4x4 */
64 CFG_UPD_PCIE_PORT(0, 1, 13), /* 37:01.0 RSSD13 */
65 CFG_UPD_PCIE_PORT(1, 0, 0),
66 CFG_UPD_PCIE_PORT(0, 1, 14), /* 37:03.0 RSSD14 */
67 CFG_UPD_PCIE_PORT(1, 0, 0),
68 CFG_UPD_PCIE_PORT(0, 1, 15), /* 37:05.0 RSSD15 */
69 CFG_UPD_PCIE_PORT(1, 0, 0),
70 CFG_UPD_PCIE_PORT(0, 1, 16), /* 37:07.0 RSSD16 */
71 CFG_UPD_PCIE_PORT(1, 0, 0),
72 /* IOU3 (PE3): array index 25 ~ 32 IIO_BIFURCATE_x4x4x4x4 */
73 CFG_UPD_PCIE_PORT(0, 0, 0), /* 48:01.0 - NIC2*/
74 CFG_UPD_PCIE_PORT(1, 0, 0),
75 CFG_UPD_PCIE_PORT(1, 0, 0),
76 CFG_UPD_PCIE_PORT(1, 0, 0),
77 CFG_UPD_PCIE_PORT(0, 0, 0), /* 48:05.0 - NIC1 */
78 CFG_UPD_PCIE_PORT(1, 0, 0),
79 CFG_UPD_PCIE_PORT(1, 0, 0),
80 CFG_UPD_PCIE_PORT(1, 0, 0),
81 /* IOU4 (PE4): array index 33 ~ 40 Not Used */
82 CFG_UPD_PCIE_PORT(1, 0, 0),
83 CFG_UPD_PCIE_PORT(1, 0, 0),
84 CFG_UPD_PCIE_PORT(1, 0, 0),
85 CFG_UPD_PCIE_PORT(1, 0, 0),
86 CFG_UPD_PCIE_PORT(1, 0, 0),
87 CFG_UPD_PCIE_PORT(1, 0, 0),
88 CFG_UPD_PCIE_PORT(1, 0, 0),
89 CFG_UPD_PCIE_PORT(1, 0, 0),
90 },
91 {
92 /* DMI port: array index 0 */
93 CFG_UPD_PCIE_PORT(1, 0, 0),
94 /* IOU0 (PE0): array index 1 ~ 8 Not Used */
95 CFG_UPD_PCIE_PORT(1, 0, 0),
96 CFG_UPD_PCIE_PORT(1, 0, 0),
97 CFG_UPD_PCIE_PORT(1, 0, 0),
98 CFG_UPD_PCIE_PORT(1, 0, 0),
99 CFG_UPD_PCIE_PORT(1, 0, 0),
100 CFG_UPD_PCIE_PORT(1, 0, 0),
101 CFG_UPD_PCIE_PORT(1, 0, 0),
102 CFG_UPD_PCIE_PORT(1, 0, 0),
103 /* IOU1 (PE1): array index 9 ~ 16 IIO_BIFURCATE_x4x4x4x4 */
104 CFG_UPD_PCIE_PORT(0, 1, 28), /* 26:01.0 RSSD28 */
105 CFG_UPD_PCIE_PORT(1, 0, 0),
106 CFG_UPD_PCIE_PORT(0, 1, 27), /* 26:03.0 RSSD27 */
107 CFG_UPD_PCIE_PORT(1, 0, 0),
108 CFG_UPD_PCIE_PORT(0, 1, 26), /* 26:05.0 RSSD26 */
109 CFG_UPD_PCIE_PORT(1, 0, 0),
110 CFG_UPD_PCIE_PORT(0, 1, 25), /* 26:07.0 RSSD25 */
111 CFG_UPD_PCIE_PORT(1, 0, 0),
112 /* IOU2 (PE2): array index 17 ~ 24 IIO_BIFURCATE_x4x4x4x4 */
113 CFG_UPD_PCIE_PORT(0, 1, 29), /* 37:01.0 RSSD29 */
114 CFG_UPD_PCIE_PORT(1, 0, 0),
115 CFG_UPD_PCIE_PORT(0, 1, 30), /* 37:03.0 RSSD30 */
116 CFG_UPD_PCIE_PORT(1, 0, 0),
117 CFG_UPD_PCIE_PORT(0, 1, 31), /* 37:05.0 RSSD31 */
118 CFG_UPD_PCIE_PORT(1, 0, 0),
119 CFG_UPD_PCIE_PORT(0, 1, 32), /* 37:07.0 RSSD32 */
120 CFG_UPD_PCIE_PORT(1, 0, 0),
121 /* IOU3 (PE3): array index 25 ~ 32 Not used */
122 CFG_UPD_PCIE_PORT(1, 0, 0),
123 CFG_UPD_PCIE_PORT(1, 0, 0),
124 CFG_UPD_PCIE_PORT(1, 0, 0),
125 CFG_UPD_PCIE_PORT(1, 0, 0),
126 CFG_UPD_PCIE_PORT(1, 0, 0),
127 CFG_UPD_PCIE_PORT(1, 0, 0),
128 CFG_UPD_PCIE_PORT(1, 0, 0),
129 CFG_UPD_PCIE_PORT(1, 0, 0),
130 /* IOU4 (PE4): array index 33 ~ 40 IIO_BIFURCATE_x4x4x4x4 */
131 CFG_UPD_PCIE_PORT(0, 0, 0), /* 59:01.0 - NIC2 */
132 CFG_UPD_PCIE_PORT(1, 0, 0),
133 CFG_UPD_PCIE_PORT(1, 0, 0),
134 CFG_UPD_PCIE_PORT(1, 0, 0),
135 CFG_UPD_PCIE_PORT(0, 0, 0), /* 59:05.0 - NIC1 */
136 CFG_UPD_PCIE_PORT(1, 0, 0),
137 CFG_UPD_PCIE_PORT(1, 0, 0),
138 CFG_UPD_PCIE_PORT(1, 0, 0),
139 },
140 {
141 /* DMI port: array index 0 */
142 CFG_UPD_PCIE_PORT(1, 0, 0),
143 /* IOU0 (PE0): array index 1 ~ 8 Not Used */
144 CFG_UPD_PCIE_PORT(1, 0, 0),
145 CFG_UPD_PCIE_PORT(1, 0, 0),
146 CFG_UPD_PCIE_PORT(1, 0, 0),
147 CFG_UPD_PCIE_PORT(1, 0, 0),
148 CFG_UPD_PCIE_PORT(1, 0, 0),
149 CFG_UPD_PCIE_PORT(1, 0, 0),
150 CFG_UPD_PCIE_PORT(1, 0, 0),
151 CFG_UPD_PCIE_PORT(1, 0, 0),
152 /* IOU1 (PE1): array index 9 ~ 16 Not used */
153 CFG_UPD_PCIE_PORT(1, 0, 0),
154 CFG_UPD_PCIE_PORT(1, 0, 0),
155 CFG_UPD_PCIE_PORT(1, 0, 0),
156 CFG_UPD_PCIE_PORT(1, 0, 0),
157 CFG_UPD_PCIE_PORT(1, 0, 0),
158 CFG_UPD_PCIE_PORT(1, 0, 0),
159 CFG_UPD_PCIE_PORT(1, 0, 0),
160 CFG_UPD_PCIE_PORT(1, 0, 0),
161 /* IOU2 (PE2): array index 17 ~ 24 IIO_BIFURCATE_x4x4x4x4 */
162 CFG_UPD_PCIE_PORT(0, 0, 0), /* 37:01.0 - NIC1 */
163 CFG_UPD_PCIE_PORT(1, 0, 0),
164 CFG_UPD_PCIE_PORT(1, 0, 0),
165 CFG_UPD_PCIE_PORT(1, 0, 0),
166 CFG_UPD_PCIE_PORT(0, 0, 0), /* 37:05.0 - NIC2 */
167 CFG_UPD_PCIE_PORT(1, 0, 0),
168 CFG_UPD_PCIE_PORT(1, 0, 0),
169 CFG_UPD_PCIE_PORT(1, 0, 0),
170 /* IOU3 (PE3): array index 25 ~ 32 IIO_BIFURCATE_x4x4x4x4 */
171 CFG_UPD_PCIE_PORT(0, 1, 17), /* 48:01.0 - RSSD17 */
172 CFG_UPD_PCIE_PORT(1, 0, 0),
173 CFG_UPD_PCIE_PORT(0, 1, 18), /* 48:03.0 - RSSD18 */
174 CFG_UPD_PCIE_PORT(1, 0, 0),
175 CFG_UPD_PCIE_PORT(0, 1, 19), /* 48:05.0 - RSSD19 */
176 CFG_UPD_PCIE_PORT(1, 0, 0),
177 CFG_UPD_PCIE_PORT(0, 1, 20), /* 48:07.0 - RSSD20 */
178 CFG_UPD_PCIE_PORT(1, 0, 0),
179 /* IOU4 (PE4): array index 33 ~ 40 IIO_BIFURCATE_x4x4x4x4 */
180 CFG_UPD_PCIE_PORT(0, 1, 24), /* 59:01.0 - RSSD24 */
181 CFG_UPD_PCIE_PORT(1, 0, 0),
182 CFG_UPD_PCIE_PORT(0, 1, 23), /* 59:03.0 - RSSD23*/
183 CFG_UPD_PCIE_PORT(1, 0, 0),
184 CFG_UPD_PCIE_PORT(0, 1, 22), /* 59:05.0 - RSSD22 */
185 CFG_UPD_PCIE_PORT(1, 0, 0),
186 CFG_UPD_PCIE_PORT(0, 1, 21), /* 59:07.0 - RSSD21 */
187 CFG_UPD_PCIE_PORT(1, 0, 0),
188 },
189 {
190 /* DMI port: array index 0 */
191 CFG_UPD_PCIE_PORT(1, 0, 0),
192 /* IOU0 (PE0): array index 1 ~ 8 Not Used */
193 CFG_UPD_PCIE_PORT(1, 0, 0),
194 CFG_UPD_PCIE_PORT(1, 0, 0),
195 CFG_UPD_PCIE_PORT(1, 0, 0),
196 CFG_UPD_PCIE_PORT(1, 0, 0),
197 CFG_UPD_PCIE_PORT(1, 0, 0),
198 CFG_UPD_PCIE_PORT(1, 0, 0),
199 CFG_UPD_PCIE_PORT(1, 0, 0),
200 CFG_UPD_PCIE_PORT(1, 0, 0),
201 /* IOU1 (PE1): array index 9 ~ 16 Not used */
202 CFG_UPD_PCIE_PORT(1, 0, 0),
203 CFG_UPD_PCIE_PORT(1, 0, 0),
204 CFG_UPD_PCIE_PORT(1, 0, 0),
205 CFG_UPD_PCIE_PORT(1, 0, 0),
206 CFG_UPD_PCIE_PORT(1, 0, 0),
207 CFG_UPD_PCIE_PORT(1, 0, 0),
208 CFG_UPD_PCIE_PORT(1, 0, 0),
209 CFG_UPD_PCIE_PORT(1, 0, 0),
210 /* IOU2 (PE2): array index 17 ~ 24 IIO_BIFURCATE_x4x4x4x4 */
211 CFG_UPD_PCIE_PORT(0, 0, 0), /* 37:01.0 - NIC1 */
212 CFG_UPD_PCIE_PORT(1, 0, 0),
213 CFG_UPD_PCIE_PORT(1, 0, 0),
214 CFG_UPD_PCIE_PORT(1, 0, 0),
215 CFG_UPD_PCIE_PORT(0, 0, 0), /* 37:05.0 - NIC2 */
216 CFG_UPD_PCIE_PORT(1, 0, 0),
217 CFG_UPD_PCIE_PORT(1, 0, 0),
218 CFG_UPD_PCIE_PORT(1, 0, 0),
219 /* IOU3 (PE3): array index 25 ~ 32 IIO_BIFURCATE_x4x4x4x4 */
220 CFG_UPD_PCIE_PORT(0, 1, 1), /* 48:01.0 - RSSD01 */
221 CFG_UPD_PCIE_PORT(1, 0, 0),
222 CFG_UPD_PCIE_PORT(0, 1, 2), /* 48:03.0 - RSSD02 */
223 CFG_UPD_PCIE_PORT(1, 0, 0),
224 CFG_UPD_PCIE_PORT(0, 1, 3), /* 48:05.0 - RSSD03 */
225 CFG_UPD_PCIE_PORT(1, 0, 0),
226 CFG_UPD_PCIE_PORT(0, 1, 4), /* 48:07.0 - RSSD04 */
227 CFG_UPD_PCIE_PORT(1, 0, 0),
228 /* IOU4 (PE4): array index 33 ~ 40 IIO_BIFURCATE_x4x4x4x4 */
229 CFG_UPD_PCIE_PORT(0, 1, 8), /* 59:01.0 - RSSD08 */
230 CFG_UPD_PCIE_PORT(1, 0, 0),
231 CFG_UPD_PCIE_PORT(0, 1, 7), /* 59:03.0 - RSSD07*/
232 CFG_UPD_PCIE_PORT(1, 0, 0),
233 CFG_UPD_PCIE_PORT(0, 1, 6), /* 59:05.0 - RSSD06 */
234 CFG_UPD_PCIE_PORT(1, 0, 0),
235 CFG_UPD_PCIE_PORT(0, 1, 5), /* 59:07.0 - RSSD05 */
236 CFG_UPD_PCIE_PORT(1, 0, 0),
237 },
238};
239
240static const UINT8 sbp1_socket_config_iou[CONFIG_MAX_SOCKET][5] = {
241 {
242 IIO_BIFURCATE_xxxxxxxx,
243 IIO_BIFURCATE_x4x4x4x4,
244 IIO_BIFURCATE_x4x4x4x4,
245 IIO_BIFURCATE_x4x4x4x4,
246 IIO_BIFURCATE_xxxxxxxx,
247 },
248 {
249 IIO_BIFURCATE_xxxxxxxx,
250 IIO_BIFURCATE_x4x4x4x4,
251 IIO_BIFURCATE_x4x4x4x4,
252 IIO_BIFURCATE_xxxxxxxx,
253 IIO_BIFURCATE_x4x4x4x4,
254 },
255 {
256 IIO_BIFURCATE_xxxxxxxx,
257 IIO_BIFURCATE_xxxxxxxx,
258 IIO_BIFURCATE_x4x4x4x4,
259 IIO_BIFURCATE_x4x4x4x4,
260 IIO_BIFURCATE_x4x4x4x4,
261 },
262 {
263 IIO_BIFURCATE_xxxxxxxx,
264 IIO_BIFURCATE_xxxxxxxx,
265 IIO_BIFURCATE_x4x4x4x4,
266 IIO_BIFURCATE_x4x4x4x4,
267 IIO_BIFURCATE_x4x4x4x4,
268 },
269};
270
Patrick Rudolph30e743e2022-05-02 09:55:20 +0200271void mainboard_memory_init_params(FSPM_UPD *mupd)
272{
273 UINT32 *sktbmp;
274
275 /* Set Rank Margin Tool to disable. */
276 mupd->FspmConfig.EnableRMT = 0x0;
277
278 /* Set Promote Warnings to disable. */
279 /* Determines if warnings are promoted to system level. */
280 mupd->FspmConfig.promoteWarnings = 0x0;
281
282 /* Set FSP debug message to Disable */
283 mupd->FspmConfig.serialDebugMsgLvl = 0x0;
284
285 /* Force 256MiB MMCONF (Segment0) only */
286 mupd->FspmConfig.mmCfgSize = 0x2;
287 mupd->FspmConfig.PcieHotPlugEnable = 1;
288
289 /*
290 * Disable unused IIO stack:
291 * Socket 0 : IIO1, IIO4
292 * Socket 1 : IIO1, IIO2
293 * Socket 2 : IIO1, IIO5
294 * Socket 3 : IIO1, IIO5
295 * Stack Disable bit mapping is:
296 * IIO stack number: 1 2 3 4 5
297 * Stack Disable Bit: 1 5 3 2 4
298 */
299 sktbmp = (UINT32 *)&mupd->FspmConfig.StackDisableBitMap[0];
300 sktbmp[0] = BIT(1) | BIT(2);
301 sktbmp[1] = BIT(1) | BIT(5);
302 sktbmp[2] = BIT(1) | BIT(4);
303 sktbmp[3] = BIT(1) | BIT(4);
Johnny Lin646f7b82023-07-06 15:46:49 +0800304 soc_config_iio(mupd, sbp1_socket_config, sbp1_socket_config_iou);
Patrick Rudolph30e743e2022-05-02 09:55:20 +0200305}
Patrick Rudolph5ca756f2023-07-20 08:59:03 +0200306
307bool mainboard_dimm_slot_exists(uint8_t socket, uint8_t channel, uint8_t dimm)
308{
309 if (socket >= CONFIG_MAX_SOCKET)
310 return false;
311 if (channel >= 8)
312 return false;
313 if (dimm >= 2)
314 return false;
315
316 return true;
317}