• Logan Gunthorpe's avatar
    PCI: Add "pci=disable_acs_redir=" parameter for peer-to-peer support · aaca43fd
    Logan Gunthorpe authored
    To support peer-to-peer traffic on a segment of the PCI hierarchy, we must
    disable the ACS redirect bits for select PCI bridges.  The bridges must be
    selected before the devices are discovered by the kernel and the IOMMU
    groups created.  Therefore, add a kernel command line parameter to specify
    devices which must have their ACS bits disabled.
    The new parameter takes a list of devices separated by a semicolon.  Each
    device specified will have its ACS redirect bits disabled.  This is
    similar to the existing 'resource_alignment' parameter.
    The ACS Request P2P Request Redirect, P2P Completion Redirect and P2P
    Egress Control bits are disabled, which is sufficient to always allow
    passing P2P traffic uninterrupted.  The bits are set after the kernel
    (optionally) enables the ACS bits itself.  It is also done regardless of
    whether the kernel or platform firmware sets the bits.
    If the user tries to disable the ACS redirect for a device without the ACS
    capability, print a warning to dmesg.
    Signed-off-by: default avatarLogan Gunthorpe <logang@deltatee.com>
    [bhelgaas: reorder to add the generic code first and move the
    device-specific quirk to subsequent patches]
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: default avatarStephen Bates <sbates@raithlin.com>
    Reviewed-by: default avatarAlex Williamson <alex.williamson@redhat.com>
    Acked-by: default avatarChristian König <christian.koenig@amd.com>