From aa0f3ebe93b7e621a1852da21744d7763db27611 Mon Sep 17 00:00:00 2001 From: iabdalkader Date: Thu, 21 Mar 2024 12:02:24 +0100 Subject: [PATCH] extmod/modopenamp: Set a default log handler for ports. Use the existing metal log handling mechanism instead of overriding the metal_log, which causes build issues when logging is enabled. Signed-off-by: iabdalkader --- extmod/libmetal/metal/config.h | 7 ------- extmod/modopenamp.c | 18 +++++++++++++++++- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/extmod/libmetal/metal/config.h b/extmod/libmetal/metal/config.h index 459a2f4ca4..e553f10783 100644 --- a/extmod/libmetal/metal/config.h +++ b/extmod/libmetal/metal/config.h @@ -57,13 +57,6 @@ #define METAL_MAX_DEVICE_REGIONS 1 #endif -// generic/log.h -#if METAL_LOG_HANDLER_ENABLE -#include "py/mphal.h" -#undef metal_log -#define metal_log(level, ...) mp_printf(&mp_plat_print, __VA_ARGS__) -#endif - static inline void *__metal_allocate_memory(unsigned int size) { return m_tracked_calloc(1, size); } diff --git a/extmod/modopenamp.c b/extmod/modopenamp.c index eb19c4b737..1392f5427e 100644 --- a/extmod/modopenamp.c +++ b/extmod/modopenamp.c @@ -28,9 +28,11 @@ #if MICROPY_PY_OPENAMP +#include #include "py/obj.h" #include "py/nlr.h" #include "py/runtime.h" +#include "py/mpprint.h" #include "metal/sys.h" #include "metal/alloc.h" @@ -315,6 +317,13 @@ static mp_obj_t openamp_new_service_callback(mp_obj_t ns_callback) { } static MP_DEFINE_CONST_FUN_OBJ_1(openamp_new_service_callback_obj, openamp_new_service_callback); +void openamp_metal_log_handler(enum metal_log_level level, const char *fmt, ...) { + va_list args; + va_start(args, fmt); + mp_vprintf(&mp_plat_print, fmt, args); + va_end(args); +} + void openamp_init(void) { if (MP_STATE_PORT(virtio_device) != NULL) { // Already initialized. @@ -322,7 +331,14 @@ void openamp_init(void) { } struct metal_device *device; - struct metal_init_params metal_params = METAL_INIT_DEFAULTS; + struct metal_init_params metal_params = { 0 }; + + #if METAL_LOG_HANDLER_ENABLE + // If logging is enabled, set the default log level and handler before + // calling metal_init, to allow ports to override them in metal_sys_init. + metal_params.log_level = METAL_LOG_DEBUG; + metal_params.log_handler = openamp_metal_log_handler; + #endif // Initialize libmetal. metal_init(&metal_params);