ArmPkg: StandaloneMmCoreEntryPoint: Use ARM_FFA_ARGS for misc buffer

The MISC_MM_COMMUNICATE_BUFFER stored the FF-A direct message
registers in a DIRECT_MSG_ARGS structure. Populating and reading it
required manually re-indexing every register (EventSvcArgs->Arg4..Arg17
into DirectMsgArgs.Arg0..Arg13). This shifted the register positions and
left the buffer layout inconsistent with the raw FF-A argument register
file, making it error prone to correlate a slot with its architectural
register.

Signed-off-by: Kun Qin <kun.qin@microsoft.com>
This commit is contained in:
Kun Qin 2026-07-24 00:49:22 -07:00 committed by mergify[bot]
parent b3f19fb5ce
commit 93ee300675
2 changed files with 20 additions and 32 deletions

View file

@ -58,13 +58,13 @@ typedef struct ServiceTableEntry {
*/
typedef struct {
/// Service guid
EFI_GUID HeaderGuid;
EFI_GUID HeaderGuid;
/// Length of Message. In case of misc service, sizeof (EventSvcArgs)
UINTN MessageLength;
UINTN MessageLength;
/// Delivered register values.
DIRECT_MSG_ARGS DirectMsgArgs;
ARM_FFA_ARGS FfaArgs;
} MISC_MM_COMMUNICATE_BUFFER;
typedef struct {

View file

@ -780,20 +780,20 @@ SetEventCompleteSvcArgs (
EventCompleteSvcArgs->Arg0 = ARM_FID_FFA_MSG_SEND_DIRECT_RESP2;
if (FfaMsgInfo->ServiceType == ServiceTypeMisc) {
EventCompleteSvcArgs->Arg4 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg0;
EventCompleteSvcArgs->Arg5 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg1;
EventCompleteSvcArgs->Arg6 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg2;
EventCompleteSvcArgs->Arg7 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg3;
EventCompleteSvcArgs->Arg8 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg4;
EventCompleteSvcArgs->Arg9 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg5;
EventCompleteSvcArgs->Arg10 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg6;
EventCompleteSvcArgs->Arg11 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg7;
EventCompleteSvcArgs->Arg12 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg8;
EventCompleteSvcArgs->Arg13 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg9;
EventCompleteSvcArgs->Arg14 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg10;
EventCompleteSvcArgs->Arg15 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg11;
EventCompleteSvcArgs->Arg16 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg12;
EventCompleteSvcArgs->Arg17 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg13;
EventCompleteSvcArgs->Arg4 = mMiscMmCommunicateBuffer->FfaArgs.Arg4;
EventCompleteSvcArgs->Arg5 = mMiscMmCommunicateBuffer->FfaArgs.Arg5;
EventCompleteSvcArgs->Arg6 = mMiscMmCommunicateBuffer->FfaArgs.Arg6;
EventCompleteSvcArgs->Arg7 = mMiscMmCommunicateBuffer->FfaArgs.Arg7;
EventCompleteSvcArgs->Arg8 = mMiscMmCommunicateBuffer->FfaArgs.Arg8;
EventCompleteSvcArgs->Arg9 = mMiscMmCommunicateBuffer->FfaArgs.Arg9;
EventCompleteSvcArgs->Arg10 = mMiscMmCommunicateBuffer->FfaArgs.Arg10;
EventCompleteSvcArgs->Arg11 = mMiscMmCommunicateBuffer->FfaArgs.Arg11;
EventCompleteSvcArgs->Arg12 = mMiscMmCommunicateBuffer->FfaArgs.Arg12;
EventCompleteSvcArgs->Arg13 = mMiscMmCommunicateBuffer->FfaArgs.Arg13;
EventCompleteSvcArgs->Arg14 = mMiscMmCommunicateBuffer->FfaArgs.Arg14;
EventCompleteSvcArgs->Arg15 = mMiscMmCommunicateBuffer->FfaArgs.Arg15;
EventCompleteSvcArgs->Arg16 = mMiscMmCommunicateBuffer->FfaArgs.Arg16;
EventCompleteSvcArgs->Arg17 = mMiscMmCommunicateBuffer->FfaArgs.Arg17;
}
}
@ -831,21 +831,9 @@ InitializeMiscMmCommunicateBuffer (
{
ZeroMem (Buffer, sizeof (MISC_MM_COMMUNICATE_BUFFER));
Buffer->MessageLength = sizeof (DIRECT_MSG_ARGS);
Buffer->DirectMsgArgs.Arg0 = EventSvcArgs->Arg4;
Buffer->DirectMsgArgs.Arg1 = EventSvcArgs->Arg5;
Buffer->DirectMsgArgs.Arg2 = EventSvcArgs->Arg6;
Buffer->DirectMsgArgs.Arg3 = EventSvcArgs->Arg7;
Buffer->DirectMsgArgs.Arg4 = EventSvcArgs->Arg8;
Buffer->DirectMsgArgs.Arg5 = EventSvcArgs->Arg9;
Buffer->DirectMsgArgs.Arg6 = EventSvcArgs->Arg10;
Buffer->DirectMsgArgs.Arg7 = EventSvcArgs->Arg11;
Buffer->DirectMsgArgs.Arg8 = EventSvcArgs->Arg12;
Buffer->DirectMsgArgs.Arg9 = EventSvcArgs->Arg13;
Buffer->DirectMsgArgs.Arg10 = EventSvcArgs->Arg14;
Buffer->DirectMsgArgs.Arg11 = EventSvcArgs->Arg15;
Buffer->DirectMsgArgs.Arg12 = EventSvcArgs->Arg16;
Buffer->DirectMsgArgs.Arg13 = EventSvcArgs->Arg17;
Buffer->MessageLength = sizeof (DIRECT_MSG_ARGS);
CopyMem (&Buffer->FfaArgs, EventSvcArgs, sizeof (ARM_FFA_ARGS));
CopyGuid (&Buffer->HeaderGuid, ServiceGuid);
}