[source] bcm53xx: use upstream accepted fix for ARM core aborts

LEDE Commits lede-commits at lists.infradead.org
Mon Nov 28 04:16:29 PST 2016


rmilecki pushed a commit to source.git, branch master:
https://git.lede-project.org/32875a2d79a553c339f861190a4e9f21c97da88e

commit 32875a2d79a553c339f861190a4e9f21c97da88e
Author: Rafał Miłecki <rafal at milecki.pl>
AuthorDate: Mon Nov 28 13:07:29 2016 +0100

    bcm53xx: use upstream accepted fix for ARM core aborts
    
    Signed-off-by: Rafał Miłecki <rafal at milecki.pl>
---
 ...X-Add-back-handler-ignoring-external-impr.patch | 75 ++++++++++++++++++++++
 ...gnore-ARM-core-aborts-when-running-on-bcm.patch | 42 ------------
 2 files changed, 75 insertions(+), 42 deletions(-)

diff --git a/target/linux/bcm53xx/patches-4.4/045-ARM-BCM5301X-Add-back-handler-ignoring-external-impr.patch b/target/linux/bcm53xx/patches-4.4/045-ARM-BCM5301X-Add-back-handler-ignoring-external-impr.patch
new file mode 100644
index 0000000..a4f32f5
--- /dev/null
+++ b/target/linux/bcm53xx/patches-4.4/045-ARM-BCM5301X-Add-back-handler-ignoring-external-impr.patch
@@ -0,0 +1,75 @@
+From 09f3510fb70a46c8921f2cf4a90dbcae460a6820 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal at milecki.pl>
+Date: Sat, 29 Oct 2016 13:12:29 +0200
+Subject: [PATCH] ARM: BCM5301X: Add back handler ignoring external imprecise
+ aborts
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Since early BCM5301X days we got abort handler that was removed by
+commit 937b12306ea79 ("ARM: BCM5301X: remove workaround imprecise abort
+fault handler"). It assumed we need to deal only with pending aborts
+left by the bootloader. Unfortunately this isn't true for BCM5301X.
+
+When probing PCI config space (device enumeration) it is expected to
+have master aborts on the PCI bus. Most bridges don't forward (or they
+allow disabling it) these errors onto the AXI/AMBA bus but not the
+Northstar (BCM5301X) one.
+
+iProc PCIe controller on Northstar seems to be some older one, without
+a control register for errors forwarding. It means we need to workaround
+this at platform level. All newer platforms are not affected by this
+issue.
+
+Signed-off-by: Rafał Miłecki <rafal at milecki.pl>
+Signed-off-by: Florian Fainelli <f.fainelli at gmail.com>
+---
+ arch/arm/mach-bcm/bcm_5301x.c | 28 ++++++++++++++++++++++++++++
+ 1 file changed, 28 insertions(+)
+
+--- a/arch/arm/mach-bcm/bcm_5301x.c
++++ b/arch/arm/mach-bcm/bcm_5301x.c
+@@ -9,14 +9,42 @@
+ #include <asm/hardware/cache-l2x0.h>
+ 
+ #include <asm/mach/arch.h>
++#include <asm/siginfo.h>
++#include <asm/signal.h>
++
++#define FSR_EXTERNAL		(1 << 12)
++#define FSR_READ		(0 << 10)
++#define FSR_IMPRECISE		0x0406
+ 
+ static const char *const bcm5301x_dt_compat[] __initconst = {
+ 	"brcm,bcm4708",
+ 	NULL,
+ };
+ 
++static int bcm5301x_abort_handler(unsigned long addr, unsigned int fsr,
++				  struct pt_regs *regs)
++{
++	/*
++	 * We want to ignore aborts forwarded from the PCIe bus that are
++	 * expected and shouldn't really be passed by the PCIe controller.
++	 * The biggest disadvantage is the same FSR code may be reported when
++	 * reading non-existing APB register and we shouldn't ignore that.
++	 */
++	if (fsr == (FSR_EXTERNAL | FSR_READ | FSR_IMPRECISE))
++		return 0;
++
++	return 1;
++}
++
++static void __init bcm5301x_init_early(void)
++{
++	hook_fault_code(16 + 6, bcm5301x_abort_handler, SIGBUS, BUS_OBJERR,
++			"imprecise external abort");
++}
++
+ DT_MACHINE_START(BCM5301X, "BCM5301X")
+ 	.l2c_aux_val	= 0,
+ 	.l2c_aux_mask	= ~0,
+ 	.dt_compat	= bcm5301x_dt_compat,
++	.init_early	= bcm5301x_init_early,
+ MACHINE_END
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
deleted file mode 100644
index af1ae61..0000000
--- a/target/linux/bcm53xx/patches-4.4/800-PCI-iproc-Ignore-ARM-core-aborts-when-running-on-bcm.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5 at 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 at 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");



More information about the lede-commits mailing list