Commit 712c01b1 authored by Gavin Shan's avatar Gavin Shan Committed by Luis Henriques

powerpc/powernv: Call opal_pci_poll() if needed

BugLink: https://bugs.launchpad.net/bugs/1652018

When issuing PHB reset, OPAL API opal_pci_poll() is called to drive
the state machine in OPAL forward. However, we needn't always call
the function under some circumstances like reset deassert.

This avoids calling opal_pci_poll() when OPAL_SUCCESS is returned
from opal_pci_reset(). Except the overhead introduced by additional
one unnecessary OPAL call, I didn't run into real issue because of
this.
Reported-by: default avatarPridhiviraj Paidipeddi <ppaiddipe@in.ibm.com>
Signed-off-by: default avatarGavin Shan <gwshan@linux.vnet.ibm.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
(backported from commit fbce44d0)
[cascardo: use original pnv_eeh_phb_poll]
Signed-off-by: default avatarThadeu Lima de Souza Cascardo <cascardo@canonical.com>
Acked-by: default avatarTim Gardner <tim.gardner@canonical.com>
Acked-by: default avatarLuis Henriques <luis.henriques@canonical.com>
Signed-off-by: default avatarLuis Henriques <luis.henriques@canonical.com>
parent c87f4b31
...@@ -777,7 +777,8 @@ int pnv_eeh_phb_reset(struct pci_controller *hose, int option) ...@@ -777,7 +777,8 @@ int pnv_eeh_phb_reset(struct pci_controller *hose, int option)
* reset followed by hot reset on root bus. So we also * reset followed by hot reset on root bus. So we also
* need the PCI bus settlement delay. * need the PCI bus settlement delay.
*/ */
rc = pnv_eeh_phb_poll(phb); if (rc > 0)
rc = pnv_eeh_phb_poll(phb);
if (option == EEH_RESET_DEACTIVATE) { if (option == EEH_RESET_DEACTIVATE) {
if (system_state < SYSTEM_RUNNING) if (system_state < SYSTEM_RUNNING)
udelay(1000 * EEH_PE_RST_SETTLE_TIME); udelay(1000 * EEH_PE_RST_SETTLE_TIME);
...@@ -820,7 +821,8 @@ static int pnv_eeh_root_reset(struct pci_controller *hose, int option) ...@@ -820,7 +821,8 @@ static int pnv_eeh_root_reset(struct pci_controller *hose, int option)
goto out; goto out;
/* Poll state of the PHB until the request is done */ /* Poll state of the PHB until the request is done */
rc = pnv_eeh_phb_poll(phb); if (rc > 0)
rc = pnv_eeh_phb_poll(phb);
if (option == EEH_RESET_DEACTIVATE) if (option == EEH_RESET_DEACTIVATE)
msleep(EEH_PE_RST_SETTLE_TIME); msleep(EEH_PE_RST_SETTLE_TIME);
out: out:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment