diff options
author | Rafał Miłecki <zajec5@gmail.com> | 2016-04-08 20:37:14 +0000 |
---|---|---|
committer | Rafał Miłecki <zajec5@gmail.com> | 2016-04-08 20:37:14 +0000 |
commit | c658bd634c06e7d8faa0dbd9793e3e089bf1a395 (patch) | |
tree | b1523add10428b07eb02352fbd8bdbdc37decce9 /target/linux | |
parent | 51d887ba007e56f56f64a4495fc393ae87c7dc97 (diff) | |
download | upstream-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/linux')
-rw-r--r-- | target/linux/bcm53xx/patches-4.4/800-PCI-iproc-Ignore-ARM-core-aborts-when-running-on-bcm.patch | 42 |
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"); |