From 9f116fae920d271b564d66b77c26ccbd7298c905 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rafa=C5=82=20Mi=C5=82ecki?= Date: Tue, 8 Mar 2016 08:29:29 +0000 Subject: [PATCH] bcm53xx: revert patch removing imprecise abort workaround MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit It seems it still happens on some devices. Signed-off-by: Rafał Miłecki SVN-Revision: 48961 --- ...01X-remove-workaround-imprecise-abor.patch | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 target/linux/bcm53xx/patches-4.4/301-Revert-ARM-BCM5301X-remove-workaround-imprecise-abor.patch diff --git a/target/linux/bcm53xx/patches-4.4/301-Revert-ARM-BCM5301X-remove-workaround-imprecise-abor.patch b/target/linux/bcm53xx/patches-4.4/301-Revert-ARM-BCM5301X-remove-workaround-imprecise-abor.patch new file mode 100644 index 0000000000..907c581387 --- /dev/null +++ b/target/linux/bcm53xx/patches-4.4/301-Revert-ARM-BCM5301X-remove-workaround-imprecise-abor.patch @@ -0,0 +1,66 @@ +From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= +Date: Tue, 8 Mar 2016 09:03:21 +0100 +Subject: [PATCH] Revert "ARM: BCM5301X: remove workaround imprecise abort + fault handler" +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This reverts commit 937b12306ea79044c86f2e69b3061c7279245825. + +It seems imprecise external abort (0x1406) can be still happen on +BCM4709 during PCI initialization. + +Signed-off-by: Rafał Miłecki +--- + +--- a/arch/arm/mach-bcm/bcm_5301x.c ++++ b/arch/arm/mach-bcm/bcm_5301x.c +@@ -9,6 +9,40 @@ + #include + + #include ++#include ++#include ++ ++ ++static bool first_fault = true; ++ ++static int bcm5301x_abort_handler(unsigned long addr, unsigned int fsr, ++ struct pt_regs *regs) ++{ ++ if ((fsr == 0x1406 || fsr == 0x1c06) && first_fault) { ++ first_fault = false; ++ ++ /* ++ * These faults with codes 0x1406 (BCM4709) or 0x1c06 happens ++ * for no good reason, possibly left over from the CFE boot ++ * loader. ++ */ ++ pr_warn("External imprecise Data abort at addr=%#lx, fsr=%#x ignored.\n", ++ addr, fsr); ++ ++ /* Returning non-zero causes fault display and panic */ ++ return 0; ++ } ++ ++ /* Others should cause a fault */ ++ return 1; ++} ++ ++static void __init bcm5301x_init_early(void) ++{ ++ /* Install our hook */ ++ hook_fault_code(16 + 6, bcm5301x_abort_handler, SIGBUS, BUS_OBJERR, ++ "imprecise external abort"); ++} + + static const char *const bcm5301x_dt_compat[] __initconst = { + "brcm,bcm4708", +@@ -18,5 +52,6 @@ static const char *const bcm5301x_dt_com + DT_MACHINE_START(BCM5301X, "BCM5301X") + .l2c_aux_val = 0, + .l2c_aux_mask = ~0, ++ .init_early = bcm5301x_init_early, + .dt_compat = bcm5301x_dt_compat, + MACHINE_END -- 2.30.2