Revert "PCI: tegra: Do not allocate MSI target memory"
authorThierry Reding <treding@nvidia.com>
Mon, 9 Oct 2017 10:29:35 +0000 (12:29 +0200)
committerBjorn Helgaas <bhelgaas@google.com>
Wed, 11 Oct 2017 00:06:16 +0000 (19:06 -0500)
commit8c2b4e3c3725801b57d7b858d216d38f83bdb35d
treea1067961418857364c8cbd3e10e667f8545e7c52
parentb1f9e5e355e909000fcccfd2bc31f7c1ded358ab
Revert "PCI: tegra: Do not allocate MSI target memory"

This reverts commit d7bd554f27c942e6b8b54100b4044f9be1038edf.

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: d7bd554f27c9 ("PCI: tegra: Do not allocate MSI target memory")
Reported-by: Tomasz Maciej Nowak <tmn505@gmail.com>
Reported-by: Erik Faye-Lund <kusmabite@gmail.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Cc: stable@vger.kernel.org # 4.13.x
drivers/pci/host/pci-tegra.c