|
@@ -166,7 +166,30 @@ ENTRY(cpu_init_cp15)
|
|
|
mcr p15, 0, r0, c15, c0, 1 @ write diagnostic register
|
|
|
#endif
|
|
|
|
|
|
- mov pc, lr @ back to my caller
|
|
|
+ mov r5, lr @ Store my Caller
|
|
|
+ mrc p15, 0, r1, c0, c0, 0 @ r1 has Read Main ID Register (MIDR)
|
|
|
+ mov r3, r1, lsr #20 @ get variant field
|
|
|
+ and r3, r3, #0xf @ r3 has CPU variant
|
|
|
+ and r4, r1, #0xf @ r4 has CPU revision
|
|
|
+ mov r2, r3, lsl #4 @ shift variant field for combined value
|
|
|
+ orr r2, r4, r2 @ r2 has combined CPU variant + revision
|
|
|
+
|
|
|
+#ifdef CONFIG_ARM_ERRATA_798870
|
|
|
+ cmp r2, #0x30 @ Applies to lower than R3p0
|
|
|
+ bge skip_errata_798870 @ skip if not affected rev
|
|
|
+ cmp r2, #0x20 @ Applies to including and above R2p0
|
|
|
+ blt skip_errata_798870 @ skip if not affected rev
|
|
|
+
|
|
|
+ mrc p15, 1, r0, c15, c0, 0 @ read l2 aux ctrl reg
|
|
|
+ orr r0, r0, #1 << 7 @ Enable hazard-detect timeout
|
|
|
+ push {r1-r5} @ Save the cpu info registers
|
|
|
+ bl v7_arch_cp15_set_l2aux_ctrl
|
|
|
+ isb @ Recommended ISB after l2actlr update
|
|
|
+ pop {r1-r5} @ Restore the cpu info - fall through
|
|
|
+skip_errata_798870:
|
|
|
+#endif
|
|
|
+
|
|
|
+ mov pc, r5 @ back to my caller
|
|
|
ENDPROC(cpu_init_cp15)
|
|
|
|
|
|
#ifndef CONFIG_SKIP_LOWLEVEL_INIT
|