forked from Minki/linux
7eb68a2a05
Broadcom ARM devices seem to generate some fault once per boot. We already have an ignoring handler for BCM4707/BCM4708, but BCM4709 generates different code. Signed-off-by: Rafał Miłecki <zajec5@gmail.com> Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
58 lines
1.3 KiB
C
58 lines
1.3 KiB
C
/*
|
|
* Broadcom BCM470X / BCM5301X ARM platform code.
|
|
*
|
|
* Copyright 2013 Hauke Mehrtens <hauke@hauke-m.de>
|
|
*
|
|
* Licensed under the GNU/GPL. See COPYING for details.
|
|
*/
|
|
#include <linux/of_platform.h>
|
|
#include <asm/hardware/cache-l2x0.h>
|
|
|
|
#include <asm/mach/arch.h>
|
|
#include <asm/siginfo.h>
|
|
#include <asm/signal.h>
|
|
|
|
|
|
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 __initconst *bcm5301x_dt_compat[] = {
|
|
"brcm,bcm4708",
|
|
NULL,
|
|
};
|
|
|
|
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
|