• Alex Williamson's avatar
    PCI: Add Virtual Channel to save/restore support · 425c1b22
    Alex Williamson authored
    While we don't really have any infrastructure for making use of VC
    support, the system BIOS can configure the topology to non-default
    VC values prior to boot.  This may be due to silicon bugs, desire to
    reserve traffic classes, or perhaps just BIOS bugs.  When we reset
    devices, the VC configuration may return to default values, which can
    be incompatible with devices upstream.  For instance, Nvidia GRID
    cards provide a PCIe switch and some number of GPUs, all supporting
    VC.  The power-on default for VC is to support TC0-7 across VC0,
    however some platforms will only enable TC0/VC0 mapping across the
    topology.  When we do a secondary bus reset on the downstream switch
    port, the GPU is reset to a TC0-7/VC0 mapping while the opposite end
    of the link only enables TC0/VC0.  If the GPU attempts to use TC1-7,
    it fails.
    
    This patch attempts to provide complete support for VC save/restore,
    even beyond the minimally required use case above.  This includes
    save/restore and reload of the arbitration table, save/restore and
    reload of the port arbitration tables, and re-enabling of the
    channels for VC, VC9, and MFVC capabilities.
    Signed-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    425c1b22
pci.c 116 KB