|
@@ -126,9 +126,22 @@ static inline bool pnv_pci_is_m64(struct pnv_phb *phb, struct resource *r)
|
|
|
|
|
|
static struct pnv_ioda_pe *pnv_ioda_init_pe(struct pnv_phb *phb, int pe_no)
|
|
|
{
|
|
|
+ s64 rc;
|
|
|
+
|
|
|
phb->ioda.pe_array[pe_no].phb = phb;
|
|
|
phb->ioda.pe_array[pe_no].pe_number = pe_no;
|
|
|
|
|
|
+ /*
|
|
|
+ * Clear the PE frozen state as it might be put into frozen state
|
|
|
+ * in the last PCI remove path. It's not harmful to do so when the
|
|
|
+ * PE is already in unfrozen state.
|
|
|
+ */
|
|
|
+ rc = opal_pci_eeh_freeze_clear(phb->opal_id, pe_no,
|
|
|
+ OPAL_EEH_ACTION_CLEAR_FREEZE_ALL);
|
|
|
+ if (rc != OPAL_SUCCESS)
|
|
|
+ pr_warn("%s: Error %lld unfreezing PHB#%d-PE#%d\n",
|
|
|
+ __func__, rc, phb->hose->global_number, pe_no);
|
|
|
+
|
|
|
return &phb->ioda.pe_array[pe_no];
|
|
|
}
|
|
|
|