summaryrefslogtreecommitdiffstats
path: root/arch/arm/include/asm/barebox-arm.h
diff options
context:
space:
mode:
authorAhmad Fatoum <a.fatoum@pengutronix.de>2024-02-20 10:30:49 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2024-02-23 08:30:30 +0100
commit8b95ed2a0f6beec73e9469119db2477bf5d47fbe (patch)
tree4915a439a3f27f2feb9506386a64b77f884d0db6 /arch/arm/include/asm/barebox-arm.h
parentf6c56c2011c3ca22fcfbe9fabf94e61743f2cc7e (diff)
downloadbarebox-8b95ed2a0f6beec73e9469119db2477bf5d47fbe.tar.gz
barebox-8b95ed2a0f6beec73e9469119db2477bf5d47fbe.tar.xz
ARM: replace ENTRY_FUNCTION_HEAD with ENTRY_FUNCTION_WITHSTACK_HEAD
To allow SoC-specific entry functions that don't replicate the code in ENTRY_FUNCTION, we provide a helper macro that support specifying a custom HEAD, but only on arm32. Make this macro private by prefixing with __ and implement the superset ENTRY_FUNCTION_WITHSTACK_HEAD for both arm32 and arm64 that should be used instead. Eventually, we will want to switch away from naked functions on arm32, like we did on arm64 and then we could use the same implementation for both platforms (and support clang on arm32!), but till then, this seems the least ugly way to go about it. Reviewed-by: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> Link: https://lore.barebox.org/20240220093100.1539120-4-a.fatoum@pengutronix.de Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/arm/include/asm/barebox-arm.h')
-rw-r--r--arch/arm/include/asm/barebox-arm.h20
1 files changed, 14 insertions, 6 deletions
diff --git a/arch/arm/include/asm/barebox-arm.h b/arch/arm/include/asm/barebox-arm.h
index 382fa8505a..361edcf37e 100644
--- a/arch/arm/include/asm/barebox-arm.h
+++ b/arch/arm/include/asm/barebox-arm.h
@@ -165,7 +165,7 @@ static inline unsigned long arm_mem_barebox_image(unsigned long membase,
void __barebox_arm64_head(ulong x0, ulong x1, ulong x2);
-#define ENTRY_FUNCTION_WITHSTACK(name, stack_top, arg0, arg1, arg2) \
+#define ENTRY_FUNCTION_WITHSTACK_HEAD(name, stack_top, head, arg0, arg1, arg2) \
void name(ulong r0, ulong r1, ulong r2); \
\
static void __##name(ulong, ulong, ulong); \
@@ -175,20 +175,24 @@ void __barebox_arm64_head(ulong x0, ulong x1, ulong x2);
{ \
static __section(.pbl_board_stack_top_##name) \
const ulong __stack_top = (stack_top); \
- __keep_symbolref(__barebox_arm64_head); \
+ __keep_symbolref(head); \
__keep_symbolref(__stack_top); \
__##name(r0, r1, r2); \
} \
static void noinline __##name \
(ulong arg0, ulong arg1, ulong arg2)
+#define ENTRY_FUNCTION_WITHSTACK(name, stack_top, arg0, arg1, arg2) \
+ ENTRY_FUNCTION_WITHSTACK_HEAD(name, stack_top, \
+ __barebox_arm64_head, arg0, arg1, arg2)
+
#define ENTRY_FUNCTION(name, arg0, arg1, arg2) \
ENTRY_FUNCTION_WITHSTACK(name, 0, arg0, arg1, arg2)
#else
-#define ENTRY_FUNCTION_WITHSTACK(name, stack_top, arg0, arg1, arg2) \
+#define ENTRY_FUNCTION_WITHSTACK_HEAD(name, stack_top, head, arg0, arg1, arg2) \
static void ____##name(ulong, ulong, ulong); \
- ENTRY_FUNCTION(name, arg0, arg1, arg2) \
+ __ENTRY_FUNCTION_HEAD(name, head, arg0, arg1, arg2) \
{ \
if (stack_top) \
arm_setup_stack(stack_top); \
@@ -197,7 +201,7 @@ void __barebox_arm64_head(ulong x0, ulong x1, ulong x2);
static void noinline ____##name \
(ulong arg0, ulong arg1, ulong arg2)
-#define ENTRY_FUNCTION_HEAD(name, head, arg0, arg1, arg2) \
+#define __ENTRY_FUNCTION_HEAD(name, head, arg0, arg1, arg2) \
void name(ulong r0, ulong r1, ulong r2); \
\
static void __##name(ulong, ulong, ulong); \
@@ -212,7 +216,11 @@ void __barebox_arm64_head(ulong x0, ulong x1, ulong x2);
(ulong arg0, ulong arg1, ulong arg2)
#define ENTRY_FUNCTION(name, arg0, arg1, arg2) \
- ENTRY_FUNCTION_HEAD(name, __barebox_arm_head, arg0, arg1, arg2)
+ __ENTRY_FUNCTION_HEAD(name, __barebox_arm_head, arg0, arg1, arg2)
+
+#define ENTRY_FUNCTION_WITHSTACK(name, stack_top, arg0, arg1, arg2) \
+ ENTRY_FUNCTION_WITHSTACK_HEAD(name, stack_top, \
+ __barebox_arm_head, arg0, arg1, arg2)
#endif
/*