Lines Matching full:pe
74 * parent PE in pseries_eeh_init_edev(). in pseries_pcibios_bus_add_device()
76 struct eeh_pe *physfn_pe = pci_dev_to_eeh_dev(pdev->physfn)->pe; in pseries_pcibios_bus_add_device()
80 eeh_pe_tree_remove(edev); /* Remove as it is adding to bus pe */ in pseries_pcibios_bus_add_device()
81 eeh_pe_tree_insert(edev, physfn_pe); /* Add as VF PE type */ in pseries_pcibios_bus_add_device()
93 * pe_config_addr) as a handle to a given PE. This function finds the
110 * part of a PE or not. ret[0] being zero indicates it's not. in pseries_eeh_get_pe_config_addr()
118 /* Retrieve the associated PE config address with function 0 */ in pseries_eeh_get_pe_config_addr()
123 pr_warn("%s: Failed to get address for PHB#%x-PE#%x\n", in pseries_eeh_get_pe_config_addr()
136 pr_warn("%s: Failed to get address for PHB#%x-PE#%x\n", in pseries_eeh_get_pe_config_addr()
160 * Reset the specified PHB/PE
166 /* Reset PE through RTAS call */ in pseries_eeh_phb_reset()
189 * pseries_eeh_phb_configure_bridge - Configure PCI bridges in the indicated PE
194 * in the specified PE so that the mulfunctional PE would be recovered
230 pr_warn("%s: Unable to configure bridge PHB#%x-PE#%x (%d)\n", in pseries_eeh_phb_configure_bridge()
318 * pseries_eeh_pe_get_parent - Retrieve the parent PE
322 * tree. The function is used to retrieve the parent PE according
332 * EEH device already having associated PE, but in pseries_eeh_pe_get_parent()
345 if (parent->pe) in pseries_eeh_pe_get_parent()
346 return parent->pe; in pseries_eeh_pe_get_parent()
366 struct eeh_pe pe, *parent; in pseries_eeh_init_edev() local
385 * If ->pe is set then we've already probed this device. We hit in pseries_eeh_init_edev()
387 * a PE (i.e. for devices where the driver doesn't support error in pseries_eeh_init_edev()
390 if (edev->pe) in pseries_eeh_init_edev()
425 /* first up, find the pe_config_addr for the PE containing the device */ in pseries_eeh_init_edev()
432 /* Try enable EEH on the fake PE */ in pseries_eeh_init_edev()
433 memset(&pe, 0, sizeof(struct eeh_pe)); in pseries_eeh_init_edev()
434 pe.phb = pdn->phb; in pseries_eeh_init_edev()
435 pe.addr = ret; in pseries_eeh_init_edev()
438 ret = eeh_ops->set_option(&pe, EEH_OPT_ENABLE); in pseries_eeh_init_edev()
444 edev->pe_config_addr = pe.addr; in pseries_eeh_init_edev()
470 * configured and inserted into a PE in pseries_eeh_init_edev() in pseries_eeh_probe()
473 if (!edev || !edev->pe) in pseries_eeh_probe()
503 * @pe: EEH PE
510 static int pseries_eeh_set_option(struct eeh_pe *pe, int option) in pseries_eeh_set_option() argument
516 * the particular PE, the PE config address is possibly in pseries_eeh_set_option()
535 pe->addr, BUID_HI(pe->phb->buid), in pseries_eeh_set_option()
536 BUID_LO(pe->phb->buid), option); in pseries_eeh_set_option()
542 * pseries_eeh_get_state - Retrieve PE state
543 * @pe: EEH PE
546 * Retrieve the state of the specified PE. On RTAS compliant
548 * for the purpose. It's notable that the associated PE config address
550 * use the PE config address if possible. Further more, there're 2
554 static int pseries_eeh_get_state(struct eeh_pe *pe, int *delay) in pseries_eeh_get_state() argument
562 pe->addr, BUID_HI(pe->phb->buid), in pseries_eeh_get_state()
563 BUID_LO(pe->phb->buid)); in pseries_eeh_get_state()
565 /* Fake PE unavailable info */ in pseries_eeh_get_state()
568 pe->addr, BUID_HI(pe->phb->buid), in pseries_eeh_get_state()
569 BUID_LO(pe->phb->buid)); in pseries_eeh_get_state()
614 * pseries_eeh_reset - Reset the specified PE
615 * @pe: EEH PE
618 * Reset the specified PE
620 static int pseries_eeh_reset(struct eeh_pe *pe, int option) in pseries_eeh_reset() argument
622 return pseries_eeh_phb_reset(pe->phb, pe->addr, option); in pseries_eeh_reset()
627 * @pe: EEH PE
632 * Retrieve the temporary or permanent error from the PE.
636 static int pseries_eeh_get_log(struct eeh_pe *pe, int severity, char *drv_log, unsigned long len) in pseries_eeh_get_log() argument
644 ret = rtas_call(ibm_slot_error_detail, 8, 1, NULL, pe->addr, in pseries_eeh_get_log()
645 BUID_HI(pe->phb->buid), BUID_LO(pe->phb->buid), in pseries_eeh_get_log()
657 * pseries_eeh_configure_bridge - Configure PCI bridges in the indicated PE
658 * @pe: EEH PE
661 static int pseries_eeh_configure_bridge(struct eeh_pe *pe) in pseries_eeh_configure_bridge() argument
663 return pseries_eeh_phb_configure_bridge(pe->phb, pe->addr); in pseries_eeh_configure_bridge()
716 pr_warn("%s: Failed to allow unfreeze for PHB#%x-PE#%lx, rc=%x\n", in pseries_send_allow_unfreeze()
825 ibm_configure_pe = rtas_token("ibm,configure-pe"); in eeh_pseries_init()
828 * ibm,configure-pe and ibm,configure-bridge have the same semantics, in eeh_pseries_init()
829 * however ibm,configure-pe can be faster. If we can't find in eeh_pseries_init()
830 * ibm,configure-pe then fall back to using ibm,configure-bridge. in eeh_pseries_init()
878 /* invalid PE config addr */ in eeh_pseries_init()