19c4566a1SDinh Nguyen/* 29c4566a1SDinh Nguyen * Copyright (c) 2003 ARM Limited 39c4566a1SDinh Nguyen * Copyright (c) u-boot contributors 49c4566a1SDinh Nguyen * Copyright (c) 2012 Pavel Machek <pavel@denx.de> 59c4566a1SDinh Nguyen * 69c4566a1SDinh Nguyen * This program is free software; you can redistribute it and/or modify 79c4566a1SDinh Nguyen * it under the terms of the GNU General Public License version 2 as 89c4566a1SDinh Nguyen * published by the Free Software Foundation. 99c4566a1SDinh Nguyen */ 109c4566a1SDinh Nguyen#include <linux/linkage.h> 119c4566a1SDinh Nguyen#include <linux/init.h> 123a4356c0SDinh Nguyen#include <asm/memory.h> 139c4566a1SDinh Nguyen 14ad208d03SPavel Machek .arch armv7-a 159c4566a1SDinh Nguyen 169c4566a1SDinh NguyenENTRY(secondary_trampoline) 173a4356c0SDinh Nguyen /* CPU1 will always fetch from 0x0 when it is brought out of reset. 183a4356c0SDinh Nguyen * Thus, we can just subtract the PAGE_OFFSET to get the physical 193a4356c0SDinh Nguyen * address of &cpu1start_addr. This would not work for platforms 203a4356c0SDinh Nguyen * where the physical memory does not start at 0x0. 213a4356c0SDinh Nguyen */ 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] 273a4356c0SDinh Nguyen bx r4 289c4566a1SDinh Nguyen 293a4356c0SDinh Nguyen .align 303a4356c0SDinh Nguyen1: .long . 313a4356c0SDinh Nguyen .long socfpga_cpu1start_addr 329c4566a1SDinh NguyenENTRY(secondary_trampoline_end) 33d6dd735fSDinh Nguyen 34d6dd735fSDinh NguyenENTRY(socfpga_secondary_startup) 35d6dd735fSDinh Nguyen bl v7_invalidate_l1 36d6dd735fSDinh Nguyen b secondary_startup 37d6dd735fSDinh NguyenENDPROC(socfpga_secondary_startup) 38