From 93ee30067582f325c951505c835f5c5b85649148 Mon Sep 17 00:00:00 2001 From: Kun Qin Date: Fri, 24 Jul 2026 00:49:22 -0700 Subject: [PATCH] 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 --- .../Library/ArmStandaloneMmCoreEntryPoint.h | 6 +-- .../ArmStandaloneMmCoreEntryPoint.c | 46 +++++++------------ 2 files changed, 20 insertions(+), 32 deletions(-) diff --git a/ArmPkg/Include/Library/ArmStandaloneMmCoreEntryPoint.h b/ArmPkg/Include/Library/ArmStandaloneMmCoreEntryPoint.h index 2f99fa1b6e..8cad12cafd 100644 --- a/ArmPkg/Include/Library/ArmStandaloneMmCoreEntryPoint.h +++ b/ArmPkg/Include/Library/ArmStandaloneMmCoreEntryPoint.h @@ -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 { diff --git a/ArmPkg/Library/ArmStandaloneMmCoreEntryPoint/ArmStandaloneMmCoreEntryPoint.c b/ArmPkg/Library/ArmStandaloneMmCoreEntryPoint/ArmStandaloneMmCoreEntryPoint.c index 344cfe3904..98c6d87d10 100644 --- a/ArmPkg/Library/ArmStandaloneMmCoreEntryPoint/ArmStandaloneMmCoreEntryPoint.c +++ b/ArmPkg/Library/ArmStandaloneMmCoreEntryPoint/ArmStandaloneMmCoreEntryPoint.c @@ -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); }