From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail03.groups.io (mail03.groups.io [45.79.227.220]) by spool.mail.gandi.net (Postfix) with ESMTPS id 7F399D811B2 for ; Fri, 12 Apr 2024 15:14:02 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=gDkyFIUZebGCZ2s9FlLFRWVMUf2EEs21v4E86OFgN5U=; c=relaxed/simple; d=groups.io; h=Received-SPF:Received-SPF:From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:MIME-Version:NoDisclaimer:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Resent-Date:Resent-From:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Type; s=20240206; t=1712934841; v=1; b=ug25phRLPbRqTokQiZ5xtXVl8/l84HA3l3JSDmNXBySbVmj4Gx3b5Fo+XUzI2+qI236TvOmV fAhitB+JDG6jpEz9nSK4KInKYVKy/KhOK8d9FqmwPT2T2Te5H7l5gIB0ygUXGIc2KjtaDN++GNm HDoJehbfx8tU5uHA1HyaSIKOj7Ya7/S8wVz3VE8ElziUJIFHBXORZjtOxks/rvmVd++TIeONA48 HZqV9ToenZHMWxFa3hFTjwopzEwWXDLpNlIcyV8cKUHDiTwEG1mvRk5L0v+6+7cTazJxbwl627P RLwBDFmQDwBY5810aREJux/HDzUoQzCwcD8FoN5XLTTYA== X-Received: by 127.0.0.2 with SMTP id mT9JYY7687511xfeij2T6kFa; Fri, 12 Apr 2024 08:14:01 -0700 X-Received: from EUR05-VI1-obe.outbound.protection.outlook.com (EUR05-VI1-obe.outbound.protection.outlook.com [40.107.21.48]) by mx.groups.io with SMTP id smtpd.web10.49600.1712934839975277214 for ; Fri, 12 Apr 2024 08:14:00 -0700 X-Received: from AM0PR01CA0101.eurprd01.prod.exchangelabs.com (2603:10a6:208:10e::42) by AM8PR08MB6420.eurprd08.prod.outlook.com (2603:10a6:20b:314::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.46; Fri, 12 Apr 2024 15:13:56 +0000 X-Received: from AM4PEPF00027A5E.eurprd04.prod.outlook.com (2603:10a6:208:10e:cafe::7e) by AM0PR01CA0101.outlook.office365.com (2603:10a6:208:10e::42) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.26 via Frontend Transport; Fri, 12 Apr 2024 15:13:56 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C X-Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by AM4PEPF00027A5E.mail.protection.outlook.com (10.167.16.72) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.7452.22 via Frontend Transport; Fri, 12 Apr 2024 15:13:56 +0000 X-Received: ("Tessian outbound 9fd7e4b543e6:v313"); Fri, 12 Apr 2024 15:13:56 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 32305c6e616d2865 X-CR-MTA-TID: 64aa7808 X-Received: from db009172d754.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 194D0A57-12A7-48DB-B4A0-E0A7F1B9C897.1; Fri, 12 Apr 2024 15:13:49 +0000 X-Received: from EUR03-AM7-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id db009172d754.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Fri, 12 Apr 2024 15:13:49 +0000 X-Received: from AM6PR0202CA0047.eurprd02.prod.outlook.com (2603:10a6:20b:3a::24) by AS1PR08MB7634.eurprd08.prod.outlook.com (2603:10a6:20b:476::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.55; Fri, 12 Apr 2024 15:13:45 +0000 X-Received: from AMS0EPF00000192.eurprd05.prod.outlook.com (2603:10a6:20b:3a:cafe::3c) by AM6PR0202CA0047.outlook.office365.com (2603:10a6:20b:3a::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.26 via Frontend Transport; Fri, 12 Apr 2024 15:13:45 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234) smtp.mailfrom=arm.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 40.67.248.234 as permitted sender) receiver=protection.outlook.com; client-ip=40.67.248.234; helo=nebula.arm.com; pr=C X-Received: from nebula.arm.com (40.67.248.234) by AMS0EPF00000192.mail.protection.outlook.com (10.167.16.218) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.7452.22 via Frontend Transport; Fri, 12 Apr 2024 15:13:45 +0000 X-Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX04.Arm.com (10.251.24.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Fri, 12 Apr 2024 15:13:44 +0000 X-Received: from E114225.Arm.com (10.1.196.56) by mail.arm.com (10.251.24.32) with Microsoft SMTP Server id 15.1.2507.35 via Frontend Transport; Fri, 12 Apr 2024 15:13:43 +0000 From: "Sami Mujawar" To: CC: Sami Mujawar , , , , , , , Subject: [edk2-devel] [PATCH v2 43/45] ArmVirtPkg: RMM 1.0-eac5 - Update RSI Version support Date: Fri, 12 Apr 2024 16:13:39 +0100 Message-ID: <20240412151341.16488-4-sami.mujawar@arm.com> In-Reply-To: <20240412151341.16488-1-sami.mujawar@arm.com> References: <20240412151341.16488-1-sami.mujawar@arm.com> MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AMS0EPF00000192:EE_|AS1PR08MB7634:EE_|AM4PEPF00027A5E:EE_|AM8PR08MB6420:EE_ X-MS-Office365-Filtering-Correlation-Id: 4d91d1cf-6c7f-46aa-99d6-08dc5b032c6a x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: W7kT1vUoV1iNCX86VHV/2KLL4dMyIK00cJzUZwjtok/KawXWLybBCjqO8tSx1ytMvo5q8x8o5Am7yLA6dsk89xovKXzhQmvoNhA34pgLgUuzYSHdPEhTtynMnJQ2krvbCSBVpixqccfABI1vElxj0Ywopc3B80xYrl0J7WgD/4G7b6bwGEtBBdpM6BrRwQbe52BsBTfs8zGhZom+7qfYk7yZtW3AdOQCVkMAjJQV+9HCtrs5lP18/SgoUB4KBW0pC1Q8tO7kflQBligG3AdpoELIn5Y7PN3XjNo9v/W8TiFa/Agz0R5OIp/JQIiSe4Bne0+PQYMn4WyeeEjqauvHMh8hSJgk21QPK4fW+gW8fpLU/N54B0G+lPGfcyKt7vteiJcBDju13hhvDY+R++/mv5H/PgwDnDwxeUBCPxoW0ubtoXnOO54W7XqFkU4N9GvM4wCZAQJomBsUlopiD475n4yvSNvuDC001xHMkkph3Vjfl4SY6xMdLSfUN1M0BpCKvbH1F3VcYFNyOwWRIM4P68n2zsw11Hk/qOXkSKLVCA71MpkcbUDgOxNQYAf3OMLNmienGAl4KizZ/KAznwRznLhtU/PiWl6Nas2W51/LSuKc3hUVgTvJpL/Pb9ygoCycBE+s2L3WDu29YvZaceSXiuasK8jK8XUwAOYHod/SjzD4iHV1ruilmsBUxvTrsUKw6DEj/1rxtGQ1NLHLpPIT/4f5GzN+NfUtAIN29N9dulsFCoFskm8EIfErcCFs8ugw X-Forefront-Antispam-Report-Untrusted: CIP:40.67.248.234;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:nebula.arm.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230031)(82310400014)(1800799015)(36860700004)(376005);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS1PR08MB7634 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM4PEPF00027A5E.eurprd04.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 21ba7d05-bb8e-4d6c-f4a8-08dc5b0325db X-Microsoft-Antispam-Message-Info: WPE5H7zcxRstMPkEG8dnkgfZKDK69Pu296yWYd5Au8AyOgZenBfm70wyH0RBwNgcvyB20YqUY4r75oH0ViE0OUJJObBv4T5C/EmY9kxvEi433YV6kJ1oxbfIwwpEBtKYhrU4Ozzp476R2unCfNkC6ZldGRRtuM5JZxQoPb1B+Paom0651YvNhdtJc41WRNZLBna6cbLCIDvTgF+5LAQOy+05PteViuDIS+tQOdTDYWIn0tbOFYTAVaF9823oOJus2gw8f6ovnxihtsSiJBz0Xh7WUZqPVPYAE6xoY/g96LYXrw/uaeFFaExfPVCzYgQ34x/NVWzuIKUrV3XqAhAimIUhVXyvREleTYiyz/oRiHWarOxma33yiiB0p4ithgpYRMNJm0h3jK22n0HPzC0WXtr3iFI4lehlLAHB42ze3Wy3nalQxTl6yH8tZBCpxqDrwBe+Gbk5bU505oOj9TDzW+cDGcmYpc1EhK4yteNv7Oedkj/meMb+8tzHv4FyO0aM0JG/KtohysE54bCQc8S2hNkNCsnvctjs8DZIwcg89SsGS2WYf74bQ60je/VmiwOFRA/tlvCw/Y0oyy7NwjHuzYf/7zRqeiTd4Nk+vaAQoZ1rVYVItBaS/RBk55miUN3i8O74I9nOuHhSpyD2uxNA8SP0735JsZCjfz8NHCb/xKYSbWlXHQiG7u3iSz6M85Xm5fG5zxgcG4eAVOyj0N9ZOwnLcYs/wU+ROdccjjVWmP26Xm/YHHdfox53pmSc0R2j X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Apr 2024 15:13:56.7355 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4d91d1cf-6c7f-46aa-99d6-08dc5b032c6a X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: AM4PEPF00027A5E.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR08MB6420 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Resent-Date: Fri, 12 Apr 2024 08:14:00 -0700 Resent-From: sami.mujawar@arm.com Reply-To: devel@edk2.groups.io,sami.mujawar@arm.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: W1WJRXqYPms7qJTjuNCqDyVox7686176AA= Content-Type: text/plain X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20240206 header.b=ug25phRL; spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 45.79.227.220 as permitted sender) smtp.mailfrom=bounce@groups.io; dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=arm.com (policy=none) The RMM 1.0-eac5 specification updates the RSI version command to return the highest interface revision which is supported by the RMM and the lower revision value which indicates: a. The RMM supports an interface revision which is compatible with the requested revision and the lower revision is equal to the requested revision and the status code is RSI_SUCCESS b. The RMM does not support the requested version, but the RMM supports an interface revision which is lower than the requested revision and the status code is RSI_ERROR_INPUT c. The RMM does not support an interface revision which is compatible with the requested revision and that it supports an interface revision that is greater than the requested revision. The status code is RSI_ERROR_INPUT and the lower revision is equal to the higher revision. Therefore, update the RsiGetVersion() to return the lower and higher revision that is supported by the RMM. The RsiGetVersion function also returns the RSI version that is implemented by the firmware. Cc: Ard Biesheuvel Cc: Leif Lindholm Cc: Gerd Hoffmann Signed-off-by: Sami Mujawar --- ArmVirtPkg/Include/Library/ArmCcaRsiLib.h | 20 ++++-- ArmVirtPkg/Library/ArmCcaLib/ArmCcaLib.c | 11 +++- ArmVirtPkg/Library/ArmCcaRsiLib/ArmCcaRsi.h | 12 +++- ArmVirtPkg/Library/ArmCcaRsiLib/ArmCcaRsiLib.c | 65 ++++++++++++++++---- 4 files changed, 85 insertions(+), 23 deletions(-) diff --git a/ArmVirtPkg/Include/Library/ArmCcaRsiLib.h b/ArmVirtPkg/Include/Library/ArmCcaRsiLib.h index b768f3498314a2ea61762af65bf2668d463909a6..fd86191f90f64329aadbb847d31cd46d2549b032 100644 --- a/ArmVirtPkg/Include/Library/ArmCcaRsiLib.h +++ b/ArmVirtPkg/Include/Library/ArmCcaRsiLib.h @@ -330,17 +330,25 @@ RsiHostCall ( /** Get the version of the RSI implementation. - @param [out] Major The major version of the RSI implementation. - @param [out] Minor The minor version of the RSI implementation. + @param [out] UefiImpl The version of the RSI specification + implemented by the UEFI firmware. + @param [out] RmmImplLow The low version of the RSI specification + implemented by the RMM. + @param [out] RmmImplHigh The high version of the RSI specification + implemented by the RMM. - @retval RETURN_SUCCESS Success. - @retval RETURN_INVALID_PARAMETER A parameter is invalid. + @retval RETURN_SUCCESS Success. + @retval RETURN_UNSUPPORTED The execution context is not a Realm. + @retval RETURN_INCOMPATIBLE_VERSION The Firmware and RMM specification + revisions are not compatible. + @retval RETURN_INVALID_PARAMETER A parameter is invalid. **/ RETURN_STATUS EFIAPI RsiGetVersion ( - OUT UINT16 *CONST Major, - OUT UINT16 *CONST Minor + OUT UINT32 *CONST UefiImpl, + OUT UINT32 *CONST RmmImplLow, + OUT UINT32 *CONST RmmImplHigh ); /** diff --git a/ArmVirtPkg/Library/ArmCcaLib/ArmCcaLib.c b/ArmVirtPkg/Library/ArmCcaLib/ArmCcaLib.c index 57b05f308377cf931c5f43fc7793c260dfdc36fb..3abb4dfaf567c635b28ff3a7cd5adea064e02510 100644 --- a/ArmVirtPkg/Library/ArmCcaLib/ArmCcaLib.c +++ b/ArmVirtPkg/Library/ArmCcaLib/ArmCcaLib.c @@ -36,11 +36,16 @@ IsRealm ( ) { RETURN_STATUS Status; - UINT16 Major; - UINT16 Minor; + UINT32 UefiImpl; + UINT32 RmmImplLow; + UINT32 RmmImplHigh; if (ArmHasRme ()) { - Status = RsiGetVersion (&Major, &Minor); + Status = RsiGetVersion ( + &UefiImpl, + &RmmImplLow, + &RmmImplHigh + ); if (!RETURN_ERROR (Status)) { return TRUE; } diff --git a/ArmVirtPkg/Library/ArmCcaRsiLib/ArmCcaRsi.h b/ArmVirtPkg/Library/ArmCcaRsiLib/ArmCcaRsi.h index cd2c9ac05c02413caeed26fd764320dd751ea05b..ce3cb0c36ffa6ddf3a16f9f47199123dc6150c51 100644 --- a/ArmVirtPkg/Library/ArmCcaRsiLib/ArmCcaRsi.h +++ b/ArmVirtPkg/Library/ArmCcaRsiLib/ArmCcaRsi.h @@ -10,7 +10,7 @@ - RIPAS - Realm IPA state @par Reference(s): - - Realm Management Monitor (RMM) Specification, version 1.0-eac4 + - Realm Management Monitor (RMM) Specification, version 1.0-eac5 (https://developer.arm.com/documentation/den0137/) **/ @@ -45,5 +45,15 @@ #define RSI_VER_MINOR_MASK 0x0000FFFFULL #define RSI_VER_MAJOR_MASK 0x7FFF0000ULL #define RSI_VER_MAJOR_SHIFT 16 +#define RSI_VERSION_MASK (RSI_VER_MAJOR_MASK | RSI_VER_MINOR_MASK) + +#define RMM_VERSION(Major, Minor) ((Minor & RSI_VER_MINOR_MASK) | \ + ((Major << RSI_VER_MAJOR_SHIFT) & RSI_VER_MAJOR_MASK)) + +#define GET_MAJOR_REVISION(Rev) \ + ((Rev & RSI_VER_MAJOR_MASK) >> RSI_VER_MAJOR_SHIFT) + +#define GET_MINOR_REVISION(Rev) \ + ((Rev & RSI_VER_MINOR_MASK)) #endif // ARM_CCA_RSI_H_ diff --git a/ArmVirtPkg/Library/ArmCcaRsiLib/ArmCcaRsiLib.c b/ArmVirtPkg/Library/ArmCcaRsiLib/ArmCcaRsiLib.c index b861b2e79d5d659a0eb16206d329a0cb039eda0d..dba93013eba0344a717f2e4d082af2be084e469a 100644 --- a/ArmVirtPkg/Library/ArmCcaRsiLib/ArmCcaRsiLib.c +++ b/ArmVirtPkg/Library/ArmCcaRsiLib/ArmCcaRsiLib.c @@ -25,6 +25,10 @@ #include #include "ArmCcaRsi.h" +/** The version of RSI specification implemented by this module. +*/ +STATIC CONST UINT32 mRsiImplVersion = RMM_VERSION (1, 0); + /** Convert the RSI status code to EFI Status code. @@ -639,32 +643,67 @@ RsiHostCall ( /** Get the version of the RSI implementation. - @param [out] Major The major version of the RSI implementation. - @param [out] Minor The minor version of the RSI implementation. + @param [out] UefiImpl The version of the RSI specification + implemented by the UEFI firmware. + @param [out] RmmImplLow The low version of the RSI specification + implemented by the RMM. + @param [out] RmmImplHigh The high version of the RSI specification + implemented by the RMM. - @retval RETURN_SUCCESS Success. - @retval RETURN_INVALID_PARAMETER A parameter is invalid. + @retval RETURN_SUCCESS Success. + @retval RETURN_UNSUPPORTED The execution context is not a Realm. + @retval RETURN_INCOMPATIBLE_VERSION The Firmware and RMM specification + revisions are not compatible. + @retval RETURN_INVALID_PARAMETER A parameter is invalid. **/ RETURN_STATUS EFIAPI RsiGetVersion ( - OUT UINT16 *CONST Major, - OUT UINT16 *CONST Minor + OUT UINT32 *CONST UefiImpl, + OUT UINT32 *CONST RmmImplLow, + OUT UINT32 *CONST RmmImplHigh ) { - ARM_SMC_ARGS SmcCmd; + RETURN_STATUS Status; + ARM_SMC_ARGS SmcCmd; - if ((Major == NULL) || (Minor == NULL)) { - return EFI_INVALID_PARAMETER; + if ((UefiImpl == NULL) || (RmmImplLow == NULL) || (RmmImplHigh == NULL)) { + return RETURN_INVALID_PARAMETER; } ZeroMem (&SmcCmd, sizeof (SmcCmd)); SmcCmd.Arg0 = FID_RSI_VERSION; - + SmcCmd.Arg1 = mRsiImplVersion; ArmCallSmc (&SmcCmd); - *Minor = SmcCmd.Arg0 & RSI_VER_MINOR_MASK; - *Major = (SmcCmd.Arg0 & RSI_VER_MAJOR_MASK) >> RSI_VER_MAJOR_SHIFT; - return RETURN_SUCCESS; + if (SmcCmd.Arg0 == MAX_UINT64) { + // This FID is not implemented, which means + // we are not running in a Realm, therefore + // return the error code as unsupported. + return RETURN_UNSUPPORTED; + } + + *RmmImplLow = (SmcCmd.Arg1 & RSI_VERSION_MASK); + *RmmImplHigh = (SmcCmd.Arg2 & RSI_VERSION_MASK); + *UefiImpl = mRsiImplVersion; + + // The RSI_VERSION command does not have any failure + // conditions see section B5.3.10.2 Failure conditions + // Therefore the only defined return values are + // RSI_SUCCESS and RSI_ERROR_INPUT. + Status = RsiCmdStatusToEfiStatus (SmcCmd.Arg0); + if (Status == RETURN_INVALID_PARAMETER) { + // RSI_VERSION returns RSI_ERROR_INPUT when + // the RMM does not support an interface revision + // which is compatible with the requested revision. + // Since RSI_ERROR_INPUT is mapped to RETURN_INVALID_PARAMETER + // by RsiCmdStatusToEfiStatus(), return the status code as + // RETURN_INCOMPATIBLE_VERSION. + return RETURN_INCOMPATIBLE_VERSION; + } + + // Add an assert in case RMM returns a different error code than expected. + ASSERT (Status == RETURN_SUCCESS); + return Status; } /** -- 'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)' -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#117711): https://edk2.groups.io/g/devel/message/117711 Mute This Topic: https://groups.io/mt/105484262/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=-