powerpc/eeh: Block PCI config access during reset
authorGavin Shan <gwshan@linux.vnet.ibm.com>
Tue, 30 Sep 2014 02:39:03 +0000 (12:39 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 30 Sep 2014 07:15:15 +0000 (17:15 +1000)
Function pcibios_set_pcie_reset_state() can be used to do PCI
reset. PCI config access during the reset usually causes EEH
errors unexpectedly. In order to avoid the EEH error, the patch
blocks PCI config access during reset with the help of flag
EEH_PE_RESET, which is similar to what we did in EEH PE reset
path.

Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/kernel/eeh.c

index c79583fe1905d1c6874adb5cd9a23f6960ddbb19..eb266f4ee9be1f4b341cca818eef850d6f271e4f 100644 (file)
@@ -668,14 +668,18 @@ int pcibios_set_pcie_reset_state(struct pci_dev *dev, enum pcie_reset_state stat
        switch (state) {
        case pcie_deassert_reset:
                eeh_ops->reset(pe, EEH_RESET_DEACTIVATE);
+               eeh_pe_state_clear(pe, EEH_PE_RESET);
                break;
        case pcie_hot_reset:
+               eeh_pe_state_mark(pe, EEH_PE_RESET);
                eeh_ops->reset(pe, EEH_RESET_HOT);
                break;
        case pcie_warm_reset:
+               eeh_pe_state_mark(pe, EEH_PE_RESET);
                eeh_ops->reset(pe, EEH_RESET_FUNDAMENTAL);
                break;
        default:
+               eeh_pe_state_clear(pe, EEH_PE_RESET);
                return -EINVAL;
        };