summaryrefslogtreecommitdiffstats
path: root/target/linux/bcm53xx/patches-4.4/088-PCI-iproc-Fix-BCMA-PCIe-bus-scanning-regression.patch
diff options
context:
space:
mode:
authorRafał Miłecki <zajec5@gmail.com>2016-01-28 07:01:17 +0000
committerRafał Miłecki <zajec5@gmail.com>2016-01-28 07:01:17 +0000
commit512e0fca81dc4c6d554292eeae76d1162cb4197d (patch)
treeae3c5ef44e3dca3cd1e0222066aa3bc9714616ac /target/linux/bcm53xx/patches-4.4/088-PCI-iproc-Fix-BCMA-PCIe-bus-scanning-regression.patch
parent80bd8f3d09eb6b29378b0010fae0cdab2f3565dc (diff)
downloadmaster-31e0f0ae-512e0fca81dc4c6d554292eeae76d1162cb4197d.tar.gz
master-31e0f0ae-512e0fca81dc4c6d554292eeae76d1162cb4197d.tar.bz2
master-31e0f0ae-512e0fca81dc4c6d554292eeae76d1162cb4197d.zip
bcm53xx: replace iproc regression fix with the final one
Signed-off-by: Rafał Miłecki <zajec5@gmail.com> SVN-Revision: 48518
Diffstat (limited to 'target/linux/bcm53xx/patches-4.4/088-PCI-iproc-Fix-BCMA-PCIe-bus-scanning-regression.patch')
-rw-r--r--target/linux/bcm53xx/patches-4.4/088-PCI-iproc-Fix-BCMA-PCIe-bus-scanning-regression.patch73
1 files changed, 73 insertions, 0 deletions
diff --git a/target/linux/bcm53xx/patches-4.4/088-PCI-iproc-Fix-BCMA-PCIe-bus-scanning-regression.patch b/target/linux/bcm53xx/patches-4.4/088-PCI-iproc-Fix-BCMA-PCIe-bus-scanning-regression.patch
new file mode 100644
index 0000000000..d35287f725
--- /dev/null
+++ b/target/linux/bcm53xx/patches-4.4/088-PCI-iproc-Fix-BCMA-PCIe-bus-scanning-regression.patch
@@ -0,0 +1,73 @@
+From c43e4b52cbf2267047f67c9f65de18ee1ab8bfa2 Mon Sep 17 00:00:00 2001
+From: Ray Jui <rjui@broadcom.com>
+Date: Wed, 27 Jan 2016 16:52:24 -0600
+Subject: [PATCH] PCI: iproc: Fix BCMA PCIe bus scanning regression
+
+Commit 943ebae781f5 ("PCI: iproc: Add PAXC interface support") causes
+regression on EP device detection on BCMA based platforms.
+
+Fix the issue by allowing multiple devices to be configured on the same
+bus, for all PAXB based child buses. In addition, add a check to prevent
+non-zero function from being used on bus 0 (root bus).
+
+Fixes: 943ebae781f5 ("PCI: iproc: Add PAXC interface support")
+Reported-by: Rafal Milecki <zajec5@gmail.com>
+Signed-off-by: Ray Jui <rjui@broadcom.com>
+Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
+---
+ drivers/pci/host/pcie-iproc.c | 28 +++++++++++-----------------
+ 1 file changed, 11 insertions(+), 17 deletions(-)
+
+--- a/drivers/pci/host/pcie-iproc.c
++++ b/drivers/pci/host/pcie-iproc.c
+@@ -170,20 +170,6 @@ static inline void iproc_pcie_ob_write(s
+ writel(val, pcie->base + offset + (window * 8));
+ }
+
+-static inline bool iproc_pcie_device_is_valid(struct iproc_pcie *pcie,
+- unsigned int slot,
+- unsigned int fn)
+-{
+- if (slot > 0)
+- return false;
+-
+- /* PAXC can only support limited number of functions */
+- if (pcie->type == IPROC_PCIE_PAXC && fn >= MAX_NUM_PAXC_PF)
+- return false;
+-
+- return true;
+-}
+-
+ /**
+ * Note access to the configuration registers are protected at the higher layer
+ * by 'pci_lock' in drivers/pci/access.c
+@@ -199,11 +185,11 @@ static void __iomem *iproc_pcie_map_cfg_
+ u32 val;
+ u16 offset;
+
+- if (!iproc_pcie_device_is_valid(pcie, slot, fn))
+- return NULL;
+-
+ /* root complex access */
+ if (busno == 0) {
++ if (slot > 0 || fn > 0)
++ return NULL;
++
+ iproc_pcie_write_reg(pcie, IPROC_PCIE_CFG_IND_ADDR,
+ where & CFG_IND_ADDR_MASK);
+ offset = iproc_pcie_reg_offset(pcie, IPROC_PCIE_CFG_IND_DATA);
+@@ -213,6 +199,14 @@ static void __iomem *iproc_pcie_map_cfg_
+ return (pcie->base + offset);
+ }
+
++ /*
++ * PAXC is connected to an internally emulated EP within the SoC. It
++ * allows only one device and supports a limited number of functions.
++ */
++ if (pcie->type == IPROC_PCIE_PAXC)
++ if (slot > 0 || fn >= MAX_NUM_PAXC_PF)
++ return NULL;
++
+ /* EP device access */
+ val = (busno << CFG_ADDR_BUS_NUM_SHIFT) |
+ (slot << CFG_ADDR_DEV_NUM_SHIFT) |