fix(console_log): correctly fill 32-bit args
ffa_console_log_32 function printed every other 4 characters
due to filling the ffa_value args to their full capacity of
64-bits rather than at 32-bit intervals as expected by ABI.
Signed-off-by: Kathleen Capella <kathleen.capella@arm.com>
Change-Id: I6bca636bd15339c790eead37922c705d89d822bf
diff --git a/inc/vmapi/hf/call.h b/inc/vmapi/hf/call.h
index 66e00a2..270b32d 100644
--- a/inc/vmapi/hf/call.h
+++ b/inc/vmapi/hf/call.h
@@ -536,7 +536,21 @@
.func = FFA_CONSOLE_LOG_32,
.arg1 = size,
};
- memcpy_s(&req.arg2, sizeof(uint32_t) * 6, src, size);
+
+ uint64_t *arg_addrs[] = {&req.arg2, &req.arg3, &req.arg4,
+ &req.arg5, &req.arg6, &req.arg7};
+
+ uint32_t src_index = 0;
+ uint32_t arg_idx = 0;
+
+ while (size > 0 && arg_idx < 6) {
+ size_t arg_size =
+ size < sizeof(uint32_t) ? size : sizeof(uint32_t);
+ memcpy_s(arg_addrs[arg_idx++], sizeof(uint32_t),
+ &src[src_index], arg_size);
+ src_index += arg_size;
+ size -= arg_size;
+ }
return ffa_call(req);
}