• Thierry Reding's avatar
    Revert "PCI: tegra: Do not allocate MSI target memory" · 8c2b4e3c
    Thierry Reding authored
    This reverts commit d7bd554f.
    
    It turns out that Tegra20 has a bug in the implementation of the MSI
    target address register (which is worked around by the existence of the
    struct tegra_pcie_soc.msi_base_shift parameter) that restricts the MSI
    target memory to the lower 32 bits of physical memory on that particular
    generation. The offending patch causes a regression on TrimSlice, which
    is a Tegra20-based device and has a PCI network interface card.
    
    An initial, simpler fix was to change the MSI target address for Tegra20
    only, but it was pointed out that the offending commit also prevents the
    use of 32-bit only MSI capable devices, even on later chips. Technically
    this was never guaranteed to work with the prior code in the first place
    because the allocated page could have resided beyond the 4 GiB boundary,
    but it is still possible that this could've introduced a regression.
    
    The proper fix that was settled on is to select a fixed address within
    the lowest 32 bits of physical address space that is otherwise unused,
    but testing of that patch has provided mixed results that are not fully
    understood yet.
    
    Given all of the above and the relative urgency to get this fixed in
    v4.13, revert the offending commit until a universal fix is found.
    
    Fixes: d7bd554f ("PCI: tegra: Do not allocate MSI target memory")
    Reported-by: default avatarTomasz Maciej Nowak <tmn505@gmail.com>
    Reported-by: default avatarErik Faye-Lund <kusmabite@gmail.com>
    Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    Cc: stable@vger.kernel.org	# 4.13.x
    8c2b4e3c
pci-tegra.c 57.7 KB