xref: /linux/arch/arm/mach-socfpga/headsmp.S (revision 8e07e0e3964ca4e23ce7b68e2096fe660a888942)
1/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3 *  Copyright (c) 2003 ARM Limited
4 *  Copyright (c) u-boot contributors
5 *  Copyright (c) 2012 Pavel Machek <pavel@denx.de>
6 */
7#include <linux/linkage.h>
8#include <linux/init.h>
9#include <asm/page.h>
10#include <asm/assembler.h>
11
12	.arch	armv7-a
13	.arm
14
15ENTRY(secondary_trampoline)
16	/* CPU1 will always fetch from 0x0 when it is brought out of reset.
17	 * Thus, we can just subtract the PAGE_OFFSET to get the physical
18	 * address of &cpu1start_addr. This would not work for platforms
19	 * where the physical memory does not start at 0x0.
20	*/
21ARM_BE8(setend	be)
22	adr	r0, 1f
23	ldmia	r0, {r1, r2}
24	sub	r2, r2, #PAGE_OFFSET
25	ldr	r3, [r2]
26	ldr	r4, [r3]
27ARM_BE8(rev	r4, r4)
28	bx	r4
29
30	.align
311:	.long	.
32	.long	socfpga_cpu1start_addr
33ENTRY(secondary_trampoline_end)
34