1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
2 | /* |
3 | * Copyright 2011 Freescale Semiconductor, Inc. |
4 | * Copyright 2011 Linaro Ltd. |
5 | */ |
6 | |
7 | #include <linux/linkage.h> |
8 | #include <linux/init.h> |
9 | #include <asm/assembler.h> |
10 | |
11 | .arch armv7-a |
12 | |
13 | diag_reg_offset: |
14 | .word g_diag_reg - . |
15 | |
16 | .macro set_diag_reg |
17 | adr r0, diag_reg_offset |
18 | ldr r1, [r0] |
19 | add r1, r1, r0 @ r1 = physical &g_diag_reg |
20 | ldr r0, [r1] |
21 | mcr p15, 0, r0, c15, c0, 1 @ write diagnostic register |
22 | .endm |
23 | |
24 | ENTRY(v7_secondary_startup) |
25 | ARM_BE8(setend be) @ go BE8 if entered LE |
26 | mrc p15, 0, r0, c0, c0, 0 |
27 | lsl r0, r0, #16 |
28 | lsr r0, r0, #20 |
29 | /* 0xc07 is cortex A7's ID */ |
30 | mov r1, #0xc00 |
31 | orr r1, #0x7 |
32 | cmp r0, r1 |
33 | beq secondary_startup |
34 | |
35 | set_diag_reg |
36 | b secondary_startup |
37 | ENDPROC(v7_secondary_startup) |
38 | |