Commit | Line | Data |
---|---|---|
5b293ebe HM |
1 | /* |
2 | * Broadcom BCM470X / BCM5301X ARM platform code. | |
3 | * | |
4 | * Copyright 2013 Hauke Mehrtens <hauke@hauke-m.de> | |
5 | * | |
6 | * Licensed under the GNU/GPL. See COPYING for details. | |
7 | */ | |
8 | #include <linux/of_platform.h> | |
9 | #include <asm/hardware/cache-l2x0.h> | |
10 | ||
11 | #include <asm/mach/arch.h> | |
fdf4850c HM |
12 | #include <asm/siginfo.h> |
13 | #include <asm/signal.h> | |
5b293ebe HM |
14 | |
15 | ||
fdf4850c HM |
16 | static bool first_fault = true; |
17 | ||
18 | static int bcm5301x_abort_handler(unsigned long addr, unsigned int fsr, | |
19 | struct pt_regs *regs) | |
20 | { | |
21 | if (fsr == 0x1c06 && first_fault) { | |
22 | first_fault = false; | |
23 | ||
24 | /* | |
25 | * These faults with code 0x1c06 happens for no good reason, | |
26 | * possibly left over from the CFE boot loader. | |
27 | */ | |
28 | pr_warn("External imprecise Data abort at addr=%#lx, fsr=%#x ignored.\n", | |
29 | addr, fsr); | |
30 | ||
31 | /* Returning non-zero causes fault display and panic */ | |
32 | return 0; | |
33 | } | |
34 | ||
35 | /* Others should cause a fault */ | |
36 | return 1; | |
37 | } | |
38 | ||
39 | static void __init bcm5301x_init_early(void) | |
40 | { | |
41 | /* Install our hook */ | |
42 | hook_fault_code(16 + 6, bcm5301x_abort_handler, SIGBUS, BUS_OBJERR, | |
43 | "imprecise external abort"); | |
44 | } | |
45 | ||
5b293ebe HM |
46 | static const char __initconst *bcm5301x_dt_compat[] = { |
47 | "brcm,bcm4708", | |
48 | NULL, | |
49 | }; | |
50 | ||
51 | DT_MACHINE_START(BCM5301X, "BCM5301X") | |
d458773f RK |
52 | .l2c_aux_val = 0, |
53 | .l2c_aux_mask = ~0, | |
fdf4850c | 54 | .init_early = bcm5301x_init_early, |
5b293ebe HM |
55 | .dt_compat = bcm5301x_dt_compat, |
56 | MACHINE_END |