/* * (C) Copyright 2002 * Sysgo Real-Time Solutions, GmbH * Marius Groeger * * (C) Copyright 2002 * Sysgo Real-Time Solutions, GmbH * Alex Zuepke * * See file CREDITS for list of people who contributed to this * project. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #ifndef _BAREBOX_ARM_H_ #define _BAREBOX_ARM_H_ #include #include /* cpu/.../cpu.c */ int cleanup_before_linux(void); /* arch/board(s)/.../... */ int board_init(void); int dram_init (void); extern char __exceptions_start[], __exceptions_stop[]; void board_init_lowlevel(void); uint32_t get_runtime_offset(void); void setup_c(void); void relocate_to_current_adr(void); void relocate_to_adr(unsigned long target); void __noreturn barebox_arm_entry(unsigned long membase, unsigned long memsize, void *boarddata); void *barebox_arm_boarddata(void); #if defined(CONFIG_RELOCATABLE) && defined(CONFIG_ARM_EXCEPTIONS) void arm_fixup_vectors(void); #else static inline void arm_fixup_vectors(void) { } #endif void *barebox_arm_boot_dtb(void); /* * For relocatable binaries find a suitable start address for the * relocated binary. Beginning at the memory end substract the reserved * space and round down a bit at the end. This is used by the pbl to * extract the image to a suitable place so that the uncompressed image * does not have to copy itself to another place. Also it's used by * the uncompressed image to relocate itself to the same place. */ static inline unsigned long arm_barebox_image_place(unsigned long endmem) { endmem -= STACK_SIZE; endmem -= SZ_32K; /* ttb */ endmem -= SZ_128K; /* early malloc */ endmem -= SZ_1M; /* place for barebox image */ /* * round down to make translating the objdump easier */ endmem &= ~(SZ_1M - 1); return endmem; } #define ENTRY_FUNCTION(name, arg0, arg1, arg2) \ static void __##name(uint32_t, uint32_t, uint32_t); \ \ void __naked __section(.text_head_entry_##name) name \ (uint32_t r0, uint32_t r1, uint32_t r2) \ { \ __barebox_arm_head(); \ __##name(r0, r1, r2); \ } \ static void __naked noinline __##name \ (uint32_t arg0, uint32_t arg1, uint32_t arg2) #endif /* _BAREBOX_ARM_H_ */