1*d7445676SArnd Bergmann/* SPDX-License-Identifier: GPL-2.0-only */
2*d7445676SArnd Bergmann/*
3*d7445676SArnd Bergmann *  Copyright (c) 2003 ARM Limited
4*d7445676SArnd Bergmann *  All Rights Reserved
5*d7445676SArnd Bergmann */
6*d7445676SArnd Bergmann#include <linux/linkage.h>
7*d7445676SArnd Bergmann#include <linux/init.h>
8*d7445676SArnd Bergmann#include <asm/assembler.h>
9*d7445676SArnd Bergmann
10*d7445676SArnd Bergmann/*
11*d7445676SArnd Bergmann * Realview/Versatile Express specific entry point for secondary CPUs.
12*d7445676SArnd Bergmann * This provides a "holding pen" into which all secondary cores are held
13*d7445676SArnd Bergmann * until we're ready for them to initialise.
14*d7445676SArnd Bergmann */
15*d7445676SArnd BergmannENTRY(versatile_secondary_startup)
16*d7445676SArnd Bergmann ARM_BE8(setend	be)
17*d7445676SArnd Bergmann	mrc	p15, 0, r0, c0, c0, 5
18*d7445676SArnd Bergmann	bic	r0, #0xff000000
19*d7445676SArnd Bergmann	adr	r4, 1f
20*d7445676SArnd Bergmann	ldmia	r4, {r5, r6}
21*d7445676SArnd Bergmann	sub	r4, r4, r5
22*d7445676SArnd Bergmann	add	r6, r6, r4
23*d7445676SArnd Bergmannpen:	ldr	r7, [r6]
24*d7445676SArnd Bergmann	cmp	r7, r0
25*d7445676SArnd Bergmann	bne	pen
26*d7445676SArnd Bergmann
27*d7445676SArnd Bergmann	/*
28*d7445676SArnd Bergmann	 * we've been released from the holding pen: secondary_stack
29*d7445676SArnd Bergmann	 * should now contain the SVC stack for this core
30*d7445676SArnd Bergmann	 */
31*d7445676SArnd Bergmann	b	secondary_startup
32*d7445676SArnd Bergmann
33*d7445676SArnd Bergmann	.align
34*d7445676SArnd Bergmann1:	.long	.
35*d7445676SArnd Bergmann	.long	versatile_cpu_release
36*d7445676SArnd BergmannENDPROC(versatile_secondary_startup)
37