1*68145d4cSAndreas Bießmann /* 2*68145d4cSAndreas Bießmann * Copyright (c) 2015 Andreas Bießmann <andreas.devel@googlemail.com> 3*68145d4cSAndreas Bießmann * 4*68145d4cSAndreas Bießmann * Copyright (c) 2011 The Chromium OS Authors. 5*68145d4cSAndreas Bießmann * (C) Copyright 2002-2006 6*68145d4cSAndreas Bießmann * Wolfgang Denk, DENX Software Engineering, wd@denx.de. 7*68145d4cSAndreas Bießmann * 8*68145d4cSAndreas Bießmann * (C) Copyright 2002 9*68145d4cSAndreas Bießmann * Sysgo Real-Time Solutions, GmbH <www.elinos.com> 10*68145d4cSAndreas Bießmann * Marius Groeger <mgroeger@sysgo.de> 11*68145d4cSAndreas Bießmann * 12*68145d4cSAndreas Bießmann * SPDX-License-Identifier: GPL-2.0+ 13*68145d4cSAndreas Bießmann */ 14*68145d4cSAndreas Bießmann #include <common.h> 15*68145d4cSAndreas Bießmann 16*68145d4cSAndreas Bießmann DECLARE_GLOBAL_DATA_PTR; 17*68145d4cSAndreas Bießmann 18*68145d4cSAndreas Bießmann int arch_reserve_stacks(void) 19*68145d4cSAndreas Bießmann { 20*68145d4cSAndreas Bießmann #ifdef CONFIG_SPL_BUILD 21*68145d4cSAndreas Bießmann gd->start_addr_sp -= 128; /* leave 32 words for abort-stack */ 22*68145d4cSAndreas Bießmann gd->irq_sp = gd->start_addr_sp; 23*68145d4cSAndreas Bießmann #else 24*68145d4cSAndreas Bießmann /* setup stack pointer for exceptions */ 25*68145d4cSAndreas Bießmann gd->irq_sp = gd->start_addr_sp; 26*68145d4cSAndreas Bießmann 27*68145d4cSAndreas Bießmann # if !defined(CONFIG_ARM64) 28*68145d4cSAndreas Bießmann # ifdef CONFIG_USE_IRQ 29*68145d4cSAndreas Bießmann gd->start_addr_sp -= (CONFIG_STACKSIZE_IRQ + CONFIG_STACKSIZE_FIQ); 30*68145d4cSAndreas Bießmann debug("Reserving %zu Bytes for IRQ stack at: %08lx\n", 31*68145d4cSAndreas Bießmann CONFIG_STACKSIZE_IRQ + CONFIG_STACKSIZE_FIQ, gd->start_addr_sp); 32*68145d4cSAndreas Bießmann 33*68145d4cSAndreas Bießmann /* 8-byte alignment for ARM ABI compliance */ 34*68145d4cSAndreas Bießmann gd->start_addr_sp &= ~0x07; 35*68145d4cSAndreas Bießmann # endif 36*68145d4cSAndreas Bießmann /* leave 3 words for abort-stack, plus 1 for alignment */ 37*68145d4cSAndreas Bießmann gd->start_addr_sp -= 16; 38*68145d4cSAndreas Bießmann # endif 39*68145d4cSAndreas Bießmann #endif 40*68145d4cSAndreas Bießmann 41*68145d4cSAndreas Bießmann return 0; 42*68145d4cSAndreas Bießmann } 43