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 | { | |
7eb68a2a | 21 | if ((fsr == 0x1406 || fsr == 0x1c06) && first_fault) { |
fdf4850c HM |
22 | first_fault = false; |
23 | ||
24 | /* | |
7eb68a2a RM |
25 | * These faults with codes 0x1406 (BCM4709) or 0x1c06 happens |
26 | * for no good reason, possibly left over from the CFE boot | |
27 | * loader. | |
fdf4850c HM |
28 | */ |
29 | pr_warn("External imprecise Data abort at addr=%#lx, fsr=%#x ignored.\n", | |
7eb68a2a | 30 | addr, fsr); |
fdf4850c HM |
31 | |
32 | /* Returning non-zero causes fault display and panic */ | |
33 | return 0; | |
34 | } | |
35 | ||
36 | /* Others should cause a fault */ | |
37 | return 1; | |
38 | } | |
39 | ||
40 | static void __init bcm5301x_init_early(void) | |
41 | { | |
42 | /* Install our hook */ | |
43 | hook_fault_code(16 + 6, bcm5301x_abort_handler, SIGBUS, BUS_OBJERR, | |
44 | "imprecise external abort"); | |
45 | } | |
46 | ||
19c233b7 | 47 | static const char *const bcm5301x_dt_compat[] __initconst = { |
5b293ebe HM |
48 | "brcm,bcm4708", |
49 | NULL, | |
50 | }; | |
51 | ||
52 | DT_MACHINE_START(BCM5301X, "BCM5301X") | |
d458773f RK |
53 | .l2c_aux_val = 0, |
54 | .l2c_aux_mask = ~0, | |
fdf4850c | 55 | .init_early = bcm5301x_init_early, |
5b293ebe HM |
56 | .dt_compat = bcm5301x_dt_compat, |
57 | MACHINE_END |