summaryrefslogtreecommitdiffstats
path: root/target/linux/bcm53xx/patches-4.4/800-PCI-iproc-Ignore-ARM-core-aborts-when-running-on-bcm.patch
blob: af1ae6137bb67f2456849698cbf7e64969babe28 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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
 	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
 
 	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");