1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * The file intends to implement the platform dependent EEH operations on pseries. 4 * Actually, the pseries platform is built based on RTAS heavily. That means the 5 * pseries platform dependent EEH operations will be built on RTAS calls. The functions 6 * are derived from arch/powerpc/platforms/pseries/eeh.c and necessary cleanup has 7 * been done. 8 * 9 * Copyright Benjamin Herrenschmidt & Gavin Shan, IBM Corporation 2011. 10 * Copyright IBM Corporation 2001, 2005, 2006 11 * Copyright Dave Engebretsen & Todd Inglett 2001 12 * Copyright Linas Vepstas 2005, 2006 13 */ 14 15 #include <linux/atomic.h> 16 #include <linux/delay.h> 17 #include <linux/export.h> 18 #include <linux/init.h> 19 #include <linux/list.h> 20 #include <linux/of.h> 21 #include <linux/pci.h> 22 #include <linux/proc_fs.h> 23 #include <linux/rbtree.h> 24 #include <linux/sched.h> 25 #include <linux/seq_file.h> 26 #include <linux/spinlock.h> 27 #include <linux/crash_dump.h> 28 29 #include <asm/eeh.h> 30 #include <asm/eeh_event.h> 31 #include <asm/io.h> 32 #include <asm/machdep.h> 33 #include <asm/ppc-pci.h> 34 #include <asm/rtas.h> 35 36 /* RTAS tokens */ 37 static int ibm_set_eeh_option; 38 static int ibm_set_slot_reset; 39 static int ibm_read_slot_reset_state; 40 static int ibm_read_slot_reset_state2; 41 static int ibm_slot_error_detail; 42 static int ibm_get_config_addr_info; 43 static int ibm_get_config_addr_info2; 44 static int ibm_configure_pe; 45 46 static void pseries_pcibios_bus_add_device(struct pci_dev *pdev) 47 { 48 struct pci_dn *pdn = pci_get_pdn(pdev); 49 50 if (eeh_has_flag(EEH_FORCE_DISABLED)) 51 return; 52 53 dev_dbg(&pdev->dev, "EEH: Setting up device\n"); 54 #ifdef CONFIG_PCI_IOV 55 if (pdev->is_virtfn) { 56 pdn->device_id = pdev->device; 57 pdn->vendor_id = pdev->vendor; 58 pdn->class_code = pdev->class; 59 /* 60 * Last allow unfreeze return code used for retrieval 61 * by user space in eeh-sysfs to show the last command 62 * completion from platform. 63 */ 64 pdn->last_allow_rc = 0; 65 } 66 #endif 67 pseries_eeh_init_edev(pdn); 68 #ifdef CONFIG_PCI_IOV 69 if (pdev->is_virtfn) { 70 /* 71 * FIXME: This really should be handled by choosing the right 72 * parent PE in in pseries_eeh_init_edev(). 73 */ 74 struct eeh_pe *physfn_pe = pci_dev_to_eeh_dev(pdev->physfn)->pe; 75 struct eeh_dev *edev = pdn_to_eeh_dev(pdn); 76 77 edev->pe_config_addr = (pdn->busno << 16) | (pdn->devfn << 8); 78 eeh_pe_tree_remove(edev); /* Remove as it is adding to bus pe */ 79 eeh_pe_tree_insert(edev, physfn_pe); /* Add as VF PE type */ 80 } 81 #endif 82 eeh_probe_device(pdev); 83 } 84 85 86 /** 87 * pseries_eeh_get_pe_config_addr - Find the pe_config_addr for a device 88 * @pdn: pci_dn of the input device 89 * 90 * The EEH RTAS calls use a tuple consisting of: (buid_hi, buid_lo, 91 * pe_config_addr) as a handle to a given PE. This function finds the 92 * pe_config_addr based on the device's config addr. 93 * 94 * Keep in mind that the pe_config_addr *might* be numerically identical to the 95 * device's config addr, but the two are conceptually distinct. 96 * 97 * Returns the pe_config_addr, or a negative error code. 98 */ 99 static int pseries_eeh_get_pe_config_addr(struct pci_dn *pdn) 100 { 101 int config_addr = rtas_config_addr(pdn->busno, pdn->devfn, 0); 102 struct pci_controller *phb = pdn->phb; 103 int ret, rets[3]; 104 105 if (ibm_get_config_addr_info2 != RTAS_UNKNOWN_SERVICE) { 106 /* 107 * First of all, use function 1 to determine if this device is 108 * part of a PE or not. ret[0] being zero indicates it's not. 109 */ 110 ret = rtas_call(ibm_get_config_addr_info2, 4, 2, rets, 111 config_addr, BUID_HI(phb->buid), 112 BUID_LO(phb->buid), 1); 113 if (ret || (rets[0] == 0)) 114 return -ENOENT; 115 116 /* Retrieve the associated PE config address with function 0 */ 117 ret = rtas_call(ibm_get_config_addr_info2, 4, 2, rets, 118 config_addr, BUID_HI(phb->buid), 119 BUID_LO(phb->buid), 0); 120 if (ret) { 121 pr_warn("%s: Failed to get address for PHB#%x-PE#%x\n", 122 __func__, phb->global_number, config_addr); 123 return -ENXIO; 124 } 125 126 return rets[0]; 127 } 128 129 if (ibm_get_config_addr_info != RTAS_UNKNOWN_SERVICE) { 130 ret = rtas_call(ibm_get_config_addr_info, 4, 2, rets, 131 config_addr, BUID_HI(phb->buid), 132 BUID_LO(phb->buid), 0); 133 if (ret) { 134 pr_warn("%s: Failed to get address for PHB#%x-PE#%x\n", 135 __func__, phb->global_number, config_addr); 136 return -ENXIO; 137 } 138 139 return rets[0]; 140 } 141 142 /* 143 * PAPR does describe a process for finding the pe_config_addr that was 144 * used before the ibm,get-config-addr-info calls were added. However, 145 * I haven't found *any* systems that don't have that RTAS call 146 * implemented. If you happen to find one that needs the old DT based 147 * process, patches are welcome! 148 */ 149 return -ENOENT; 150 } 151 152 /** 153 * pseries_eeh_phb_reset - Reset the specified PHB 154 * @phb: PCI controller 155 * @config_adddr: the associated config address 156 * @option: reset option 157 * 158 * Reset the specified PHB/PE 159 */ 160 static int pseries_eeh_phb_reset(struct pci_controller *phb, int config_addr, int option) 161 { 162 int ret; 163 164 /* Reset PE through RTAS call */ 165 ret = rtas_call(ibm_set_slot_reset, 4, 1, NULL, 166 config_addr, BUID_HI(phb->buid), 167 BUID_LO(phb->buid), option); 168 169 /* If fundamental-reset not supported, try hot-reset */ 170 if (option == EEH_RESET_FUNDAMENTAL && ret == -8) { 171 option = EEH_RESET_HOT; 172 ret = rtas_call(ibm_set_slot_reset, 4, 1, NULL, 173 config_addr, BUID_HI(phb->buid), 174 BUID_LO(phb->buid), option); 175 } 176 177 /* We need reset hold or settlement delay */ 178 if (option == EEH_RESET_FUNDAMENTAL || option == EEH_RESET_HOT) 179 msleep(EEH_PE_RST_HOLD_TIME); 180 else 181 msleep(EEH_PE_RST_SETTLE_TIME); 182 183 return ret; 184 } 185 186 /** 187 * pseries_eeh_phb_configure_bridge - Configure PCI bridges in the indicated PE 188 * @phb: PCI controller 189 * @config_adddr: the associated config address 190 * 191 * The function will be called to reconfigure the bridges included 192 * in the specified PE so that the mulfunctional PE would be recovered 193 * again. 194 */ 195 static int pseries_eeh_phb_configure_bridge(struct pci_controller *phb, int config_addr) 196 { 197 int ret; 198 /* Waiting 0.2s maximum before skipping configuration */ 199 int max_wait = 200; 200 201 while (max_wait > 0) { 202 ret = rtas_call(ibm_configure_pe, 3, 1, NULL, 203 config_addr, BUID_HI(phb->buid), 204 BUID_LO(phb->buid)); 205 206 if (!ret) 207 return ret; 208 if (ret < 0) 209 break; 210 211 /* 212 * If RTAS returns a delay value that's above 100ms, cut it 213 * down to 100ms in case firmware made a mistake. For more 214 * on how these delay values work see rtas_busy_delay_time 215 */ 216 if (ret > RTAS_EXTENDED_DELAY_MIN+2 && 217 ret <= RTAS_EXTENDED_DELAY_MAX) 218 ret = RTAS_EXTENDED_DELAY_MIN+2; 219 220 max_wait -= rtas_busy_delay_time(ret); 221 222 if (max_wait < 0) 223 break; 224 225 rtas_busy_delay(ret); 226 } 227 228 pr_warn("%s: Unable to configure bridge PHB#%x-PE#%x (%d)\n", 229 __func__, phb->global_number, config_addr, ret); 230 /* PAPR defines -3 as "Parameter Error" for this function: */ 231 if (ret == -3) 232 return -EINVAL; 233 else 234 return -EIO; 235 } 236 237 /* 238 * Buffer for reporting slot-error-detail rtas calls. Its here 239 * in BSS, and not dynamically alloced, so that it ends up in 240 * RMO where RTAS can access it. 241 */ 242 static unsigned char slot_errbuf[RTAS_ERROR_LOG_MAX]; 243 static DEFINE_SPINLOCK(slot_errbuf_lock); 244 static int eeh_error_buf_size; 245 246 static int pseries_eeh_cap_start(struct pci_dn *pdn) 247 { 248 u32 status; 249 250 if (!pdn) 251 return 0; 252 253 rtas_read_config(pdn, PCI_STATUS, 2, &status); 254 if (!(status & PCI_STATUS_CAP_LIST)) 255 return 0; 256 257 return PCI_CAPABILITY_LIST; 258 } 259 260 261 static int pseries_eeh_find_cap(struct pci_dn *pdn, int cap) 262 { 263 int pos = pseries_eeh_cap_start(pdn); 264 int cnt = 48; /* Maximal number of capabilities */ 265 u32 id; 266 267 if (!pos) 268 return 0; 269 270 while (cnt--) { 271 rtas_read_config(pdn, pos, 1, &pos); 272 if (pos < 0x40) 273 break; 274 pos &= ~3; 275 rtas_read_config(pdn, pos + PCI_CAP_LIST_ID, 1, &id); 276 if (id == 0xff) 277 break; 278 if (id == cap) 279 return pos; 280 pos += PCI_CAP_LIST_NEXT; 281 } 282 283 return 0; 284 } 285 286 static int pseries_eeh_find_ecap(struct pci_dn *pdn, int cap) 287 { 288 struct eeh_dev *edev = pdn_to_eeh_dev(pdn); 289 u32 header; 290 int pos = 256; 291 int ttl = (4096 - 256) / 8; 292 293 if (!edev || !edev->pcie_cap) 294 return 0; 295 if (rtas_read_config(pdn, pos, 4, &header) != PCIBIOS_SUCCESSFUL) 296 return 0; 297 else if (!header) 298 return 0; 299 300 while (ttl-- > 0) { 301 if (PCI_EXT_CAP_ID(header) == cap && pos) 302 return pos; 303 304 pos = PCI_EXT_CAP_NEXT(header); 305 if (pos < 256) 306 break; 307 308 if (rtas_read_config(pdn, pos, 4, &header) != PCIBIOS_SUCCESSFUL) 309 break; 310 } 311 312 return 0; 313 } 314 315 /** 316 * pseries_eeh_pe_get_parent - Retrieve the parent PE 317 * @edev: EEH device 318 * 319 * The whole PEs existing in the system are organized as hierarchy 320 * tree. The function is used to retrieve the parent PE according 321 * to the parent EEH device. 322 */ 323 static struct eeh_pe *pseries_eeh_pe_get_parent(struct eeh_dev *edev) 324 { 325 struct eeh_dev *parent; 326 struct pci_dn *pdn = eeh_dev_to_pdn(edev); 327 328 /* 329 * It might have the case for the indirect parent 330 * EEH device already having associated PE, but 331 * the direct parent EEH device doesn't have yet. 332 */ 333 if (edev->physfn) 334 pdn = pci_get_pdn(edev->physfn); 335 else 336 pdn = pdn ? pdn->parent : NULL; 337 while (pdn) { 338 /* We're poking out of PCI territory */ 339 parent = pdn_to_eeh_dev(pdn); 340 if (!parent) 341 return NULL; 342 343 if (parent->pe) 344 return parent->pe; 345 346 pdn = pdn->parent; 347 } 348 349 return NULL; 350 } 351 352 /** 353 * pseries_eeh_init_edev - initialise the eeh_dev and eeh_pe for a pci_dn 354 * 355 * @pdn: PCI device node 356 * 357 * When we discover a new PCI device via the device-tree we create a 358 * corresponding pci_dn and we allocate, but don't initialise, an eeh_dev. 359 * This function takes care of the initialisation and inserts the eeh_dev 360 * into the correct eeh_pe. If no eeh_pe exists we'll allocate one. 361 */ 362 void pseries_eeh_init_edev(struct pci_dn *pdn) 363 { 364 struct eeh_pe pe, *parent; 365 struct eeh_dev *edev; 366 u32 pcie_flags; 367 int ret; 368 369 if (WARN_ON_ONCE(!eeh_has_flag(EEH_PROBE_MODE_DEVTREE))) 370 return; 371 372 /* 373 * Find the eeh_dev for this pdn. The storage for the eeh_dev was 374 * allocated at the same time as the pci_dn. 375 * 376 * XXX: We should probably re-visit that. 377 */ 378 edev = pdn_to_eeh_dev(pdn); 379 if (!edev) 380 return; 381 382 /* 383 * If ->pe is set then we've already probed this device. We hit 384 * this path when a pci_dev is removed and rescanned while recovering 385 * a PE (i.e. for devices where the driver doesn't support error 386 * recovery). 387 */ 388 if (edev->pe) 389 return; 390 391 /* Check class/vendor/device IDs */ 392 if (!pdn->vendor_id || !pdn->device_id || !pdn->class_code) 393 return; 394 395 /* Skip for PCI-ISA bridge */ 396 if ((pdn->class_code >> 8) == PCI_CLASS_BRIDGE_ISA) 397 return; 398 399 eeh_edev_dbg(edev, "Probing device\n"); 400 401 /* 402 * Update class code and mode of eeh device. We need 403 * correctly reflects that current device is root port 404 * or PCIe switch downstream port. 405 */ 406 edev->pcix_cap = pseries_eeh_find_cap(pdn, PCI_CAP_ID_PCIX); 407 edev->pcie_cap = pseries_eeh_find_cap(pdn, PCI_CAP_ID_EXP); 408 edev->aer_cap = pseries_eeh_find_ecap(pdn, PCI_EXT_CAP_ID_ERR); 409 edev->mode &= 0xFFFFFF00; 410 if ((pdn->class_code >> 8) == PCI_CLASS_BRIDGE_PCI) { 411 edev->mode |= EEH_DEV_BRIDGE; 412 if (edev->pcie_cap) { 413 rtas_read_config(pdn, edev->pcie_cap + PCI_EXP_FLAGS, 414 2, &pcie_flags); 415 pcie_flags = (pcie_flags & PCI_EXP_FLAGS_TYPE) >> 4; 416 if (pcie_flags == PCI_EXP_TYPE_ROOT_PORT) 417 edev->mode |= EEH_DEV_ROOT_PORT; 418 else if (pcie_flags == PCI_EXP_TYPE_DOWNSTREAM) 419 edev->mode |= EEH_DEV_DS_PORT; 420 } 421 } 422 423 /* first up, find the pe_config_addr for the PE containing the device */ 424 ret = pseries_eeh_get_pe_config_addr(pdn); 425 if (ret < 0) { 426 eeh_edev_dbg(edev, "Unable to find pe_config_addr\n"); 427 goto err; 428 } 429 430 /* Try enable EEH on the fake PE */ 431 memset(&pe, 0, sizeof(struct eeh_pe)); 432 pe.phb = pdn->phb; 433 pe.addr = ret; 434 435 eeh_edev_dbg(edev, "Enabling EEH on device\n"); 436 ret = eeh_ops->set_option(&pe, EEH_OPT_ENABLE); 437 if (ret) { 438 eeh_edev_dbg(edev, "EEH failed to enable on device (code %d)\n", ret); 439 goto err; 440 } 441 442 edev->pe_config_addr = pe.addr; 443 444 eeh_add_flag(EEH_ENABLED); 445 446 parent = pseries_eeh_pe_get_parent(edev); 447 eeh_pe_tree_insert(edev, parent); 448 eeh_save_bars(edev); 449 eeh_edev_dbg(edev, "EEH enabled for device"); 450 451 return; 452 453 err: 454 eeh_edev_dbg(edev, "EEH is unsupported on device (code = %d)\n", ret); 455 } 456 457 static struct eeh_dev *pseries_eeh_probe(struct pci_dev *pdev) 458 { 459 struct eeh_dev *edev; 460 struct pci_dn *pdn; 461 462 pdn = pci_get_pdn_by_devfn(pdev->bus, pdev->devfn); 463 if (!pdn) 464 return NULL; 465 466 /* 467 * If the system supports EEH on this device then the eeh_dev was 468 * configured and inserted into a PE in pseries_eeh_init_edev() 469 */ 470 edev = pdn_to_eeh_dev(pdn); 471 if (!edev || !edev->pe) 472 return NULL; 473 474 return edev; 475 } 476 477 /** 478 * pseries_eeh_init_edev_recursive - Enable EEH for the indicated device 479 * @pdn: PCI device node 480 * 481 * This routine must be used to perform EEH initialization for the 482 * indicated PCI device that was added after system boot (e.g. 483 * hotplug, dlpar). 484 */ 485 void pseries_eeh_init_edev_recursive(struct pci_dn *pdn) 486 { 487 struct pci_dn *n; 488 489 if (!pdn) 490 return; 491 492 list_for_each_entry(n, &pdn->child_list, list) 493 pseries_eeh_init_edev_recursive(n); 494 495 pseries_eeh_init_edev(pdn); 496 } 497 EXPORT_SYMBOL_GPL(pseries_eeh_init_edev_recursive); 498 499 /** 500 * pseries_eeh_set_option - Initialize EEH or MMIO/DMA reenable 501 * @pe: EEH PE 502 * @option: operation to be issued 503 * 504 * The function is used to control the EEH functionality globally. 505 * Currently, following options are support according to PAPR: 506 * Enable EEH, Disable EEH, Enable MMIO and Enable DMA 507 */ 508 static int pseries_eeh_set_option(struct eeh_pe *pe, int option) 509 { 510 int ret = 0; 511 512 /* 513 * When we're enabling or disabling EEH functioality on 514 * the particular PE, the PE config address is possibly 515 * unavailable. Therefore, we have to figure it out from 516 * the FDT node. 517 */ 518 switch (option) { 519 case EEH_OPT_DISABLE: 520 case EEH_OPT_ENABLE: 521 case EEH_OPT_THAW_MMIO: 522 case EEH_OPT_THAW_DMA: 523 break; 524 case EEH_OPT_FREEZE_PE: 525 /* Not support */ 526 return 0; 527 default: 528 pr_err("%s: Invalid option %d\n", __func__, option); 529 return -EINVAL; 530 } 531 532 ret = rtas_call(ibm_set_eeh_option, 4, 1, NULL, 533 pe->addr, BUID_HI(pe->phb->buid), 534 BUID_LO(pe->phb->buid), option); 535 536 return ret; 537 } 538 539 /** 540 * pseries_eeh_get_state - Retrieve PE state 541 * @pe: EEH PE 542 * @delay: suggested time to wait if state is unavailable 543 * 544 * Retrieve the state of the specified PE. On RTAS compliant 545 * pseries platform, there already has one dedicated RTAS function 546 * for the purpose. It's notable that the associated PE config address 547 * might be ready when calling the function. Therefore, endeavour to 548 * use the PE config address if possible. Further more, there're 2 549 * RTAS calls for the purpose, we need to try the new one and back 550 * to the old one if the new one couldn't work properly. 551 */ 552 static int pseries_eeh_get_state(struct eeh_pe *pe, int *delay) 553 { 554 int ret; 555 int rets[4]; 556 int result; 557 558 if (ibm_read_slot_reset_state2 != RTAS_UNKNOWN_SERVICE) { 559 ret = rtas_call(ibm_read_slot_reset_state2, 3, 4, rets, 560 pe->addr, BUID_HI(pe->phb->buid), 561 BUID_LO(pe->phb->buid)); 562 } else if (ibm_read_slot_reset_state != RTAS_UNKNOWN_SERVICE) { 563 /* Fake PE unavailable info */ 564 rets[2] = 0; 565 ret = rtas_call(ibm_read_slot_reset_state, 3, 3, rets, 566 pe->addr, BUID_HI(pe->phb->buid), 567 BUID_LO(pe->phb->buid)); 568 } else { 569 return EEH_STATE_NOT_SUPPORT; 570 } 571 572 if (ret) 573 return ret; 574 575 /* Parse the result out */ 576 if (!rets[1]) 577 return EEH_STATE_NOT_SUPPORT; 578 579 switch(rets[0]) { 580 case 0: 581 result = EEH_STATE_MMIO_ACTIVE | 582 EEH_STATE_DMA_ACTIVE; 583 break; 584 case 1: 585 result = EEH_STATE_RESET_ACTIVE | 586 EEH_STATE_MMIO_ACTIVE | 587 EEH_STATE_DMA_ACTIVE; 588 break; 589 case 2: 590 result = 0; 591 break; 592 case 4: 593 result = EEH_STATE_MMIO_ENABLED; 594 break; 595 case 5: 596 if (rets[2]) { 597 if (delay) 598 *delay = rets[2]; 599 result = EEH_STATE_UNAVAILABLE; 600 } else { 601 result = EEH_STATE_NOT_SUPPORT; 602 } 603 break; 604 default: 605 result = EEH_STATE_NOT_SUPPORT; 606 } 607 608 return result; 609 } 610 611 /** 612 * pseries_eeh_reset - Reset the specified PE 613 * @pe: EEH PE 614 * @option: reset option 615 * 616 * Reset the specified PE 617 */ 618 static int pseries_eeh_reset(struct eeh_pe *pe, int option) 619 { 620 return pseries_eeh_phb_reset(pe->phb, pe->addr, option); 621 } 622 623 /** 624 * pseries_eeh_get_log - Retrieve error log 625 * @pe: EEH PE 626 * @severity: temporary or permanent error log 627 * @drv_log: driver log to be combined with retrieved error log 628 * @len: length of driver log 629 * 630 * Retrieve the temporary or permanent error from the PE. 631 * Actually, the error will be retrieved through the dedicated 632 * RTAS call. 633 */ 634 static int pseries_eeh_get_log(struct eeh_pe *pe, int severity, char *drv_log, unsigned long len) 635 { 636 unsigned long flags; 637 int ret; 638 639 spin_lock_irqsave(&slot_errbuf_lock, flags); 640 memset(slot_errbuf, 0, eeh_error_buf_size); 641 642 ret = rtas_call(ibm_slot_error_detail, 8, 1, NULL, pe->addr, 643 BUID_HI(pe->phb->buid), BUID_LO(pe->phb->buid), 644 virt_to_phys(drv_log), len, 645 virt_to_phys(slot_errbuf), eeh_error_buf_size, 646 severity); 647 if (!ret) 648 log_error(slot_errbuf, ERR_TYPE_RTAS_LOG, 0); 649 spin_unlock_irqrestore(&slot_errbuf_lock, flags); 650 651 return ret; 652 } 653 654 /** 655 * pseries_eeh_configure_bridge - Configure PCI bridges in the indicated PE 656 * @pe: EEH PE 657 * 658 */ 659 static int pseries_eeh_configure_bridge(struct eeh_pe *pe) 660 { 661 return pseries_eeh_phb_configure_bridge(pe->phb, pe->addr); 662 } 663 664 /** 665 * pseries_eeh_read_config - Read PCI config space 666 * @edev: EEH device handle 667 * @where: PCI config space offset 668 * @size: size to read 669 * @val: return value 670 * 671 * Read config space from the speicifed device 672 */ 673 static int pseries_eeh_read_config(struct eeh_dev *edev, int where, int size, u32 *val) 674 { 675 struct pci_dn *pdn = eeh_dev_to_pdn(edev); 676 677 return rtas_read_config(pdn, where, size, val); 678 } 679 680 /** 681 * pseries_eeh_write_config - Write PCI config space 682 * @edev: EEH device handle 683 * @where: PCI config space offset 684 * @size: size to write 685 * @val: value to be written 686 * 687 * Write config space to the specified device 688 */ 689 static int pseries_eeh_write_config(struct eeh_dev *edev, int where, int size, u32 val) 690 { 691 struct pci_dn *pdn = eeh_dev_to_pdn(edev); 692 693 return rtas_write_config(pdn, where, size, val); 694 } 695 696 #ifdef CONFIG_PCI_IOV 697 static int pseries_send_allow_unfreeze(struct pci_dn *pdn, u16 *vf_pe_array, int cur_vfs) 698 { 699 int rc; 700 int ibm_allow_unfreeze = rtas_token("ibm,open-sriov-allow-unfreeze"); 701 unsigned long buid, addr; 702 703 addr = rtas_config_addr(pdn->busno, pdn->devfn, 0); 704 buid = pdn->phb->buid; 705 spin_lock(&rtas_data_buf_lock); 706 memcpy(rtas_data_buf, vf_pe_array, RTAS_DATA_BUF_SIZE); 707 rc = rtas_call(ibm_allow_unfreeze, 5, 1, NULL, 708 addr, 709 BUID_HI(buid), 710 BUID_LO(buid), 711 rtas_data_buf, cur_vfs * sizeof(u16)); 712 spin_unlock(&rtas_data_buf_lock); 713 if (rc) 714 pr_warn("%s: Failed to allow unfreeze for PHB#%x-PE#%lx, rc=%x\n", 715 __func__, 716 pdn->phb->global_number, addr, rc); 717 return rc; 718 } 719 720 static int pseries_call_allow_unfreeze(struct eeh_dev *edev) 721 { 722 int cur_vfs = 0, rc = 0, vf_index, bus, devfn, vf_pe_num; 723 struct pci_dn *pdn, *tmp, *parent, *physfn_pdn; 724 u16 *vf_pe_array; 725 726 vf_pe_array = kzalloc(RTAS_DATA_BUF_SIZE, GFP_KERNEL); 727 if (!vf_pe_array) 728 return -ENOMEM; 729 if (pci_num_vf(edev->physfn ? edev->physfn : edev->pdev)) { 730 if (edev->pdev->is_physfn) { 731 cur_vfs = pci_num_vf(edev->pdev); 732 pdn = eeh_dev_to_pdn(edev); 733 parent = pdn->parent; 734 for (vf_index = 0; vf_index < cur_vfs; vf_index++) 735 vf_pe_array[vf_index] = 736 cpu_to_be16(pdn->pe_num_map[vf_index]); 737 rc = pseries_send_allow_unfreeze(pdn, vf_pe_array, 738 cur_vfs); 739 pdn->last_allow_rc = rc; 740 for (vf_index = 0; vf_index < cur_vfs; vf_index++) { 741 list_for_each_entry_safe(pdn, tmp, 742 &parent->child_list, 743 list) { 744 bus = pci_iov_virtfn_bus(edev->pdev, 745 vf_index); 746 devfn = pci_iov_virtfn_devfn(edev->pdev, 747 vf_index); 748 if (pdn->busno != bus || 749 pdn->devfn != devfn) 750 continue; 751 pdn->last_allow_rc = rc; 752 } 753 } 754 } else { 755 pdn = pci_get_pdn(edev->pdev); 756 physfn_pdn = pci_get_pdn(edev->physfn); 757 758 vf_pe_num = physfn_pdn->pe_num_map[edev->vf_index]; 759 vf_pe_array[0] = cpu_to_be16(vf_pe_num); 760 rc = pseries_send_allow_unfreeze(physfn_pdn, 761 vf_pe_array, 1); 762 pdn->last_allow_rc = rc; 763 } 764 } 765 766 kfree(vf_pe_array); 767 return rc; 768 } 769 770 static int pseries_notify_resume(struct eeh_dev *edev) 771 { 772 if (!edev) 773 return -EEXIST; 774 775 if (rtas_token("ibm,open-sriov-allow-unfreeze") == RTAS_UNKNOWN_SERVICE) 776 return -EINVAL; 777 778 if (edev->pdev->is_physfn || edev->pdev->is_virtfn) 779 return pseries_call_allow_unfreeze(edev); 780 781 return 0; 782 } 783 #endif 784 785 static struct eeh_ops pseries_eeh_ops = { 786 .name = "pseries", 787 .probe = pseries_eeh_probe, 788 .set_option = pseries_eeh_set_option, 789 .get_state = pseries_eeh_get_state, 790 .reset = pseries_eeh_reset, 791 .get_log = pseries_eeh_get_log, 792 .configure_bridge = pseries_eeh_configure_bridge, 793 .err_inject = NULL, 794 .read_config = pseries_eeh_read_config, 795 .write_config = pseries_eeh_write_config, 796 .next_error = NULL, 797 .restore_config = NULL, /* NB: configure_bridge() does this */ 798 #ifdef CONFIG_PCI_IOV 799 .notify_resume = pseries_notify_resume 800 #endif 801 }; 802 803 /** 804 * eeh_pseries_init - Register platform dependent EEH operations 805 * 806 * EEH initialization on pseries platform. This function should be 807 * called before any EEH related functions. 808 */ 809 static int __init eeh_pseries_init(void) 810 { 811 struct pci_controller *phb; 812 struct pci_dn *pdn; 813 int ret, config_addr; 814 815 /* figure out EEH RTAS function call tokens */ 816 ibm_set_eeh_option = rtas_token("ibm,set-eeh-option"); 817 ibm_set_slot_reset = rtas_token("ibm,set-slot-reset"); 818 ibm_read_slot_reset_state2 = rtas_token("ibm,read-slot-reset-state2"); 819 ibm_read_slot_reset_state = rtas_token("ibm,read-slot-reset-state"); 820 ibm_slot_error_detail = rtas_token("ibm,slot-error-detail"); 821 ibm_get_config_addr_info2 = rtas_token("ibm,get-config-addr-info2"); 822 ibm_get_config_addr_info = rtas_token("ibm,get-config-addr-info"); 823 ibm_configure_pe = rtas_token("ibm,configure-pe"); 824 825 /* 826 * ibm,configure-pe and ibm,configure-bridge have the same semantics, 827 * however ibm,configure-pe can be faster. If we can't find 828 * ibm,configure-pe then fall back to using ibm,configure-bridge. 829 */ 830 if (ibm_configure_pe == RTAS_UNKNOWN_SERVICE) 831 ibm_configure_pe = rtas_token("ibm,configure-bridge"); 832 833 /* 834 * Necessary sanity check. We needn't check "get-config-addr-info" 835 * and its variant since the old firmware probably support address 836 * of domain/bus/slot/function for EEH RTAS operations. 837 */ 838 if (ibm_set_eeh_option == RTAS_UNKNOWN_SERVICE || 839 ibm_set_slot_reset == RTAS_UNKNOWN_SERVICE || 840 (ibm_read_slot_reset_state2 == RTAS_UNKNOWN_SERVICE && 841 ibm_read_slot_reset_state == RTAS_UNKNOWN_SERVICE) || 842 ibm_slot_error_detail == RTAS_UNKNOWN_SERVICE || 843 ibm_configure_pe == RTAS_UNKNOWN_SERVICE) { 844 pr_info("EEH functionality not supported\n"); 845 return -EINVAL; 846 } 847 848 /* Initialize error log lock and size */ 849 spin_lock_init(&slot_errbuf_lock); 850 eeh_error_buf_size = rtas_token("rtas-error-log-max"); 851 if (eeh_error_buf_size == RTAS_UNKNOWN_SERVICE) { 852 pr_info("%s: unknown EEH error log size\n", 853 __func__); 854 eeh_error_buf_size = 1024; 855 } else if (eeh_error_buf_size > RTAS_ERROR_LOG_MAX) { 856 pr_info("%s: EEH error log size %d exceeds the maximal %d\n", 857 __func__, eeh_error_buf_size, RTAS_ERROR_LOG_MAX); 858 eeh_error_buf_size = RTAS_ERROR_LOG_MAX; 859 } 860 861 /* Set EEH probe mode */ 862 eeh_add_flag(EEH_PROBE_MODE_DEVTREE | EEH_ENABLE_IO_FOR_LOG); 863 864 /* Set EEH machine dependent code */ 865 ppc_md.pcibios_bus_add_device = pseries_pcibios_bus_add_device; 866 867 if (is_kdump_kernel() || reset_devices) { 868 pr_info("Issue PHB reset ...\n"); 869 list_for_each_entry(phb, &hose_list, list_node) { 870 pdn = list_first_entry(&PCI_DN(phb->dn)->child_list, struct pci_dn, list); 871 config_addr = pseries_eeh_get_pe_config_addr(pdn); 872 873 /* invalid PE config addr */ 874 if (config_addr < 0) 875 continue; 876 877 pseries_eeh_phb_reset(phb, config_addr, EEH_RESET_FUNDAMENTAL); 878 pseries_eeh_phb_reset(phb, config_addr, EEH_RESET_DEACTIVATE); 879 pseries_eeh_phb_configure_bridge(phb, config_addr); 880 } 881 } 882 883 ret = eeh_init(&pseries_eeh_ops); 884 if (!ret) 885 pr_info("EEH: pSeries platform initialized\n"); 886 else 887 pr_info("EEH: pSeries platform initialization failure (%d)\n", 888 ret); 889 return ret; 890 } 891 machine_arch_initcall(pseries, eeh_pseries_init); 892