• Kuppuswamy Sathyanarayanan's avatar
    PCI/DPC: Add Error Disconnect Recover (EDR) support · ac1c8e35
    Kuppuswamy Sathyanarayanan authored
    Error Disconnect Recover (EDR) is a feature that allows ACPI firmware to
    notify OSPM that a device has been disconnected due to an error condition
    (ACPI v6.3, sec 5.6.6).  OSPM advertises its support for EDR on PCI devices
    via _OSC (see [1], sec 4.5.1, table 4-4).  The OSPM EDR notify handler
    should invalidate software state associated with disconnected devices and
    may attempt to recover them.  OSPM communicates the status of recovery to
    the firmware via _OST (sec 6.3.5.2).
    
    For PCIe, firmware may use Downstream Port Containment (DPC) to support
    EDR.  Per [1], sec 4.5.1, table 4-6, even if firmware has retained control
    of DPC, OSPM may read/write DPC control and status registers during the EDR
    notification processing window, i.e., from the time it receives an EDR
    notification until it clears the DPC Trigger Status.
    
    Note that per [1], sec 4.5.1 and 4.5.2.4,
    
      1. If the OS supports EDR, it should advertise that to firmware by
         setting OSC_PCI_EDR_SUPPORT in _OSC Support.
    
      2. If the OS sets OSC_PCI_EXPRESS_DPC_CONTROL in _OSC Control to request
         control of the DPC capability, it must also set OSC_PCI_EDR_SUPPORT in
         _OSC Support.
    
    Add an EDR notify handler to attempt recovery.
    
    [1] Downstream Port Containment Related Enhancements ECN, Jan 28, 2019,
        affecting PCI Firmware Specification, Rev. 3.2
        https://members.pcisig.com/wg/PCI-SIG/document/12888
    
    [bhelgaas: squash add/enable patches into one]
    Link: https://lore.kernel.org/r/90f91fe6d25c13f9d2255d2ce97ca15be307e1bb.1585000084.git.sathyanarayanan.kuppuswamy@linux.intel.comSigned-off-by: default avatarKuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>
    Cc: Len Brown <lenb@kernel.org>
    ac1c8e35
edr.c 6.03 KB