Merge tag 'trace-printf-v6.13' of git://git.kernel.org/pub/scm/linux/kernel/git/trace...
[drm/drm-misc.git] / arch / powerpc / platforms / powernv / pci.c
blob35f566aa04243d1cfd56ce151e3f7d2d16720767
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3 * Support PCI/PCIe on PowerNV platforms
5 * Copyright 2011 Benjamin Herrenschmidt, IBM Corp.
6 */
8 #include <linux/kernel.h>
9 #include <linux/pci.h>
10 #include <linux/delay.h>
11 #include <linux/string.h>
12 #include <linux/init.h>
13 #include <linux/irq.h>
14 #include <linux/io.h>
15 #include <linux/msi.h>
16 #include <linux/iommu.h>
17 #include <linux/sched/mm.h>
19 #include <asm/sections.h>
20 #include <asm/io.h>
21 #include <asm/pci-bridge.h>
22 #include <asm/machdep.h>
23 #include <asm/msi_bitmap.h>
24 #include <asm/ppc-pci.h>
25 #include <asm/pnv-pci.h>
26 #include <asm/opal.h>
27 #include <asm/iommu.h>
28 #include <asm/tce.h>
29 #include <asm/firmware.h>
30 #include <asm/eeh_event.h>
31 #include <asm/eeh.h>
33 #include "powernv.h"
34 #include "pci.h"
36 static DEFINE_MUTEX(tunnel_mutex);
38 int pnv_pci_get_slot_id(struct device_node *np, uint64_t *id)
40 struct device_node *node = np;
41 u32 bdfn;
42 u64 phbid;
43 int ret;
45 ret = of_property_read_u32(np, "reg", &bdfn);
46 if (ret)
47 return -ENXIO;
49 bdfn = ((bdfn & 0x00ffff00) >> 8);
50 for (node = np; node; node = of_get_parent(node)) {
51 if (!PCI_DN(node)) {
52 of_node_put(node);
53 break;
56 if (!of_device_is_compatible(node, "ibm,ioda2-phb") &&
57 !of_device_is_compatible(node, "ibm,ioda3-phb") &&
58 !of_device_is_compatible(node, "ibm,ioda2-npu2-opencapi-phb")) {
59 of_node_put(node);
60 continue;
63 ret = of_property_read_u64(node, "ibm,opal-phbid", &phbid);
64 if (ret) {
65 of_node_put(node);
66 return -ENXIO;
69 if (of_device_is_compatible(node, "ibm,ioda2-npu2-opencapi-phb"))
70 *id = PCI_PHB_SLOT_ID(phbid);
71 else
72 *id = PCI_SLOT_ID(phbid, bdfn);
73 return 0;
76 return -ENODEV;
78 EXPORT_SYMBOL_GPL(pnv_pci_get_slot_id);
80 int pnv_pci_get_device_tree(uint32_t phandle, void *buf, uint64_t len)
82 int64_t rc;
84 if (!opal_check_token(OPAL_GET_DEVICE_TREE))
85 return -ENXIO;
87 rc = opal_get_device_tree(phandle, (uint64_t)buf, len);
88 if (rc < OPAL_SUCCESS)
89 return -EIO;
91 return rc;
93 EXPORT_SYMBOL_GPL(pnv_pci_get_device_tree);
95 int pnv_pci_get_presence_state(uint64_t id, uint8_t *state)
97 int64_t rc;
99 if (!opal_check_token(OPAL_PCI_GET_PRESENCE_STATE))
100 return -ENXIO;
102 rc = opal_pci_get_presence_state(id, (uint64_t)state);
103 if (rc != OPAL_SUCCESS)
104 return -EIO;
106 return 0;
108 EXPORT_SYMBOL_GPL(pnv_pci_get_presence_state);
110 int pnv_pci_get_power_state(uint64_t id, uint8_t *state)
112 int64_t rc;
114 if (!opal_check_token(OPAL_PCI_GET_POWER_STATE))
115 return -ENXIO;
117 rc = opal_pci_get_power_state(id, (uint64_t)state);
118 if (rc != OPAL_SUCCESS)
119 return -EIO;
121 return 0;
123 EXPORT_SYMBOL_GPL(pnv_pci_get_power_state);
125 int pnv_pci_set_power_state(uint64_t id, uint8_t state, struct opal_msg *msg)
127 struct opal_msg m;
128 int token, ret;
129 int64_t rc;
131 if (!opal_check_token(OPAL_PCI_SET_POWER_STATE))
132 return -ENXIO;
134 token = opal_async_get_token_interruptible();
135 if (unlikely(token < 0))
136 return token;
138 rc = opal_pci_set_power_state(token, id, (uint64_t)&state);
139 if (rc == OPAL_SUCCESS) {
140 ret = 0;
141 goto exit;
142 } else if (rc != OPAL_ASYNC_COMPLETION) {
143 ret = -EIO;
144 goto exit;
147 ret = opal_async_wait_response(token, &m);
148 if (ret < 0)
149 goto exit;
151 if (msg) {
152 ret = 1;
153 memcpy(msg, &m, sizeof(m));
156 exit:
157 opal_async_release_token(token);
158 return ret;
160 EXPORT_SYMBOL_GPL(pnv_pci_set_power_state);
162 /* Nicely print the contents of the PE State Tables (PEST). */
163 static void pnv_pci_dump_pest(__be64 pestA[], __be64 pestB[], int pest_size)
165 __be64 prevA = ULONG_MAX, prevB = ULONG_MAX;
166 bool dup = false;
167 int i;
169 for (i = 0; i < pest_size; i++) {
170 __be64 peA = be64_to_cpu(pestA[i]);
171 __be64 peB = be64_to_cpu(pestB[i]);
173 if (peA != prevA || peB != prevB) {
174 if (dup) {
175 pr_info("PE[..%03x] A/B: as above\n", i-1);
176 dup = false;
178 prevA = peA;
179 prevB = peB;
180 if (peA & PNV_IODA_STOPPED_STATE ||
181 peB & PNV_IODA_STOPPED_STATE)
182 pr_info("PE[%03x] A/B: %016llx %016llx\n",
183 i, peA, peB);
184 } else if (!dup && (peA & PNV_IODA_STOPPED_STATE ||
185 peB & PNV_IODA_STOPPED_STATE)) {
186 dup = true;
191 static void pnv_pci_dump_p7ioc_diag_data(struct pci_controller *hose,
192 struct OpalIoPhbErrorCommon *common)
194 struct OpalIoP7IOCPhbErrorData *data;
196 data = (struct OpalIoP7IOCPhbErrorData *)common;
197 pr_info("P7IOC PHB#%x Diag-data (Version: %d)\n",
198 hose->global_number, be32_to_cpu(common->version));
200 if (data->brdgCtl)
201 pr_info("brdgCtl: %08x\n",
202 be32_to_cpu(data->brdgCtl));
203 if (data->portStatusReg || data->rootCmplxStatus ||
204 data->busAgentStatus)
205 pr_info("UtlSts: %08x %08x %08x\n",
206 be32_to_cpu(data->portStatusReg),
207 be32_to_cpu(data->rootCmplxStatus),
208 be32_to_cpu(data->busAgentStatus));
209 if (data->deviceStatus || data->slotStatus ||
210 data->linkStatus || data->devCmdStatus ||
211 data->devSecStatus)
212 pr_info("RootSts: %08x %08x %08x %08x %08x\n",
213 be32_to_cpu(data->deviceStatus),
214 be32_to_cpu(data->slotStatus),
215 be32_to_cpu(data->linkStatus),
216 be32_to_cpu(data->devCmdStatus),
217 be32_to_cpu(data->devSecStatus));
218 if (data->rootErrorStatus || data->uncorrErrorStatus ||
219 data->corrErrorStatus)
220 pr_info("RootErrSts: %08x %08x %08x\n",
221 be32_to_cpu(data->rootErrorStatus),
222 be32_to_cpu(data->uncorrErrorStatus),
223 be32_to_cpu(data->corrErrorStatus));
224 if (data->tlpHdr1 || data->tlpHdr2 ||
225 data->tlpHdr3 || data->tlpHdr4)
226 pr_info("RootErrLog: %08x %08x %08x %08x\n",
227 be32_to_cpu(data->tlpHdr1),
228 be32_to_cpu(data->tlpHdr2),
229 be32_to_cpu(data->tlpHdr3),
230 be32_to_cpu(data->tlpHdr4));
231 if (data->sourceId || data->errorClass ||
232 data->correlator)
233 pr_info("RootErrLog1: %08x %016llx %016llx\n",
234 be32_to_cpu(data->sourceId),
235 be64_to_cpu(data->errorClass),
236 be64_to_cpu(data->correlator));
237 if (data->p7iocPlssr || data->p7iocCsr)
238 pr_info("PhbSts: %016llx %016llx\n",
239 be64_to_cpu(data->p7iocPlssr),
240 be64_to_cpu(data->p7iocCsr));
241 if (data->lemFir)
242 pr_info("Lem: %016llx %016llx %016llx\n",
243 be64_to_cpu(data->lemFir),
244 be64_to_cpu(data->lemErrorMask),
245 be64_to_cpu(data->lemWOF));
246 if (data->phbErrorStatus)
247 pr_info("PhbErr: %016llx %016llx %016llx %016llx\n",
248 be64_to_cpu(data->phbErrorStatus),
249 be64_to_cpu(data->phbFirstErrorStatus),
250 be64_to_cpu(data->phbErrorLog0),
251 be64_to_cpu(data->phbErrorLog1));
252 if (data->mmioErrorStatus)
253 pr_info("OutErr: %016llx %016llx %016llx %016llx\n",
254 be64_to_cpu(data->mmioErrorStatus),
255 be64_to_cpu(data->mmioFirstErrorStatus),
256 be64_to_cpu(data->mmioErrorLog0),
257 be64_to_cpu(data->mmioErrorLog1));
258 if (data->dma0ErrorStatus)
259 pr_info("InAErr: %016llx %016llx %016llx %016llx\n",
260 be64_to_cpu(data->dma0ErrorStatus),
261 be64_to_cpu(data->dma0FirstErrorStatus),
262 be64_to_cpu(data->dma0ErrorLog0),
263 be64_to_cpu(data->dma0ErrorLog1));
264 if (data->dma1ErrorStatus)
265 pr_info("InBErr: %016llx %016llx %016llx %016llx\n",
266 be64_to_cpu(data->dma1ErrorStatus),
267 be64_to_cpu(data->dma1FirstErrorStatus),
268 be64_to_cpu(data->dma1ErrorLog0),
269 be64_to_cpu(data->dma1ErrorLog1));
271 pnv_pci_dump_pest(data->pestA, data->pestB, OPAL_P7IOC_NUM_PEST_REGS);
274 static void pnv_pci_dump_phb3_diag_data(struct pci_controller *hose,
275 struct OpalIoPhbErrorCommon *common)
277 struct OpalIoPhb3ErrorData *data;
279 data = (struct OpalIoPhb3ErrorData*)common;
280 pr_info("PHB3 PHB#%x Diag-data (Version: %d)\n",
281 hose->global_number, be32_to_cpu(common->version));
282 if (data->brdgCtl)
283 pr_info("brdgCtl: %08x\n",
284 be32_to_cpu(data->brdgCtl));
285 if (data->portStatusReg || data->rootCmplxStatus ||
286 data->busAgentStatus)
287 pr_info("UtlSts: %08x %08x %08x\n",
288 be32_to_cpu(data->portStatusReg),
289 be32_to_cpu(data->rootCmplxStatus),
290 be32_to_cpu(data->busAgentStatus));
291 if (data->deviceStatus || data->slotStatus ||
292 data->linkStatus || data->devCmdStatus ||
293 data->devSecStatus)
294 pr_info("RootSts: %08x %08x %08x %08x %08x\n",
295 be32_to_cpu(data->deviceStatus),
296 be32_to_cpu(data->slotStatus),
297 be32_to_cpu(data->linkStatus),
298 be32_to_cpu(data->devCmdStatus),
299 be32_to_cpu(data->devSecStatus));
300 if (data->rootErrorStatus || data->uncorrErrorStatus ||
301 data->corrErrorStatus)
302 pr_info("RootErrSts: %08x %08x %08x\n",
303 be32_to_cpu(data->rootErrorStatus),
304 be32_to_cpu(data->uncorrErrorStatus),
305 be32_to_cpu(data->corrErrorStatus));
306 if (data->tlpHdr1 || data->tlpHdr2 ||
307 data->tlpHdr3 || data->tlpHdr4)
308 pr_info("RootErrLog: %08x %08x %08x %08x\n",
309 be32_to_cpu(data->tlpHdr1),
310 be32_to_cpu(data->tlpHdr2),
311 be32_to_cpu(data->tlpHdr3),
312 be32_to_cpu(data->tlpHdr4));
313 if (data->sourceId || data->errorClass ||
314 data->correlator)
315 pr_info("RootErrLog1: %08x %016llx %016llx\n",
316 be32_to_cpu(data->sourceId),
317 be64_to_cpu(data->errorClass),
318 be64_to_cpu(data->correlator));
319 if (data->nFir)
320 pr_info("nFir: %016llx %016llx %016llx\n",
321 be64_to_cpu(data->nFir),
322 be64_to_cpu(data->nFirMask),
323 be64_to_cpu(data->nFirWOF));
324 if (data->phbPlssr || data->phbCsr)
325 pr_info("PhbSts: %016llx %016llx\n",
326 be64_to_cpu(data->phbPlssr),
327 be64_to_cpu(data->phbCsr));
328 if (data->lemFir)
329 pr_info("Lem: %016llx %016llx %016llx\n",
330 be64_to_cpu(data->lemFir),
331 be64_to_cpu(data->lemErrorMask),
332 be64_to_cpu(data->lemWOF));
333 if (data->phbErrorStatus)
334 pr_info("PhbErr: %016llx %016llx %016llx %016llx\n",
335 be64_to_cpu(data->phbErrorStatus),
336 be64_to_cpu(data->phbFirstErrorStatus),
337 be64_to_cpu(data->phbErrorLog0),
338 be64_to_cpu(data->phbErrorLog1));
339 if (data->mmioErrorStatus)
340 pr_info("OutErr: %016llx %016llx %016llx %016llx\n",
341 be64_to_cpu(data->mmioErrorStatus),
342 be64_to_cpu(data->mmioFirstErrorStatus),
343 be64_to_cpu(data->mmioErrorLog0),
344 be64_to_cpu(data->mmioErrorLog1));
345 if (data->dma0ErrorStatus)
346 pr_info("InAErr: %016llx %016llx %016llx %016llx\n",
347 be64_to_cpu(data->dma0ErrorStatus),
348 be64_to_cpu(data->dma0FirstErrorStatus),
349 be64_to_cpu(data->dma0ErrorLog0),
350 be64_to_cpu(data->dma0ErrorLog1));
351 if (data->dma1ErrorStatus)
352 pr_info("InBErr: %016llx %016llx %016llx %016llx\n",
353 be64_to_cpu(data->dma1ErrorStatus),
354 be64_to_cpu(data->dma1FirstErrorStatus),
355 be64_to_cpu(data->dma1ErrorLog0),
356 be64_to_cpu(data->dma1ErrorLog1));
358 pnv_pci_dump_pest(data->pestA, data->pestB, OPAL_PHB3_NUM_PEST_REGS);
361 static void pnv_pci_dump_phb4_diag_data(struct pci_controller *hose,
362 struct OpalIoPhbErrorCommon *common)
364 struct OpalIoPhb4ErrorData *data;
366 data = (struct OpalIoPhb4ErrorData*)common;
367 pr_info("PHB4 PHB#%d Diag-data (Version: %d)\n",
368 hose->global_number, be32_to_cpu(common->version));
369 if (data->brdgCtl)
370 pr_info("brdgCtl: %08x\n",
371 be32_to_cpu(data->brdgCtl));
372 if (data->deviceStatus || data->slotStatus ||
373 data->linkStatus || data->devCmdStatus ||
374 data->devSecStatus)
375 pr_info("RootSts: %08x %08x %08x %08x %08x\n",
376 be32_to_cpu(data->deviceStatus),
377 be32_to_cpu(data->slotStatus),
378 be32_to_cpu(data->linkStatus),
379 be32_to_cpu(data->devCmdStatus),
380 be32_to_cpu(data->devSecStatus));
381 if (data->rootErrorStatus || data->uncorrErrorStatus ||
382 data->corrErrorStatus)
383 pr_info("RootErrSts: %08x %08x %08x\n",
384 be32_to_cpu(data->rootErrorStatus),
385 be32_to_cpu(data->uncorrErrorStatus),
386 be32_to_cpu(data->corrErrorStatus));
387 if (data->tlpHdr1 || data->tlpHdr2 ||
388 data->tlpHdr3 || data->tlpHdr4)
389 pr_info("RootErrLog: %08x %08x %08x %08x\n",
390 be32_to_cpu(data->tlpHdr1),
391 be32_to_cpu(data->tlpHdr2),
392 be32_to_cpu(data->tlpHdr3),
393 be32_to_cpu(data->tlpHdr4));
394 if (data->sourceId)
395 pr_info("sourceId: %08x\n", be32_to_cpu(data->sourceId));
396 if (data->nFir)
397 pr_info("nFir: %016llx %016llx %016llx\n",
398 be64_to_cpu(data->nFir),
399 be64_to_cpu(data->nFirMask),
400 be64_to_cpu(data->nFirWOF));
401 if (data->phbPlssr || data->phbCsr)
402 pr_info("PhbSts: %016llx %016llx\n",
403 be64_to_cpu(data->phbPlssr),
404 be64_to_cpu(data->phbCsr));
405 if (data->lemFir)
406 pr_info("Lem: %016llx %016llx %016llx\n",
407 be64_to_cpu(data->lemFir),
408 be64_to_cpu(data->lemErrorMask),
409 be64_to_cpu(data->lemWOF));
410 if (data->phbErrorStatus)
411 pr_info("PhbErr: %016llx %016llx %016llx %016llx\n",
412 be64_to_cpu(data->phbErrorStatus),
413 be64_to_cpu(data->phbFirstErrorStatus),
414 be64_to_cpu(data->phbErrorLog0),
415 be64_to_cpu(data->phbErrorLog1));
416 if (data->phbTxeErrorStatus)
417 pr_info("PhbTxeErr: %016llx %016llx %016llx %016llx\n",
418 be64_to_cpu(data->phbTxeErrorStatus),
419 be64_to_cpu(data->phbTxeFirstErrorStatus),
420 be64_to_cpu(data->phbTxeErrorLog0),
421 be64_to_cpu(data->phbTxeErrorLog1));
422 if (data->phbRxeArbErrorStatus)
423 pr_info("RxeArbErr: %016llx %016llx %016llx %016llx\n",
424 be64_to_cpu(data->phbRxeArbErrorStatus),
425 be64_to_cpu(data->phbRxeArbFirstErrorStatus),
426 be64_to_cpu(data->phbRxeArbErrorLog0),
427 be64_to_cpu(data->phbRxeArbErrorLog1));
428 if (data->phbRxeMrgErrorStatus)
429 pr_info("RxeMrgErr: %016llx %016llx %016llx %016llx\n",
430 be64_to_cpu(data->phbRxeMrgErrorStatus),
431 be64_to_cpu(data->phbRxeMrgFirstErrorStatus),
432 be64_to_cpu(data->phbRxeMrgErrorLog0),
433 be64_to_cpu(data->phbRxeMrgErrorLog1));
434 if (data->phbRxeTceErrorStatus)
435 pr_info("RxeTceErr: %016llx %016llx %016llx %016llx\n",
436 be64_to_cpu(data->phbRxeTceErrorStatus),
437 be64_to_cpu(data->phbRxeTceFirstErrorStatus),
438 be64_to_cpu(data->phbRxeTceErrorLog0),
439 be64_to_cpu(data->phbRxeTceErrorLog1));
441 if (data->phbPblErrorStatus)
442 pr_info("PblErr: %016llx %016llx %016llx %016llx\n",
443 be64_to_cpu(data->phbPblErrorStatus),
444 be64_to_cpu(data->phbPblFirstErrorStatus),
445 be64_to_cpu(data->phbPblErrorLog0),
446 be64_to_cpu(data->phbPblErrorLog1));
447 if (data->phbPcieDlpErrorStatus)
448 pr_info("PcieDlp: %016llx %016llx %016llx\n",
449 be64_to_cpu(data->phbPcieDlpErrorLog1),
450 be64_to_cpu(data->phbPcieDlpErrorLog2),
451 be64_to_cpu(data->phbPcieDlpErrorStatus));
452 if (data->phbRegbErrorStatus)
453 pr_info("RegbErr: %016llx %016llx %016llx %016llx\n",
454 be64_to_cpu(data->phbRegbErrorStatus),
455 be64_to_cpu(data->phbRegbFirstErrorStatus),
456 be64_to_cpu(data->phbRegbErrorLog0),
457 be64_to_cpu(data->phbRegbErrorLog1));
460 pnv_pci_dump_pest(data->pestA, data->pestB, OPAL_PHB4_NUM_PEST_REGS);
463 void pnv_pci_dump_phb_diag_data(struct pci_controller *hose,
464 unsigned char *log_buff)
466 struct OpalIoPhbErrorCommon *common;
468 if (!hose || !log_buff)
469 return;
471 common = (struct OpalIoPhbErrorCommon *)log_buff;
472 switch (be32_to_cpu(common->ioType)) {
473 case OPAL_PHB_ERROR_DATA_TYPE_P7IOC:
474 pnv_pci_dump_p7ioc_diag_data(hose, common);
475 break;
476 case OPAL_PHB_ERROR_DATA_TYPE_PHB3:
477 pnv_pci_dump_phb3_diag_data(hose, common);
478 break;
479 case OPAL_PHB_ERROR_DATA_TYPE_PHB4:
480 pnv_pci_dump_phb4_diag_data(hose, common);
481 break;
482 default:
483 pr_warn("%s: Unrecognized ioType %d\n",
484 __func__, be32_to_cpu(common->ioType));
488 static void pnv_pci_handle_eeh_config(struct pnv_phb *phb, u32 pe_no)
490 unsigned long flags, rc;
491 int has_diag, ret = 0;
493 spin_lock_irqsave(&phb->lock, flags);
495 /* Fetch PHB diag-data */
496 rc = opal_pci_get_phb_diag_data2(phb->opal_id, phb->diag_data,
497 phb->diag_data_size);
498 has_diag = (rc == OPAL_SUCCESS);
500 /* If PHB supports compound PE, to handle it */
501 if (phb->unfreeze_pe) {
502 ret = phb->unfreeze_pe(phb,
503 pe_no,
504 OPAL_EEH_ACTION_CLEAR_FREEZE_ALL);
505 } else {
506 rc = opal_pci_eeh_freeze_clear(phb->opal_id,
507 pe_no,
508 OPAL_EEH_ACTION_CLEAR_FREEZE_ALL);
509 if (rc) {
510 pr_warn("%s: Failure %ld clearing frozen "
511 "PHB#%x-PE#%x\n",
512 __func__, rc, phb->hose->global_number,
513 pe_no);
514 ret = -EIO;
519 * For now, let's only display the diag buffer when we fail to clear
520 * the EEH status. We'll do more sensible things later when we have
521 * proper EEH support. We need to make sure we don't pollute ourselves
522 * with the normal errors generated when probing empty slots
524 if (has_diag && ret)
525 pnv_pci_dump_phb_diag_data(phb->hose, phb->diag_data);
527 spin_unlock_irqrestore(&phb->lock, flags);
530 static void pnv_pci_config_check_eeh(struct pci_dn *pdn)
532 struct pnv_phb *phb = pdn->phb->private_data;
533 u8 fstate = 0;
534 __be16 pcierr = 0;
535 unsigned int pe_no;
536 s64 rc;
539 * Get the PE#. During the PCI probe stage, we might not
540 * setup that yet. So all ER errors should be mapped to
541 * reserved PE.
543 pe_no = pdn->pe_number;
544 if (pe_no == IODA_INVALID_PE) {
545 pe_no = phb->ioda.reserved_pe_idx;
549 * Fetch frozen state. If the PHB support compound PE,
550 * we need handle that case.
552 if (phb->get_pe_state) {
553 fstate = phb->get_pe_state(phb, pe_no);
554 } else {
555 rc = opal_pci_eeh_freeze_status(phb->opal_id,
556 pe_no,
557 &fstate,
558 &pcierr,
559 NULL);
560 if (rc) {
561 pr_warn("%s: Failure %lld getting PHB#%x-PE#%x state\n",
562 __func__, rc, phb->hose->global_number, pe_no);
563 return;
567 pr_devel(" -> EEH check, bdfn=%04x PE#%x fstate=%x\n",
568 (pdn->busno << 8) | (pdn->devfn), pe_no, fstate);
570 /* Clear the frozen state if applicable */
571 if (fstate == OPAL_EEH_STOPPED_MMIO_FREEZE ||
572 fstate == OPAL_EEH_STOPPED_DMA_FREEZE ||
573 fstate == OPAL_EEH_STOPPED_MMIO_DMA_FREEZE) {
575 * If PHB supports compound PE, freeze it for
576 * consistency.
578 if (phb->freeze_pe)
579 phb->freeze_pe(phb, pe_no);
581 pnv_pci_handle_eeh_config(phb, pe_no);
585 int pnv_pci_cfg_read(struct pci_dn *pdn,
586 int where, int size, u32 *val)
588 struct pnv_phb *phb = pdn->phb->private_data;
589 u32 bdfn = (pdn->busno << 8) | pdn->devfn;
590 s64 rc;
592 switch (size) {
593 case 1: {
594 u8 v8;
595 rc = opal_pci_config_read_byte(phb->opal_id, bdfn, where, &v8);
596 *val = (rc == OPAL_SUCCESS) ? v8 : 0xff;
597 break;
599 case 2: {
600 __be16 v16;
601 rc = opal_pci_config_read_half_word(phb->opal_id, bdfn, where,
602 &v16);
603 *val = (rc == OPAL_SUCCESS) ? be16_to_cpu(v16) : 0xffff;
604 break;
606 case 4: {
607 __be32 v32;
608 rc = opal_pci_config_read_word(phb->opal_id, bdfn, where, &v32);
609 *val = (rc == OPAL_SUCCESS) ? be32_to_cpu(v32) : 0xffffffff;
610 break;
612 default:
613 return PCIBIOS_FUNC_NOT_SUPPORTED;
616 pr_devel("%s: bus: %x devfn: %x +%x/%x -> %08x\n",
617 __func__, pdn->busno, pdn->devfn, where, size, *val);
618 return PCIBIOS_SUCCESSFUL;
621 int pnv_pci_cfg_write(struct pci_dn *pdn,
622 int where, int size, u32 val)
624 struct pnv_phb *phb = pdn->phb->private_data;
625 u32 bdfn = (pdn->busno << 8) | pdn->devfn;
627 pr_devel("%s: bus: %x devfn: %x +%x/%x -> %08x\n",
628 __func__, pdn->busno, pdn->devfn, where, size, val);
629 switch (size) {
630 case 1:
631 opal_pci_config_write_byte(phb->opal_id, bdfn, where, val);
632 break;
633 case 2:
634 opal_pci_config_write_half_word(phb->opal_id, bdfn, where, val);
635 break;
636 case 4:
637 opal_pci_config_write_word(phb->opal_id, bdfn, where, val);
638 break;
639 default:
640 return PCIBIOS_FUNC_NOT_SUPPORTED;
643 return PCIBIOS_SUCCESSFUL;
646 #ifdef CONFIG_EEH
647 static bool pnv_pci_cfg_check(struct pci_dn *pdn)
649 struct eeh_dev *edev = NULL;
650 struct pnv_phb *phb = pdn->phb->private_data;
652 /* EEH not enabled ? */
653 if (!(phb->flags & PNV_PHB_FLAG_EEH))
654 return true;
656 /* PE reset or device removed ? */
657 edev = pdn->edev;
658 if (edev) {
659 if (edev->pe &&
660 (edev->pe->state & EEH_PE_CFG_BLOCKED))
661 return false;
663 if (edev->mode & EEH_DEV_REMOVED)
664 return false;
667 return true;
669 #else
670 static inline pnv_pci_cfg_check(struct pci_dn *pdn)
672 return true;
674 #endif /* CONFIG_EEH */
676 static int pnv_pci_read_config(struct pci_bus *bus,
677 unsigned int devfn,
678 int where, int size, u32 *val)
680 struct pci_dn *pdn;
681 struct pnv_phb *phb;
682 int ret;
684 *val = 0xFFFFFFFF;
685 pdn = pci_get_pdn_by_devfn(bus, devfn);
686 if (!pdn)
687 return PCIBIOS_DEVICE_NOT_FOUND;
689 if (!pnv_pci_cfg_check(pdn))
690 return PCIBIOS_DEVICE_NOT_FOUND;
692 ret = pnv_pci_cfg_read(pdn, where, size, val);
693 phb = pdn->phb->private_data;
694 if (phb->flags & PNV_PHB_FLAG_EEH && pdn->edev) {
695 if (*val == EEH_IO_ERROR_VALUE(size) &&
696 eeh_dev_check_failure(pdn->edev))
697 return PCIBIOS_DEVICE_NOT_FOUND;
698 } else {
699 pnv_pci_config_check_eeh(pdn);
702 return ret;
705 static int pnv_pci_write_config(struct pci_bus *bus,
706 unsigned int devfn,
707 int where, int size, u32 val)
709 struct pci_dn *pdn;
710 struct pnv_phb *phb;
711 int ret;
713 pdn = pci_get_pdn_by_devfn(bus, devfn);
714 if (!pdn)
715 return PCIBIOS_DEVICE_NOT_FOUND;
717 if (!pnv_pci_cfg_check(pdn))
718 return PCIBIOS_DEVICE_NOT_FOUND;
720 ret = pnv_pci_cfg_write(pdn, where, size, val);
721 phb = pdn->phb->private_data;
722 if (!(phb->flags & PNV_PHB_FLAG_EEH))
723 pnv_pci_config_check_eeh(pdn);
725 return ret;
728 struct pci_ops pnv_pci_ops = {
729 .read = pnv_pci_read_config,
730 .write = pnv_pci_write_config,
733 struct iommu_table *pnv_pci_table_alloc(int nid)
735 struct iommu_table *tbl;
737 tbl = kzalloc_node(sizeof(struct iommu_table), GFP_KERNEL, nid);
738 if (!tbl)
739 return NULL;
741 INIT_LIST_HEAD_RCU(&tbl->it_group_list);
742 kref_init(&tbl->it_kref);
744 return tbl;
747 struct device_node *pnv_pci_get_phb_node(struct pci_dev *dev)
749 struct pci_controller *hose = pci_bus_to_host(dev->bus);
751 return of_node_get(hose->dn);
753 EXPORT_SYMBOL(pnv_pci_get_phb_node);
755 int pnv_pci_set_tunnel_bar(struct pci_dev *dev, u64 addr, int enable)
757 struct pnv_phb *phb = pci_bus_to_pnvhb(dev->bus);
758 u64 tunnel_bar;
759 __be64 val;
760 int rc;
762 if (!opal_check_token(OPAL_PCI_GET_PBCQ_TUNNEL_BAR))
763 return -ENXIO;
764 if (!opal_check_token(OPAL_PCI_SET_PBCQ_TUNNEL_BAR))
765 return -ENXIO;
767 mutex_lock(&tunnel_mutex);
768 rc = opal_pci_get_pbcq_tunnel_bar(phb->opal_id, &val);
769 if (rc != OPAL_SUCCESS) {
770 rc = -EIO;
771 goto out;
773 tunnel_bar = be64_to_cpu(val);
774 if (enable) {
776 * Only one device per PHB can use atomics.
777 * Our policy is first-come, first-served.
779 if (tunnel_bar) {
780 if (tunnel_bar != addr)
781 rc = -EBUSY;
782 else
783 rc = 0; /* Setting same address twice is ok */
784 goto out;
786 } else {
788 * The device that owns atomics and wants to release
789 * them must pass the same address with enable == 0.
791 if (tunnel_bar != addr) {
792 rc = -EPERM;
793 goto out;
795 addr = 0x0ULL;
797 rc = opal_pci_set_pbcq_tunnel_bar(phb->opal_id, addr);
798 rc = opal_error_code(rc);
799 out:
800 mutex_unlock(&tunnel_mutex);
801 return rc;
803 EXPORT_SYMBOL_GPL(pnv_pci_set_tunnel_bar);
805 void pnv_pci_shutdown(void)
807 struct pci_controller *hose;
809 list_for_each_entry(hose, &hose_list, list_node)
810 if (hose->controller_ops.shutdown)
811 hose->controller_ops.shutdown(hose);
814 /* Fixup wrong class code in p7ioc and p8 root complex */
815 static void pnv_p7ioc_rc_quirk(struct pci_dev *dev)
817 dev->class = PCI_CLASS_BRIDGE_PCI_NORMAL;
819 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_IBM, 0x3b9, pnv_p7ioc_rc_quirk);
821 void __init pnv_pci_init(void)
823 struct device_node *np;
825 pci_add_flags(PCI_CAN_SKIP_ISA_ALIGN);
827 /* If we don't have OPAL, eg. in sim, just skip PCI probe */
828 if (!firmware_has_feature(FW_FEATURE_OPAL))
829 return;
831 #ifdef CONFIG_PCIEPORTBUS
833 * On PowerNV PCIe devices are (currently) managed in cooperation
834 * with firmware. This isn't *strictly* required, but there's enough
835 * assumptions baked into both firmware and the platform code that
836 * it's unwise to allow the portbus services to be used.
838 * We need to fix this eventually, but for now set this flag to disable
839 * the portbus driver. The AER service isn't required since that AER
840 * events are handled via EEH. The pciehp hotplug driver can't work
841 * without kernel changes (and portbus binding breaks pnv_php). The
842 * other services also require some thinking about how we're going
843 * to integrate them.
845 pcie_ports_disabled = true;
846 #endif
848 /* Look for ioda2 built-in PHB3's */
849 for_each_compatible_node(np, NULL, "ibm,ioda2-phb")
850 pnv_pci_init_ioda2_phb(np);
852 /* Look for ioda3 built-in PHB4's, we treat them as IODA2 */
853 for_each_compatible_node(np, NULL, "ibm,ioda3-phb")
854 pnv_pci_init_ioda2_phb(np);
856 /* Look for NPU2 OpenCAPI PHBs */
857 for_each_compatible_node(np, NULL, "ibm,ioda2-npu2-opencapi-phb")
858 pnv_pci_init_npu2_opencapi_phb(np);
860 /* Configure IOMMU DMA hooks */
861 set_pci_dma_ops(&dma_iommu_ops);