1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Support PCI/PCIe on PowerNV platforms
5 * Copyright 2011 Benjamin Herrenschmidt, IBM Corp.
8 #include <linux/kernel.h>
10 #include <linux/delay.h>
11 #include <linux/string.h>
12 #include <linux/init.h>
13 #include <linux/irq.h>
15 #include <linux/msi.h>
16 #include <linux/iommu.h>
17 #include <linux/sched/mm.h>
19 #include <asm/sections.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>
27 #include <asm/iommu.h>
29 #include <asm/firmware.h>
30 #include <asm/eeh_event.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
;
45 ret
= of_property_read_u32(np
, "reg", &bdfn
);
49 bdfn
= ((bdfn
& 0x00ffff00) >> 8);
50 for (node
= np
; node
; node
= of_get_parent(node
)) {
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")) {
63 ret
= of_property_read_u64(node
, "ibm,opal-phbid", &phbid
);
69 if (of_device_is_compatible(node
, "ibm,ioda2-npu2-opencapi-phb"))
70 *id
= PCI_PHB_SLOT_ID(phbid
);
72 *id
= PCI_SLOT_ID(phbid
, bdfn
);
78 EXPORT_SYMBOL_GPL(pnv_pci_get_slot_id
);
80 int pnv_pci_get_device_tree(uint32_t phandle
, void *buf
, uint64_t len
)
84 if (!opal_check_token(OPAL_GET_DEVICE_TREE
))
87 rc
= opal_get_device_tree(phandle
, (uint64_t)buf
, len
);
88 if (rc
< OPAL_SUCCESS
)
93 EXPORT_SYMBOL_GPL(pnv_pci_get_device_tree
);
95 int pnv_pci_get_presence_state(uint64_t id
, uint8_t *state
)
99 if (!opal_check_token(OPAL_PCI_GET_PRESENCE_STATE
))
102 rc
= opal_pci_get_presence_state(id
, (uint64_t)state
);
103 if (rc
!= OPAL_SUCCESS
)
108 EXPORT_SYMBOL_GPL(pnv_pci_get_presence_state
);
110 int pnv_pci_get_power_state(uint64_t id
, uint8_t *state
)
114 if (!opal_check_token(OPAL_PCI_GET_POWER_STATE
))
117 rc
= opal_pci_get_power_state(id
, (uint64_t)state
);
118 if (rc
!= OPAL_SUCCESS
)
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
)
131 if (!opal_check_token(OPAL_PCI_SET_POWER_STATE
))
134 token
= opal_async_get_token_interruptible();
135 if (unlikely(token
< 0))
138 rc
= opal_pci_set_power_state(token
, id
, (uint64_t)&state
);
139 if (rc
== OPAL_SUCCESS
) {
142 } else if (rc
!= OPAL_ASYNC_COMPLETION
) {
147 ret
= opal_async_wait_response(token
, &m
);
153 memcpy(msg
, &m
, sizeof(m
));
157 opal_async_release_token(token
);
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
;
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
) {
175 pr_info("PE[..%03x] A/B: as above\n", i
-1);
180 if (peA
& PNV_IODA_STOPPED_STATE
||
181 peB
& PNV_IODA_STOPPED_STATE
)
182 pr_info("PE[%03x] A/B: %016llx %016llx\n",
184 } else if (!dup
&& (peA
& PNV_IODA_STOPPED_STATE
||
185 peB
& PNV_IODA_STOPPED_STATE
)) {
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
));
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
||
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
||
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
));
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
));
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
||
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
||
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
));
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
));
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
));
370 pr_info("brdgCtl: %08x\n",
371 be32_to_cpu(data
->brdgCtl
));
372 if (data
->deviceStatus
|| data
->slotStatus
||
373 data
->linkStatus
|| data
->devCmdStatus
||
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
));
395 pr_info("sourceId: %08x\n", be32_to_cpu(data
->sourceId
));
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
));
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
)
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
);
476 case OPAL_PHB_ERROR_DATA_TYPE_PHB3
:
477 pnv_pci_dump_phb3_diag_data(hose
, common
);
479 case OPAL_PHB_ERROR_DATA_TYPE_PHB4
:
480 pnv_pci_dump_phb4_diag_data(hose
, common
);
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
,
504 OPAL_EEH_ACTION_CLEAR_FREEZE_ALL
);
506 rc
= opal_pci_eeh_freeze_clear(phb
->opal_id
,
508 OPAL_EEH_ACTION_CLEAR_FREEZE_ALL
);
510 pr_warn("%s: Failure %ld clearing frozen "
512 __func__
, rc
, phb
->hose
->global_number
,
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
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
;
539 * Get the PE#. During the PCI probe stage, we might not
540 * setup that yet. So all ER errors should be mapped to
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
);
555 rc
= opal_pci_eeh_freeze_status(phb
->opal_id
,
561 pr_warn("%s: Failure %lld getting PHB#%x-PE#%x state\n",
562 __func__
, rc
, phb
->hose
->global_number
, pe_no
);
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
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
;
595 rc
= opal_pci_config_read_byte(phb
->opal_id
, bdfn
, where
, &v8
);
596 *val
= (rc
== OPAL_SUCCESS
) ? v8
: 0xff;
601 rc
= opal_pci_config_read_half_word(phb
->opal_id
, bdfn
, where
,
603 *val
= (rc
== OPAL_SUCCESS
) ? be16_to_cpu(v16
) : 0xffff;
608 rc
= opal_pci_config_read_word(phb
->opal_id
, bdfn
, where
, &v32
);
609 *val
= (rc
== OPAL_SUCCESS
) ? be32_to_cpu(v32
) : 0xffffffff;
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
);
631 opal_pci_config_write_byte(phb
->opal_id
, bdfn
, where
, val
);
634 opal_pci_config_write_half_word(phb
->opal_id
, bdfn
, where
, val
);
637 opal_pci_config_write_word(phb
->opal_id
, bdfn
, where
, val
);
640 return PCIBIOS_FUNC_NOT_SUPPORTED
;
643 return PCIBIOS_SUCCESSFUL
;
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
))
656 /* PE reset or device removed ? */
660 (edev
->pe
->state
& EEH_PE_CFG_BLOCKED
))
663 if (edev
->mode
& EEH_DEV_REMOVED
)
670 static inline pnv_pci_cfg_check(struct pci_dn
*pdn
)
674 #endif /* CONFIG_EEH */
676 static int pnv_pci_read_config(struct pci_bus
*bus
,
678 int where
, int size
, u32
*val
)
685 pdn
= pci_get_pdn_by_devfn(bus
, devfn
);
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
;
699 pnv_pci_config_check_eeh(pdn
);
705 static int pnv_pci_write_config(struct pci_bus
*bus
,
707 int where
, int size
, u32 val
)
713 pdn
= pci_get_pdn_by_devfn(bus
, devfn
);
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
);
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
);
741 INIT_LIST_HEAD_RCU(&tbl
->it_group_list
);
742 kref_init(&tbl
->it_kref
);
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
);
762 if (!opal_check_token(OPAL_PCI_GET_PBCQ_TUNNEL_BAR
))
764 if (!opal_check_token(OPAL_PCI_SET_PBCQ_TUNNEL_BAR
))
767 mutex_lock(&tunnel_mutex
);
768 rc
= opal_pci_get_pbcq_tunnel_bar(phb
->opal_id
, &val
);
769 if (rc
!= OPAL_SUCCESS
) {
773 tunnel_bar
= be64_to_cpu(val
);
776 * Only one device per PHB can use atomics.
777 * Our policy is first-come, first-served.
780 if (tunnel_bar
!= addr
)
783 rc
= 0; /* Setting same address twice is ok */
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
) {
797 rc
= opal_pci_set_pbcq_tunnel_bar(phb
->opal_id
, addr
);
798 rc
= opal_error_code(rc
);
800 mutex_unlock(&tunnel_mutex
);
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
))
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
845 pcie_ports_disabled
= true;
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
);