[PATCH v2 2/3] common: board: make initcalls static

Jerome Forissier jerome.forissier at linaro.org
Fri Jan 24 16:57:39 CET 2025



On 1/24/25 11:35, Marek Vasut wrote:
> On 1/24/25 10:10 AM, Jerome Forissier wrote:
>> +#define INITCALL(_call) \
>> +    do { \
>> +        if (_call()) { \
>> +            printf("%s(): initcall %s() failed\n", __func__, \
>> +                   #_call); \
>> +            hang(); \
>> +        } \
>> +    } while (0)
> 
> Can this be turned into some static inline function too , so typechecking would be retained ? Maybe the function can be passed in a function pointer to call ?


Doing the below totally kills the space gain (-160 bytes instead of -2281
on zynqmp_kria_defconfig, with LTO). And it prevents from printing the
function name in case of error, which is nicer than an address
(especially with relocation at play).

============
diff --git a/include/initcall.h b/include/initcall.h
index 220a55ad84d..097c32e141c 100644
--- a/include/initcall.h
+++ b/include/initcall.h
@@ -12,6 +12,14 @@
 
 _Static_assert(EVT_COUNT < 256, "Can only support 256 event types with 8 bits");
 
+static inline void INITCALL(int (*_call)(void))
+{
+	if (_call()) {
+		printf("initcall %p failed\n", _call);
+		hang();
+	}
+}
+#if 0
 #define INITCALL(_call) \
 	do { \
 		if (_call()) { \
@@ -20,6 +28,7 @@ _Static_assert(EVT_COUNT < 256, "Can only support 256 event types with 8 bits");
 			hang(); \
 		} \
 	} while (0)
+#endif
 
 #define INITCALL_EVT(_evt) \
 	do { \
============

Regards,
-- 
Jerome


More information about the U-Boot mailing list