Implement FFA_CONSOLE_LOG interface
Implement FFA_CONSOLE_LOG interface for sending debug logs to the SPMC.
The commit also replaces the proprietary trace call by FFA_CONSOLE_LOG.
Signed-off-by: Imre Kis <imre.kis@arm.com>
Change-Id: I5275470683e2674fdd6f5a61f9c5ab8dd71dcb11
diff --git a/components/messaging/ffa/libsp/ffa.c b/components/messaging/ffa/libsp/ffa.c
index caacc79..6a51379 100644
--- a/components/messaging/ffa/libsp/ffa.c
+++ b/components/messaging/ffa/libsp/ffa.c
@@ -6,6 +6,7 @@
#include <assert.h> // for assert
#include <stddef.h> // for size_t
#include <stdint.h> // for uint32_t, uint16_t, uintptr_t, U
+#include <string.h> // for memcpy
#include "ffa_api.h" // for FFA_OK, ffa_interrupt_handler, ffa_fea...
#include "ffa_api_defines.h" // for FFA_PARAM_MBZ, FFA_OK, FFA_ERROR, FFA_...
#include "ffa_api_types.h" // for ffa_result, ffa_direct_msg, ffa_uuid
@@ -525,3 +526,43 @@
assert(result.a0 == FFA_SUCCESS_32);
return FFA_OK;
}
+
+ffa_result ffa_console_log_32(const char *message, size_t length)
+{
+ struct ffa_params result = {0};
+ uint32_t char_lists[6] = {0};
+
+ assert(length > 0 && length <= sizeof(char_lists));
+
+ memcpy(char_lists, message, MIN(length, sizeof(char_lists)));
+
+ ffa_svc(FFA_CONSOLE_LOG_32, length, char_lists[0], char_lists[1],
+ char_lists[2], char_lists[3], char_lists[4], char_lists[5],
+ &result);
+
+ if (result.a0 == FFA_ERROR)
+ return ffa_get_errorcode(&result);
+
+ assert(result.a0 == FFA_SUCCESS_32);
+ return FFA_OK;
+}
+
+ffa_result ffa_console_log_64(const char *message, size_t length)
+{
+ struct ffa_params result = {0};
+ uint64_t char_lists[6] = {0};
+
+ assert(length > 0 && length <= sizeof(char_lists));
+
+ memcpy(char_lists, message, MIN(length, sizeof(char_lists)));
+
+ ffa_svc(FFA_CONSOLE_LOG_64, length, char_lists[0], char_lists[1],
+ char_lists[2], char_lists[3], char_lists[4], char_lists[5],
+ &result);
+
+ if (result.a0 == FFA_ERROR)
+ return ffa_get_errorcode(&result);
+
+ assert(result.a0 == FFA_SUCCESS_32);
+ return FFA_OK;
+}