123456789101112131415161718192021222324252627282930313233343536373839404142 |
- /*
- * Copyright (c) 2015 Andreas Bießmann <andreas.devel@googlemail.com>
- *
- * Copyright (c) 2011 The Chromium OS Authors.
- * (C) Copyright 2002-2006
- * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
- *
- * (C) Copyright 2002
- * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
- * Marius Groeger <mgroeger@sysgo.de>
- *
- * SPDX-License-Identifier: GPL-2.0+
- */
- #include <common.h>
- DECLARE_GLOBAL_DATA_PTR;
- int arch_reserve_stacks(void)
- {
- #ifdef CONFIG_SPL_BUILD
- gd->start_addr_sp -= 128; /* leave 32 words for abort-stack */
- gd->irq_sp = gd->start_addr_sp;
- #else
- /* setup stack pointer for exceptions */
- gd->irq_sp = gd->start_addr_sp;
- # if !defined(CONFIG_ARM64)
- # ifdef CONFIG_USE_IRQ
- gd->start_addr_sp -= (CONFIG_STACKSIZE_IRQ + CONFIG_STACKSIZE_FIQ);
- debug("Reserving %zu Bytes for IRQ stack at: %08lx\n",
- CONFIG_STACKSIZE_IRQ + CONFIG_STACKSIZE_FIQ, gd->start_addr_sp);
- /* 8-byte alignment for ARM ABI compliance */
- gd->start_addr_sp &= ~0x07;
- # endif
- /* leave 3 words for abort-stack, plus 1 for alignment */
- gd->start_addr_sp -= 16;
- # endif
- #endif
- return 0;
- }
|