123456789101112131415161718192021222324252627282930313233343536373839 |
- /* SPDX-License-Identifier: GPL-2.0+ */
- /*
- * Copyright (C) 2016 Socionext Inc.
- * Author: Masahiro Yamada <yamada.masahiro@socionext.com>
- */
- #include <linux/linkage.h>
- #include <asm/system.h>
- .section ._secure.text, "ax"
- ENTRY(uniphier_smp_trampoline)
- ldr r0, 0f
- mrc p15, 0, r1, c1, c0, 0 @ SCTLR (System Control Register)
- orr r1, r1, #CR_I @ Enable ICache
- bic r1, r1, #(CR_C | CR_M) @ Disable MMU and Dcache
- mcr p15, 0, r1, c1, c0, 0
- bx r0
- 0: .word uniphier_secondary_startup
- .globl uniphier_smp_trampoline_end
- uniphier_smp_trampoline_end:
- ENDPROC(uniphier_smp_trampoline)
- LENTRY(uniphier_secondary_startup)
- mrc p15, 0, r1, c0, c0, 5 @ MPIDR (Multiprocessor Affinity Reg)
- and r1, r1, #0xff
- ldr r2, =uniphier_smp_booted
- mov r0, #1
- str r0, [r2, r1, lsl #2]
- ldr r2, =uniphier_psci_holding_pen_release
- pen: ldr r0, [r2]
- cmp r0, r1
- beq psci_cpu_entry
- wfe
- b pen
- ENDPROC(uniphier_secondary_startup)
|