aboutsummaryrefslogtreecommitdiffstats
path: root/target
diff options
context:
space:
mode:
authorRafał Miłecki <zajec5@gmail.com>2016-04-08 20:37:14 +0000
committerRafał Miłecki <zajec5@gmail.com>2016-04-08 20:37:14 +0000
commitc658bd634c06e7d8faa0dbd9793e3e089bf1a395 (patch)
treeb1523add10428b07eb02352fbd8bdbdc37decce9 /target
parent51d887ba007e56f56f64a4495fc393ae87c7dc97 (diff)
downloadupstream-c658bd634c06e7d8faa0dbd9793e3e089bf1a395.tar.gz
upstream-c658bd634c06e7d8faa0dbd9793e3e089bf1a395.tar.bz2
upstream-c658bd634c06e7d8faa0dbd9793e3e089bf1a395.zip
bcm53xx: add PCI iproc patch adding abort handler
This prevents die() during PCI bus probe. Signed-off-by: Rafał Miłecki <zajec5@gmail.com> SVN-Revision: 49121
Diffstat (limited to 'target')
-rw-r--r--target/linux/bcm53xx/patches-4.4/800-PCI-iproc-Ignore-ARM-core-aborts-when-running-on-bcm.patch42
1 files changed, 42 insertions, 0 deletions
diff --git a/target/linux/bcm53xx/patches-4.4/800-PCI-iproc-Ignore-ARM-core-aborts-when-running-on-bcm.patch b/target/linux/bcm53xx/patches-4.4/800-PCI-iproc-Ignore-ARM-core-aborts-when-running-on-bcm.patch
new file mode 100644
index 0000000000..6603be9aef
--- /dev/null
+++ b/target/linux/bcm53xx/patches-4.4/800-PCI-iproc-Ignore-ARM-core-aborts-when-running-on-bcm.patch
@@ -0,0 +1,42 @@
+From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com>
+Subject: [PATCH] PCI: iproc: Ignore ARM core aborts when running on bcma bus
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Northstar devices have host bridges that forward errors to the ARM core.
+These errors happen during PCI bus probing (device enumeration) and are
+expected. There is no reason for them to cause a die() so this patch
+adds a handler silencing them.
+
+Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
+---
+
+--- a/drivers/pci/host/pcie-iproc-bcma.c
++++ b/drivers/pci/host/pcie-iproc-bcma.c
+@@ -40,6 +40,15 @@ static int iproc_pcie_bcma_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
+ return bcma_core_irq(bdev, 5);
+ }
+
++static int iproc_pcie_bcma_abort_handler(unsigned long addr, unsigned int fsr,
++ struct pt_regs *regs)
++{
++ if (fsr == 0x1406)
++ return 0;
++
++ return 1;
++}
++
+ static int iproc_pcie_bcma_probe(struct bcma_device *bdev)
+ {
+ struct iproc_pcie *pcie;
+@@ -65,6 +74,9 @@ static int iproc_pcie_bcma_probe(struct bcma_device *bdev)
+
+ pcie->map_irq = iproc_pcie_bcma_map_irq;
+
++ hook_fault_code(16 + 6, iproc_pcie_bcma_abort_handler, SIGBUS, BUS_OBJERR,
++ "imprecise external abort");
++
+ ret = iproc_pcie_setup(pcie, &res);
+ if (ret)
+ dev_err(pcie->dev, "PCIe controller setup failed\n");