[PATCH 0/7] Fixes for Armada 370/XP PCIe

Thomas Petazzoni thomas.petazzoni at free-electrons.com
Fri Apr 18 05:19:46 PDT 2014


Hello,

This set of commits fixes a number of problems in the PCIe support of
the Armada 370 and Armada XP SoCs, allowing to use PCIe devices that
were not properly supported until now.

Due to the interaction of PCIe with other subsystems, the fixes are
not limited to drivers/pci, but also touch drivers/bus and
drivers/irqchip.

Here are the details of the patches:

 * The first three patches are fixes in the MSI handling. They fix
   problems with PCIe device drivers trying to use MSI-X (which we
   don't support), and incorrect freeing of MSIs causing kernel panics
   when PCIe device drivers try to allocate/free MSIs several times.

   They touch drivers/irqchip/ only, and they are independent from the
   rest of the series, both from a build and a runtime point of view.

   These bugs exist since the MSI support was added, in v3.13. The
   commits carry the necessary Fixes and Cc to stable informations.

 * The fourth patch fixes an off-by-one in the computed size of MBus
   windows. This only worked because the mvebu-mbus driver was
   silently accepting invalid sizes. I've marked it for stable because
   it really is bug, but even though it's not visible by itself, it is
   needed for other patches in the series.

   This patch touches drivers/pci/host, and should probably be taken
   by the mvebu maintainers, with the Ack of the PCI maintainer, as it
   is a runtime dependency for the next patch.

   This patch is marked for stable all the way to when the PCI driver
   was introduced.

 * The fifth patch make the mvebu-mbus driver check (and loudly
   complain) if it is asked to create invalid regions (whose base
   address or size are not compatible with the documented MBus
   requirements).

   This patch touches drivers/bus, and should probably be taken by the
   mvebu maintainers. As explained above, it is mandatory to have
   PATCH 4 applied before PATCH 5: there is a runtime dependency
   between the two (but no build time dependency).

   This patch is not marked for stable, as it only adds some
   additional debugging information, which while very useful, is not
   technically stable material.

 * The sixth patch relaxes a check in mvebu-mbus driver about
   conflicting windows, which is necessary

   This patch touches drivers/bus, and should probably be taken by the
   mvebu maintainers. It is not a fix by itself, but it is required
   for the last patch, which is a fix. Therefore, it is marked for
   stable, all the way to when the mvebu-mbus driver was introduced.

 * The seventh patch improves the pci-mvebu driver to allow the
   creation of multiple MBus windows when the PCI BAR calculated by
   the Linux PCI core has a non power-of-two size. This is needed
   because MBus windows can only have power-of-two sizes. Until now,
   we were configuring invalid MBus windows, which with certain PCIe
   devices, was either causing kernel panics at boot time or
   misfunction of the device.

These patches have been tested by Neil Greatorex
<neil at fatboyfat.co.uk> who initially reported the issues, have also
been tested by Willy Tarreau and Matthew Winter (even though they
didn't give their formal Tested-by [1] [2]), and have been heavily
discussed with Jason Gunthorpe.

Note that there are still two known issues in the mvebu PCIe handling:

 1/ When earlyprintk is disabled, we have a timing / PHY reset issue
    which leads to the PCIe device connected on the first interface to
    not be detected. We already have patches floating around, but
    nothing that we are all happy with yet.

 2/ When a PCI IGB card is plugged with many other PCI devices in a
    system, the IGB card initialization doesn't work ('igb
    0000:01:00.0: The NVM Checksum Is Not Valid'). We are still
    working on this issue.

These two issues will be handled separately.

Thanks,

Thomas

[1] http://www.spinics.net/lists/linux-pci/msg30406.html
[2] http://www.spinics.net/lists/linux-pci/msg30444.html

Jason Gunthorpe (1):
  bus: mvebu-mbus: Avoid setting an undefined window size

Neil Greatorex (1):
  irqchip: armada-370-xp: Fix releasing of MSIs

Thomas Petazzoni (4):
  irqchip: armada-370-xp: fix invalid cast of signed value into unsigned
    variable
  irqchip: armada-370-xp: implement the ->check_device() msi_chip
    operation
  bus: mvebu-mbus: allow several windows with the same target/attribute
  pci: pci-mvebu: split PCIe BARs into multiple MBus windows when needed

Willy Tarreau (1):
  pci: mvebu: fix off-by-one in the computed size of the mbus windows

 drivers/bus/mvebu-mbus.c            | 22 ++++++---
 drivers/irqchip/irq-armada-370-xp.c | 17 +++++--
 drivers/pci/host/pci-mvebu.c        | 92 ++++++++++++++++++++++++++++++-------
 3 files changed, 106 insertions(+), 25 deletions(-)

-- 
1.9.2




More information about the linux-arm-kernel mailing list