• Wei Yang's avatar
    powerpc/powernv: Support PCI config restore for VFs · 0dc2830e
    Wei Yang authored
    After PE reset, OPAL API opal_pci_reinit() is called on all devices
    contained in the PE to reinitialize them. While skiboot is not aware of
    VFs, we have to implement the function in kernel to reinitialize VFs after
    reset on PE for VFs.
    
    In this patch, two functions pnv_pci_fixup_vf_mps() and
    pnv_eeh_restore_vf_config() both manipulate the MPS of the VF, since for a
    VF it has three cases.
    
    1. Normal creation for a VF
       In this case, pnv_pci_fixup_vf_mps() is called to make the MPS a proper
       value compared with its parent.
    2. EEH recovery without VF removed
       In this case, MPS is stored in pci_dn and pnv_eeh_restore_vf_config() is
       called to restore it and reinitialize other part.
    3. EEH recovery with VF removed
       In this case, VF will be removed then re-created. Both functions are
       called. First pnv_pci_fixup_vf_mps() is called to store the proper MPS
       to pci_dn and then pnv_eeh_restore_vf_config() is called to do proper
       thing.
    
    This introduces two functions: pnv_pci_fixup_vf_mps() to fixup the VF's
    MPS to make sure it is equal to parent's and store this value in pci_dn
    for future use. pnv_eeh_restore_vf_config() to re-initialize on VF by
    restoring MPS, disabling completion timeout, enabling SERR, etc.
    Signed-off-by: default avatarWei Yang <weiyang@linux.vnet.ibm.com>
    Acked-by: default avatarGavin Shan <gwshan@linux.vnet.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    0dc2830e
eeh-powernv.c 45.2 KB