0001
0002
0003
0004
0005
0006
0007 #include <linux/linkage.h>
0008 #include <linux/init.h>
0009 #include <asm/assembler.h>
0010
0011 diag_reg_offset:
0012 .word g_diag_reg - .
0013
0014 .macro set_diag_reg
0015 adr r0, diag_reg_offset
0016 ldr r1, [r0]
0017 add r1, r1, r0 @ r1 = physical &g_diag_reg
0018 ldr r0, [r1]
0019 mcr p15, 0, r0, c15, c0, 1 @ write diagnostic register
0020 .endm
0021
0022 ENTRY(v7_secondary_startup)
0023 ARM_BE8(setend be) @ go BE8 if entered LE
0024 mrc p15, 0, r0, c0, c0, 0
0025 lsl r0, r0, #16
0026 lsr r0, r0, #20
0027
0028 mov r1, #0xc00
0029 orr r1, #0x7
0030 cmp r0, r1
0031 beq secondary_startup
0032
0033 set_diag_reg
0034 b secondary_startup
0035 ENDPROC(v7_secondary_startup)