blob: 2e731aa8701dd0da2af00372e06ee715d8d0958f [file] [log] [blame]
Tom Rini10e47792018-05-06 17:58:06 -04001// SPDX-License-Identifier: GPL-2.0+
Andreas Bießmann25429862015-02-06 23:06:45 +01002/*
Andreas Bießmann07dafdb2016-05-01 03:46:16 +02003 * Copyright (c) 2015 Andreas Bießmann <andreas@biessmann.org>
Andreas Bießmann25429862015-02-06 23:06:45 +01004 *
5 * Copyright (c) 2011 The Chromium OS Authors.
6 * (C) Copyright 2002-2006
7 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
8 *
9 * (C) Copyright 2002
10 * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
11 * Marius Groeger <mgroeger@sysgo.de>
Andreas Bießmann25429862015-02-06 23:06:45 +010012 */
13#include <common.h>
Simon Glass97589732020-05-10 11:40:02 -060014#include <init.h>
Simon Glass3ba929a2020-10-30 21:38:53 -060015#include <asm/global_data.h>
Ovidiu Panaitbbce5f32022-09-13 21:31:28 +030016#include <asm/mp.h>
Andreas Bießmann25429862015-02-06 23:06:45 +010017
18DECLARE_GLOBAL_DATA_PTR;
19
20int arch_reserve_stacks(void)
21{
22 ulong *s;
23
24 /* setup stack pointer for exceptions */
25 gd->irq_sp = gd->start_addr_sp;
26
27 /* Clear initial stack frame */
28 s = (ulong *)gd->start_addr_sp;
29 *s = 0; /* Terminate back chain */
30 *++s = 0; /* NULL return address */
31
32 return 0;
33}
Ovidiu Panaitbbce5f32022-09-13 21:31:28 +030034
35int arch_setup_dest_addr(void)
36{
37#if defined(CONFIG_MP) && (defined(CONFIG_MPC86xx) || defined(CONFIG_E500))
38 /*
39 * We need to make sure the location we intend to put secondary core
40 * boot code is reserved and not used by any part of u-boot
41 */
42 if (gd->relocaddr > determine_mp_bootpg(NULL)) {
43 gd->relocaddr = determine_mp_bootpg(NULL);
44 debug("Reserving MP boot page to %08lx\n", gd->relocaddr);
45 }
46#endif
47
48 return 0;
49}