From: Rafał Miłecki Date: Fri, 8 Apr 2016 20:37:14 +0000 (+0000) Subject: bcm53xx: add PCI iproc patch adding abort handler X-Git-Tag: reboot~116 X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=c658bd634c06e7d8faa0dbd9793e3e089bf1a395;p=openwrt%2Fstaging%2Flynxis.git bcm53xx: add PCI iproc patch adding abort handler This prevents die() during PCI bus probe. Signed-off-by: Rafał Miłecki SVN-Revision: 49121 --- 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?= +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 +--- + +--- 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");