bcm53xx: fix iProc regression with sent patch instead of a revert
[openwrt.git] / target / linux / bcm53xx / patches-4.1 / 175-PCI-iproc-Fix-BCMA-PCIe-bus-scanning-regression.patch
diff --git a/target/linux/bcm53xx/patches-4.1/175-PCI-iproc-Fix-BCMA-PCIe-bus-scanning-regression.patch b/target/linux/bcm53xx/patches-4.1/175-PCI-iproc-Fix-BCMA-PCIe-bus-scanning-regression.patch
new file mode 100644 (file)
index 0000000..21c7716
--- /dev/null
@@ -0,0 +1,51 @@
+From patchwork Wed Jan 20 22:55:10 2016
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: PCI: iproc: Fix BCMA PCIe bus scanning regression
+From: Ray Jui <rjui@broadcom.com>
+X-Patchwork-Id: 570953
+Message-Id: <1453330510-21926-1-git-send-email-rjui@broadcom.com>
+To: Bjorn Helgaas <bhelgaas@google.com>
+Cc: Rafal Milecki <zajec5@gmail.com>, Hante Meuleman <meuleman@broadcom.com>, 
+ Hauke Mehrtens <hauke@hauke-m.de>, <linux-kernel@vger.kernel.org>,
+ <bcm-kernel-feedback-list@broadcom.com>,
+ <linux-pci@vger.kernel.org>, Ray Jui <rjui@broadcom.com>
+Date: Wed, 20 Jan 2016 14:55:10 -0800
+
+Commit 943ebae781f5 ("PCI: iproc: Add PAXC interface support") causes
+regression on EP device detection on BCMA based platforms. This patch
+fixes the issue by allowing multiple devices to be configured on the
+same bus, for all PAXB based child buses
+
+Reported-by: Rafal Milecki <zajec5@gmail.com>
+Fixes: 943ebae781f5 ("PCI: iproc: Add PAXC interface support")
+Signed-off-by: Ray Jui <rjui@broadcom.com>
+---
+ drivers/pci/host/pcie-iproc.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- a/drivers/pci/host/pcie-iproc.c
++++ b/drivers/pci/host/pcie-iproc.c
+@@ -171,10 +171,11 @@ static inline void iproc_pcie_ob_write(s
+ }
+ static inline bool iproc_pcie_device_is_valid(struct iproc_pcie *pcie,
++                                            unsigned int busnum,
+                                             unsigned int slot,
+                                             unsigned int fn)
+ {
+-      if (slot > 0)
++      if ((pcie->type == IPROC_PCIE_PAXC || busnum == 0) && slot > 0)
+               return false;
+       /* PAXC can only support limited number of functions */
+@@ -199,7 +200,7 @@ static void __iomem *iproc_pcie_map_cfg_
+       u32 val;
+       u16 offset;
+-      if (!iproc_pcie_device_is_valid(pcie, slot, fn))
++      if (!iproc_pcie_device_is_valid(pcie, busno, slot, fn))
+               return NULL;
+       /* root complex access */