blob: c8a958d70db292f880b58b2c7483a090b346ad27 [file] [log] [blame]
Angel Pons0612b272020-04-05 15:46:56 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Aamir Bohra2d689f92017-05-11 20:27:27 +05302
3#include <console/console.h>
Elyes Haouas8ed58352022-10-22 22:17:28 +02004#include <device/device.h>
Aamir Bohra2d689f92017-05-11 20:27:27 +05305#include <device/pci.h>
Aamir Bohra2d689f92017-05-11 20:27:27 +05306#include <device/pci_ids.h>
Patrick Rudolphe56189c2018-04-18 10:11:59 +02007#include <device/pci_ops.h>
Elyes Haouas8ed58352022-10-22 22:17:28 +02008#include <device/pciexp.h>
9#include <stdint.h>
Aamir Bohra2d689f92017-05-11 20:27:27 +053010
11#define CACHE_LINE_SIZE 0x10
Aamir Bohra2d689f92017-05-11 20:27:27 +053012
13static void pch_pcie_init(struct device *dev)
14{
15 u16 reg16;
16
17 printk(BIOS_DEBUG, "Initializing PCH PCIe bridge.\n");
18
19 /* Enable SERR */
20 pci_or_config32(dev, PCI_COMMAND, PCI_COMMAND_SERR);
21
22 /* Enable Bus Master */
23 pci_or_config32(dev, PCI_COMMAND, PCI_COMMAND_MASTER);
24
25 /* Set Cache Line Size to 0x10 */
26 pci_write_config8(dev, PCI_CACHE_LINE_SIZE, CACHE_LINE_SIZE);
27
Angel Ponsb82b4312020-07-23 23:32:46 +020028 /* disable parity error response */
29 pci_and_config16(dev, PCI_BRIDGE_CONTROL, ~PCI_BRIDGE_CTL_PARITY);
Aamir Bohra2d689f92017-05-11 20:27:27 +053030
Julius Wernercd49cce2019-03-05 16:53:33 -080031 if (CONFIG(PCIE_DEBUG_INFO)) {
Aamir Bohra2d689f92017-05-11 20:27:27 +053032 printk(BIOS_SPEW, " MBL = 0x%08x\n",
33 pci_read_config32(dev, PCI_MEMORY_BASE));
34 printk(BIOS_SPEW, " PMBL = 0x%08x\n",
35 pci_read_config32(dev, PCI_PREF_MEMORY_BASE));
36 printk(BIOS_SPEW, " PMBU32 = 0x%08x\n",
37 pci_read_config32(dev, PCI_PREF_BASE_UPPER32));
38 printk(BIOS_SPEW, " PMLU32 = 0x%08x\n",
39 pci_read_config32(dev, PCI_PREF_LIMIT_UPPER32));
40 }
41
42 /* Clear errors in status registers */
43 reg16 = pci_read_config16(dev, PCI_STATUS);
44 pci_write_config16(dev, PCI_STATUS, reg16);
45 reg16 = pci_read_config16(dev, PCI_SEC_STATUS);
46 pci_write_config16(dev, PCI_SEC_STATUS, reg16);
47}
48
Nico Huber968ef752021-03-07 01:39:18 +010049static void pcie_get_ltr_max_latencies(u16 *max_snoop, u16 *max_nosnoop)
Aamir Bohra2d689f92017-05-11 20:27:27 +053050{
Nico Huber968ef752021-03-07 01:39:18 +010051 *max_snoop = PCIE_LTR_MAX_SNOOP_LATENCY_3146US;
52 *max_nosnoop = PCIE_LTR_MAX_NO_SNOOP_LATENCY_3146US;
Aamir Bohra2d689f92017-05-11 20:27:27 +053053}
54
55static struct pci_operations pcie_ops = {
Nico Huber968ef752021-03-07 01:39:18 +010056 .get_ltr_max_latencies = pcie_get_ltr_max_latencies,
Subrata Banik15ccbf02019-03-20 15:09:44 +053057 .set_subsystem = pci_dev_set_subsystem,
Aamir Bohra2d689f92017-05-11 20:27:27 +053058};
59
Nico Huber57686192022-08-06 19:11:55 +020060struct device_operations pcie_rp_ops = {
Aamir Bohra2d689f92017-05-11 20:27:27 +053061 .read_resources = pci_bus_read_resources,
62 .set_resources = pci_dev_set_resources,
63 .enable_resources = pci_bus_enable_resources,
64 .init = pch_pcie_init,
65 .scan_bus = pciexp_scan_bridge,
66 .ops_pci = &pcie_ops,
67};
68
69static const unsigned short pcie_device_ids[] = {
Bora Guvendika15b25f2022-02-28 14:43:49 -080070 PCI_DID_INTEL_RPL_P_PCIE_RP1,
71 PCI_DID_INTEL_RPL_P_PCIE_RP2,
72 PCI_DID_INTEL_RPL_P_PCIE_RP3,
Wonkyu Kim9f401072020-11-13 15:16:32 -080073 PCI_DID_INTEL_MTL_SOC_PCIE_RP1,
74 PCI_DID_INTEL_MTL_SOC_PCIE_RP2,
75 PCI_DID_INTEL_MTL_SOC_PCIE_RP3,
76 PCI_DID_INTEL_MTL_SOC_PCIE_RP4,
77 PCI_DID_INTEL_MTL_SOC_PCIE_RP5,
78 PCI_DID_INTEL_MTL_SOC_PCIE_RP6,
79 PCI_DID_INTEL_MTL_SOC_PCIE_RP7,
80 PCI_DID_INTEL_MTL_SOC_PCIE_RP8,
81 PCI_DID_INTEL_MTL_SOC_PCIE_RP9,
82 PCI_DID_INTEL_MTL_IOE_P_PCIE_RP10,
83 PCI_DID_INTEL_MTL_IOE_P_PCIE_RP11,
84 PCI_DID_INTEL_MTL_IOE_P_PCIE_RP12,
Felix Singer43b7f412022-03-07 04:34:52 +010085 PCI_DID_INTEL_LWB_PCIE_RP1,
86 PCI_DID_INTEL_LWB_PCIE_RP2,
87 PCI_DID_INTEL_LWB_PCIE_RP3,
88 PCI_DID_INTEL_LWB_PCIE_RP4,
89 PCI_DID_INTEL_LWB_PCIE_RP5,
90 PCI_DID_INTEL_LWB_PCIE_RP6,
91 PCI_DID_INTEL_LWB_PCIE_RP7,
92 PCI_DID_INTEL_LWB_PCIE_RP8,
93 PCI_DID_INTEL_LWB_PCIE_RP9,
94 PCI_DID_INTEL_LWB_PCIE_RP10,
95 PCI_DID_INTEL_LWB_PCIE_RP11,
96 PCI_DID_INTEL_LWB_PCIE_RP12,
97 PCI_DID_INTEL_LWB_PCIE_RP13,
98 PCI_DID_INTEL_LWB_PCIE_RP14,
99 PCI_DID_INTEL_LWB_PCIE_RP15,
100 PCI_DID_INTEL_LWB_PCIE_RP16,
101 PCI_DID_INTEL_LWB_PCIE_RP17,
102 PCI_DID_INTEL_LWB_PCIE_RP18,
103 PCI_DID_INTEL_LWB_PCIE_RP19,
104 PCI_DID_INTEL_LWB_PCIE_RP20,
105 PCI_DID_INTEL_LWB_PCIE_RP1_SUPER,
106 PCI_DID_INTEL_LWB_PCIE_RP2_SUPER,
107 PCI_DID_INTEL_LWB_PCIE_RP3_SUPER,
108 PCI_DID_INTEL_LWB_PCIE_RP4_SUPER,
109 PCI_DID_INTEL_LWB_PCIE_RP5_SUPER,
110 PCI_DID_INTEL_LWB_PCIE_RP6_SUPER,
111 PCI_DID_INTEL_LWB_PCIE_RP7_SUPER,
112 PCI_DID_INTEL_LWB_PCIE_RP8_SUPER,
113 PCI_DID_INTEL_LWB_PCIE_RP9_SUPER,
114 PCI_DID_INTEL_LWB_PCIE_RP10_SUPER,
115 PCI_DID_INTEL_LWB_PCIE_RP11_SUPER,
116 PCI_DID_INTEL_LWB_PCIE_RP12_SUPER,
117 PCI_DID_INTEL_LWB_PCIE_RP13_SUPER,
118 PCI_DID_INTEL_LWB_PCIE_RP14_SUPER,
119 PCI_DID_INTEL_LWB_PCIE_RP15_SUPER,
120 PCI_DID_INTEL_LWB_PCIE_RP16_SUPER,
121 PCI_DID_INTEL_LWB_PCIE_RP17_SUPER,
122 PCI_DID_INTEL_LWB_PCIE_RP18_SUPER,
123 PCI_DID_INTEL_LWB_PCIE_RP19_SUPER,
124 PCI_DID_INTEL_LWB_PCIE_RP20_SUPER,
Felix Singer43b7f412022-03-07 04:34:52 +0100125 PCI_DID_INTEL_CNL_LP_PCIE_RP1,
126 PCI_DID_INTEL_CNL_LP_PCIE_RP2,
127 PCI_DID_INTEL_CNL_LP_PCIE_RP3,
128 PCI_DID_INTEL_CNL_LP_PCIE_RP4,
129 PCI_DID_INTEL_CNL_LP_PCIE_RP5,
130 PCI_DID_INTEL_CNL_LP_PCIE_RP6,
131 PCI_DID_INTEL_CNL_LP_PCIE_RP7,
132 PCI_DID_INTEL_CNL_LP_PCIE_RP8,
133 PCI_DID_INTEL_CNL_LP_PCIE_RP9,
134 PCI_DID_INTEL_CNL_LP_PCIE_RP10,
135 PCI_DID_INTEL_CNL_LP_PCIE_RP11,
136 PCI_DID_INTEL_CNL_LP_PCIE_RP12,
137 PCI_DID_INTEL_CNL_LP_PCIE_RP13,
138 PCI_DID_INTEL_CNL_LP_PCIE_RP14,
139 PCI_DID_INTEL_CNL_LP_PCIE_RP15,
140 PCI_DID_INTEL_CNL_LP_PCIE_RP16,
141 PCI_DID_INTEL_CNP_H_PCIE_RP1,
142 PCI_DID_INTEL_CNP_H_PCIE_RP2,
143 PCI_DID_INTEL_CNP_H_PCIE_RP3,
144 PCI_DID_INTEL_CNP_H_PCIE_RP4,
145 PCI_DID_INTEL_CNP_H_PCIE_RP5,
146 PCI_DID_INTEL_CNP_H_PCIE_RP6,
147 PCI_DID_INTEL_CNP_H_PCIE_RP7,
148 PCI_DID_INTEL_CNP_H_PCIE_RP8,
149 PCI_DID_INTEL_CNP_H_PCIE_RP9,
150 PCI_DID_INTEL_CNP_H_PCIE_RP10,
151 PCI_DID_INTEL_CNP_H_PCIE_RP11,
152 PCI_DID_INTEL_CNP_H_PCIE_RP12,
153 PCI_DID_INTEL_CNP_H_PCIE_RP13,
154 PCI_DID_INTEL_CNP_H_PCIE_RP14,
155 PCI_DID_INTEL_CNP_H_PCIE_RP15,
156 PCI_DID_INTEL_CNP_H_PCIE_RP16,
157 PCI_DID_INTEL_CNP_H_PCIE_RP17,
158 PCI_DID_INTEL_CNP_H_PCIE_RP18,
159 PCI_DID_INTEL_CNP_H_PCIE_RP19,
160 PCI_DID_INTEL_CNP_H_PCIE_RP20,
161 PCI_DID_INTEL_CNP_H_PCIE_RP21,
162 PCI_DID_INTEL_CNP_H_PCIE_RP22,
163 PCI_DID_INTEL_CNP_H_PCIE_RP23,
164 PCI_DID_INTEL_CNP_H_PCIE_RP24,
165 PCI_DID_INTEL_ICP_LP_PCIE_RP1,
166 PCI_DID_INTEL_ICP_LP_PCIE_RP2,
167 PCI_DID_INTEL_ICP_LP_PCIE_RP3,
168 PCI_DID_INTEL_ICP_LP_PCIE_RP4,
169 PCI_DID_INTEL_ICP_LP_PCIE_RP5,
170 PCI_DID_INTEL_ICP_LP_PCIE_RP6,
171 PCI_DID_INTEL_ICP_LP_PCIE_RP7,
172 PCI_DID_INTEL_ICP_LP_PCIE_RP8,
173 PCI_DID_INTEL_ICP_LP_PCIE_RP9,
174 PCI_DID_INTEL_ICP_LP_PCIE_RP10,
175 PCI_DID_INTEL_ICP_LP_PCIE_RP11,
176 PCI_DID_INTEL_ICP_LP_PCIE_RP12,
177 PCI_DID_INTEL_ICP_LP_PCIE_RP13,
178 PCI_DID_INTEL_ICP_LP_PCIE_RP14,
179 PCI_DID_INTEL_ICP_LP_PCIE_RP15,
180 PCI_DID_INTEL_ICP_LP_PCIE_RP16,
181 PCI_DID_INTEL_CMP_LP_PCIE_RP1,
182 PCI_DID_INTEL_CMP_LP_PCIE_RP2,
183 PCI_DID_INTEL_CMP_LP_PCIE_RP3,
184 PCI_DID_INTEL_CMP_LP_PCIE_RP4,
185 PCI_DID_INTEL_CMP_LP_PCIE_RP5,
186 PCI_DID_INTEL_CMP_LP_PCIE_RP6,
187 PCI_DID_INTEL_CMP_LP_PCIE_RP7,
188 PCI_DID_INTEL_CMP_LP_PCIE_RP8,
189 PCI_DID_INTEL_CMP_LP_PCIE_RP9,
190 PCI_DID_INTEL_CMP_LP_PCIE_RP10,
191 PCI_DID_INTEL_CMP_LP_PCIE_RP11,
192 PCI_DID_INTEL_CMP_LP_PCIE_RP12,
193 PCI_DID_INTEL_CMP_LP_PCIE_RP13,
194 PCI_DID_INTEL_CMP_LP_PCIE_RP14,
195 PCI_DID_INTEL_CMP_LP_PCIE_RP15,
196 PCI_DID_INTEL_CMP_LP_PCIE_RP16,
197 PCI_DID_INTEL_CMP_H_PCIE_RP1,
198 PCI_DID_INTEL_CMP_H_PCIE_RP2,
199 PCI_DID_INTEL_CMP_H_PCIE_RP3,
200 PCI_DID_INTEL_CMP_H_PCIE_RP4,
201 PCI_DID_INTEL_CMP_H_PCIE_RP5,
202 PCI_DID_INTEL_CMP_H_PCIE_RP6,
203 PCI_DID_INTEL_CMP_H_PCIE_RP7,
204 PCI_DID_INTEL_CMP_H_PCIE_RP8,
205 PCI_DID_INTEL_CMP_H_PCIE_RP9,
206 PCI_DID_INTEL_CMP_H_PCIE_RP10,
207 PCI_DID_INTEL_CMP_H_PCIE_RP11,
208 PCI_DID_INTEL_CMP_H_PCIE_RP12,
209 PCI_DID_INTEL_CMP_H_PCIE_RP13,
210 PCI_DID_INTEL_CMP_H_PCIE_RP14,
211 PCI_DID_INTEL_CMP_H_PCIE_RP15,
212 PCI_DID_INTEL_CMP_H_PCIE_RP16,
213 PCI_DID_INTEL_CMP_H_PCIE_RP17,
214 PCI_DID_INTEL_CMP_H_PCIE_RP18,
215 PCI_DID_INTEL_CMP_H_PCIE_RP19,
216 PCI_DID_INTEL_CMP_H_PCIE_RP20,
217 PCI_DID_INTEL_CMP_H_PCIE_RP21,
218 PCI_DID_INTEL_CMP_H_PCIE_RP22,
219 PCI_DID_INTEL_CMP_H_PCIE_RP23,
220 PCI_DID_INTEL_CMP_H_PCIE_RP24,
221 PCI_DID_INTEL_TGP_LP_PCIE_RP1,
222 PCI_DID_INTEL_TGP_LP_PCIE_RP2,
223 PCI_DID_INTEL_TGP_LP_PCIE_RP3,
224 PCI_DID_INTEL_TGP_LP_PCIE_RP4,
225 PCI_DID_INTEL_TGP_LP_PCIE_RP5,
226 PCI_DID_INTEL_TGP_LP_PCIE_RP6,
227 PCI_DID_INTEL_TGP_LP_PCIE_RP7,
228 PCI_DID_INTEL_TGP_LP_PCIE_RP8,
229 PCI_DID_INTEL_TGP_LP_PCIE_RP9,
230 PCI_DID_INTEL_TGP_LP_PCIE_RP10,
231 PCI_DID_INTEL_TGP_LP_PCIE_RP11,
232 PCI_DID_INTEL_TGP_LP_PCIE_RP12,
233 PCI_DID_INTEL_TGP_LP_PCIE_RP13,
234 PCI_DID_INTEL_TGP_LP_PCIE_RP14,
235 PCI_DID_INTEL_TGP_LP_PCIE_RP15,
236 PCI_DID_INTEL_TGP_LP_PCIE_RP16,
237 PCI_DID_INTEL_TGP_H_PCIE_RP1,
238 PCI_DID_INTEL_TGP_H_PCIE_RP2,
239 PCI_DID_INTEL_TGP_H_PCIE_RP3,
240 PCI_DID_INTEL_TGP_H_PCIE_RP4,
241 PCI_DID_INTEL_TGP_H_PCIE_RP5,
242 PCI_DID_INTEL_TGP_H_PCIE_RP6,
243 PCI_DID_INTEL_TGP_H_PCIE_RP7,
244 PCI_DID_INTEL_TGP_H_PCIE_RP8,
245 PCI_DID_INTEL_TGP_H_PCIE_RP9,
246 PCI_DID_INTEL_TGP_H_PCIE_RP10,
247 PCI_DID_INTEL_TGP_H_PCIE_RP11,
248 PCI_DID_INTEL_TGP_H_PCIE_RP12,
249 PCI_DID_INTEL_TGP_H_PCIE_RP13,
250 PCI_DID_INTEL_TGP_H_PCIE_RP14,
251 PCI_DID_INTEL_TGP_H_PCIE_RP15,
252 PCI_DID_INTEL_TGP_H_PCIE_RP16,
253 PCI_DID_INTEL_TGP_H_PCIE_RP17,
254 PCI_DID_INTEL_TGP_H_PCIE_RP18,
255 PCI_DID_INTEL_TGP_H_PCIE_RP19,
256 PCI_DID_INTEL_TGP_H_PCIE_RP20,
257 PCI_DID_INTEL_TGP_H_PCIE_RP21,
258 PCI_DID_INTEL_TGP_H_PCIE_RP22,
259 PCI_DID_INTEL_TGP_H_PCIE_RP23,
260 PCI_DID_INTEL_TGP_H_PCIE_RP24,
261 PCI_DID_INTEL_MCC_PCIE_RP1,
262 PCI_DID_INTEL_MCC_PCIE_RP2,
263 PCI_DID_INTEL_MCC_PCIE_RP3,
264 PCI_DID_INTEL_MCC_PCIE_RP4,
265 PCI_DID_INTEL_MCC_PCIE_RP5,
266 PCI_DID_INTEL_MCC_PCIE_RP6,
267 PCI_DID_INTEL_MCC_PCIE_RP7,
268 PCI_DID_INTEL_JSP_PCIE_RP1,
269 PCI_DID_INTEL_JSP_PCIE_RP2,
270 PCI_DID_INTEL_JSP_PCIE_RP3,
271 PCI_DID_INTEL_JSP_PCIE_RP4,
272 PCI_DID_INTEL_JSP_PCIE_RP5,
273 PCI_DID_INTEL_JSP_PCIE_RP6,
274 PCI_DID_INTEL_JSP_PCIE_RP7,
275 PCI_DID_INTEL_JSP_PCIE_RP8,
276 PCI_DID_INTEL_ADL_P_PCIE_RP1,
277 PCI_DID_INTEL_ADL_P_PCIE_RP2,
278 PCI_DID_INTEL_ADL_P_PCIE_RP3,
279 PCI_DID_INTEL_ADP_P_PCIE_RP1,
280 PCI_DID_INTEL_ADP_P_PCIE_RP2,
281 PCI_DID_INTEL_ADP_P_PCIE_RP3,
282 PCI_DID_INTEL_ADP_P_PCIE_RP4,
283 PCI_DID_INTEL_ADP_P_PCIE_RP5,
284 PCI_DID_INTEL_ADP_P_PCIE_RP6,
285 PCI_DID_INTEL_ADP_P_PCIE_RP7,
286 PCI_DID_INTEL_ADP_P_PCIE_RP8,
287 PCI_DID_INTEL_ADP_P_PCIE_RP9,
288 PCI_DID_INTEL_ADP_P_PCIE_RP10,
289 PCI_DID_INTEL_ADP_P_PCIE_RP11,
290 PCI_DID_INTEL_ADP_P_PCIE_RP12,
291 PCI_DID_INTEL_ADP_S_PCIE_RP1,
292 PCI_DID_INTEL_ADP_S_PCIE_RP2,
293 PCI_DID_INTEL_ADP_S_PCIE_RP3,
294 PCI_DID_INTEL_ADP_S_PCIE_RP4,
295 PCI_DID_INTEL_ADP_S_PCIE_RP5,
296 PCI_DID_INTEL_ADP_S_PCIE_RP6,
297 PCI_DID_INTEL_ADP_S_PCIE_RP7,
298 PCI_DID_INTEL_ADP_S_PCIE_RP8,
299 PCI_DID_INTEL_ADP_S_PCIE_RP9,
300 PCI_DID_INTEL_ADP_S_PCIE_RP10,
301 PCI_DID_INTEL_ADP_S_PCIE_RP11,
302 PCI_DID_INTEL_ADP_S_PCIE_RP12,
303 PCI_DID_INTEL_ADP_S_PCIE_RP13,
304 PCI_DID_INTEL_ADP_S_PCIE_RP14,
305 PCI_DID_INTEL_ADP_S_PCIE_RP15,
306 PCI_DID_INTEL_ADP_S_PCIE_RP16,
307 PCI_DID_INTEL_ADP_S_PCIE_RP17,
308 PCI_DID_INTEL_ADP_S_PCIE_RP18,
309 PCI_DID_INTEL_ADP_S_PCIE_RP19,
310 PCI_DID_INTEL_ADP_S_PCIE_RP20,
311 PCI_DID_INTEL_ADP_S_PCIE_RP21,
312 PCI_DID_INTEL_ADP_S_PCIE_RP22,
313 PCI_DID_INTEL_ADP_S_PCIE_RP23,
314 PCI_DID_INTEL_ADP_S_PCIE_RP24,
315 PCI_DID_INTEL_ADP_S_PCIE_RP25,
316 PCI_DID_INTEL_ADP_S_PCIE_RP26,
317 PCI_DID_INTEL_ADP_S_PCIE_RP27,
318 PCI_DID_INTEL_ADP_S_PCIE_RP28,
319 PCI_DID_INTEL_ADP_M_N_PCIE_RP1,
320 PCI_DID_INTEL_ADP_M_N_PCIE_RP2,
321 PCI_DID_INTEL_ADP_M_N_PCIE_RP3,
322 PCI_DID_INTEL_ADP_M_N_PCIE_RP4,
323 PCI_DID_INTEL_ADP_M_PCIE_RP5,
324 PCI_DID_INTEL_ADP_M_PCIE_RP6,
325 PCI_DID_INTEL_ADP_M_N_PCIE_RP7,
326 PCI_DID_INTEL_ADP_M_PCIE_RP8,
327 PCI_DID_INTEL_ADP_M_N_PCIE_RP9,
328 PCI_DID_INTEL_ADP_M_N_PCIE_RP10,
329 PCI_DID_INTEL_ADP_N_PCIE_RP11,
330 PCI_DID_INTEL_ADP_N_PCIE_RP12,
Aamir Bohra2d689f92017-05-11 20:27:27 +0530331 0
332};
333
334static const struct pci_driver pch_pcie __pci_driver = {
Nico Huber57686192022-08-06 19:11:55 +0200335 .ops = &pcie_rp_ops,
Felix Singer43b7f412022-03-07 04:34:52 +0100336 .vendor = PCI_VID_INTEL,
Aamir Bohra2d689f92017-05-11 20:27:27 +0530337 .devices = pcie_device_ids,
338};