0001
0002
0003
0004
0005
0006
0007
0008 #include <linux/of_platform.h>
0009 #include <asm/hardware/cache-l2x0.h>
0010
0011 #include <asm/mach/arch.h>
0012 #include <asm/siginfo.h>
0013 #include <asm/signal.h>
0014
0015 #define FSR_EXTERNAL (1 << 12)
0016 #define FSR_READ (0 << 10)
0017 #define FSR_IMPRECISE 0x0406
0018
0019 static const char *const bcm5301x_dt_compat[] __initconst = {
0020 "brcm,bcm4708",
0021 NULL,
0022 };
0023
0024 static int bcm5301x_abort_handler(unsigned long addr, unsigned int fsr,
0025 struct pt_regs *regs)
0026 {
0027
0028
0029
0030
0031
0032
0033 if (fsr == (FSR_EXTERNAL | FSR_READ | FSR_IMPRECISE))
0034 return 0;
0035
0036 return 1;
0037 }
0038
0039 static void __init bcm5301x_init_early(void)
0040 {
0041 hook_fault_code(16 + 6, bcm5301x_abort_handler, SIGBUS, BUS_OBJERR,
0042 "imprecise external abort");
0043 }
0044
0045 DT_MACHINE_START(BCM5301X, "BCM5301X")
0046 .l2c_aux_val = 0,
0047 .l2c_aux_mask = ~0,
0048 .dt_compat = bcm5301x_dt_compat,
0049 .init_early = bcm5301x_init_early,
0050 MACHINE_END