1d2912cb1SThomas Gleixner/* SPDX-License-Identifier: GPL-2.0-only */ 29c4566a1SDinh Nguyen/* 39c4566a1SDinh Nguyen * Copyright (c) 2003 ARM Limited 49c4566a1SDinh Nguyen * Copyright (c) u-boot contributors 59c4566a1SDinh Nguyen * Copyright (c) 2012 Pavel Machek <pavel@denx.de> 69c4566a1SDinh Nguyen */ 79c4566a1SDinh Nguyen#include <linux/linkage.h> 89c4566a1SDinh Nguyen#include <linux/init.h> 9*a9ff6961SLinus Walleij#include <asm/page.h> 10bf55e0a4SBen Dooks#include <asm/assembler.h> 119c4566a1SDinh Nguyen 12ad208d03SPavel Machek .arch armv7-a 135616f367SSascha Hauer .arm 149c4566a1SDinh Nguyen 159c4566a1SDinh NguyenENTRY(secondary_trampoline) 163a4356c0SDinh Nguyen /* CPU1 will always fetch from 0x0 when it is brought out of reset. 173a4356c0SDinh Nguyen * Thus, we can just subtract the PAGE_OFFSET to get the physical 183a4356c0SDinh Nguyen * address of &cpu1start_addr. This would not work for platforms 193a4356c0SDinh Nguyen * where the physical memory does not start at 0x0. 203a4356c0SDinh Nguyen */ 21bf55e0a4SBen DooksARM_BE8(setend be) 223a4356c0SDinh Nguyen adr r0, 1f 233a4356c0SDinh Nguyen ldmia r0, {r1, r2} 243a4356c0SDinh Nguyen sub r2, r2, #PAGE_OFFSET 253a4356c0SDinh Nguyen ldr r3, [r2] 263a4356c0SDinh Nguyen ldr r4, [r3] 27bf55e0a4SBen DooksARM_BE8(rev r4, r4) 283a4356c0SDinh Nguyen bx r4 299c4566a1SDinh Nguyen 303a4356c0SDinh Nguyen .align 313a4356c0SDinh Nguyen1: .long . 323a4356c0SDinh Nguyen .long socfpga_cpu1start_addr 339c4566a1SDinh NguyenENTRY(secondary_trampoline_end) 34