<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<div dir="ltr">Yep, all understood and acknowledged. No actionable items - lgtm.
<div><br>
</div>
<div><span>
<blockquote type="cite">
<div dir="auto">
<div>
<div><font size="2"><span>
<div>Reviewed-by: Andrei Warkentin <awarkentin@vmware.com></div>
</span></font></div>
</div>
</div>
</blockquote>
</span></div>
<div><br>
</div>
</div>
<span id="draft-break"></span><br>
<br>
---<br>
Отправлено из <a href="https://whatisworkspaceone.com/boxer">Workspace ONE Boxer</a><span id="draft-break"></span><br>
<br>
<div>
<div class="null" dir="auto">15 декабря 2020 г. в 12:46:24 PM GMT-6 Jeremy Linton <jeremy.linton@arm.com> пишет:<br class="null">
</div>
<blockquote type="cite" style="border-left-style:solid;border-width:1px;margin-left:0px;padding-left:10px;" class="null">
<div class="null" dir="auto">
<div class="null">
<meta name="Generator" content="Microsoft Exchange Server" class="null">
<!-- converted from text -->
<div class="null"><font size="2" class="null"><span style="font-size:11pt;" class="null">
<div class="null">Hi,<br class="null">
<br class="null">
On 12/15/20 12:26 PM, Andrei Warkentin wrote:<br class="null">
> I believe that applies only to the Arasan integration, not MMC2.<br class="null">
> <br class="null">
> I'm trying to recollect why I thought this didn't matter  (or how it was getting mitigated), but i'm drawing a blank. I'm okay doing it.<br class="null">
<br class="null">
Well, I think it "works" without it, although it appears both uboot and <br class="null">
linux have similar workarounds for both controllers. So "works" might be <br class="null">
a case of works for me but not for you. That is a large part of the <br class="null">
problem around using PNP0D40 as the _CID too. It works for both <br class="null">
controllers, despite the lack of careful alignment controls, or this <br class="null">
workaround in linux with the straight sdhci_acpi driver. If I can figure <br class="null">
out how to suppress/quirk the cmd12 warnings the emmc2 it would almost <br class="null">
be worth doing.<br class="null">
<br class="null">
A good part of this set is just based on me banging my head and <br class="null">
inserting trace/prints in the linux and uboot gpio/mailbox and mmc <br class="null">
paths, and then supporting the most obvious differences. So while I <br class="null">
backed a few things out, some of these things remain (like this) because <br class="null">
there is a bit of documentation in those drivers claiming there is a <br class="null">
clock domain crossing bug. What the actual details, or how to reproduce <br class="null">
aren't included.<br class="null">
<br class="null">
> <br class="null">
> Reviewed-by: Andrei Warkentin <awarkentin@vmware.com><br class="null">
> ________________________________<br class="null">
> From: devel@edk2.groups.io <devel@edk2.groups.io> on behalf of Jeremy Linton via groups.io <jeremy.linton=arm.com@groups.io><br class="null">
> Sent: Monday, December 14, 2020 5:23 PM<br class="null">
> To: devel@edk2.groups.io <devel@edk2.groups.io><br class="null">
> Cc: ard.biesheuvel@arm.com <ard.biesheuvel@arm.com>; leif@nuviainc.com <leif@nuviainc.com>; pete@akeo.ie <pete@akeo.ie>; andrey.warkentin@gmail.com <andrey.warkentin@gmail.com>; samer.el-haj-mahmoud@arm.com <samer.el-haj-mahmoud@arm.com>; Jeremy Linton <jeremy.linton@arm.com><br class="null">
> Subject: [edk2-devel] [PATCH 4/7] Platform/RaspberryPi/Arasan: Add write delay and voltage/clock config<br class="null">
> <br class="null">
> The uboot and linux drivers have notes that there is a clock domain crossing<br class="null">
> problem that happens with back to back writes to the sd controllers on the<br class="null">
> rpi. Its not clear if this is still applicable to the rpi4/emmc2 but<br class="null">
> it seems wise to add it.<br class="null">
> <br class="null">
> Futher, we need to assure that the card voltage is set to 3.3V, and<br class="null">
> we should try and follow some of the SDHCI docs when it comes to<br class="null">
> changing the clock.<br class="null">
> <br class="null">
> Signed-off-by: Jeremy Linton <jeremy.linton@arm.com><br class="null">
> ---<br class="null">
>   .../Drivers/ArasanMmcHostDxe/ArasanMmcHostDxe.c    | 112 +++++++++++++++++----<br class="null">
>   .../Drivers/ArasanMmcHostDxe/ArasanMmcHostDxe.h    |   1 +<br class="null">
>   2 files changed, 93 insertions(+), 20 deletions(-)<br class="null">
> <br class="null">
> diff --git a/Platform/RaspberryPi/Drivers/ArasanMmcHostDxe/ArasanMmcHostDxe.c b/Platform/RaspberryPi/Drivers/ArasanMmcHostDxe/ArasanMmcHostDxe.c<br class="null">
> index 0cb7e85b38..a7b538a91a 100644<br class="null">
> --- a/Platform/RaspberryPi/Drivers/ArasanMmcHostDxe/ArasanMmcHostDxe.c<br class="null">
> +++ b/Platform/RaspberryPi/Drivers/ArasanMmcHostDxe/ArasanMmcHostDxe.c<br class="null">
> @@ -18,6 +18,56 @@ UINT32 LastExecutedCommand = (UINT32) -1;<br class="null">
>   STATIC RASPBERRY_PI_FIRMWARE_PROTOCOL *mFwProtocol;<br class="null">
> <br class="null">
>   STATIC UINTN MMCHS_BASE;<br class="null">
> <br class="null">
> <br class="null">
> <br class="null">
> +STATIC<br class="null">
> <br class="null">
> +UINT32<br class="null">
> <br class="null">
> +EFIAPI<br class="null">
> <br class="null">
> +SdMmioWrite32 (<br class="null">
> <br class="null">
> +  IN      UINTN                     Address,<br class="null">
> <br class="null">
> +  IN      UINT32                    Value<br class="null">
> <br class="null">
> +  )<br class="null">
> <br class="null">
> +{<br class="null">
> <br class="null">
> +  UINT32 ret;<br class="null">
> <br class="null">
> +  ret = (UINT32)MmioWrite32 (Address, Value);<br class="null">
> <br class="null">
> +  // There is a bug about clock domain crossing on writes, delay to avoid it<br class="null">
> <br class="null">
> +  gBS->Stall (STALL_AFTER_REG_WRITE_US);<br class="null">
> <br class="null">
> +  return ret;<br class="null">
> <br class="null">
> +}<br class="null">
> <br class="null">
> +<br class="null">
> <br class="null">
> +STATIC<br class="null">
> <br class="null">
> +UINT32<br class="null">
> <br class="null">
> +EFIAPI<br class="null">
> <br class="null">
> +SdMmioOr32 (<br class="null">
> <br class="null">
> +  IN      UINTN                     Address,<br class="null">
> <br class="null">
> +  IN      UINT32                    OrData<br class="null">
> <br class="null">
> +  )<br class="null">
> <br class="null">
> +{<br class="null">
> <br class="null">
> +  return SdMmioWrite32 (Address, MmioRead32 (Address) | OrData);<br class="null">
> <br class="null">
> +}<br class="null">
> <br class="null">
> +<br class="null">
> <br class="null">
> +STATIC<br class="null">
> <br class="null">
> +UINT32<br class="null">
> <br class="null">
> +EFIAPI<br class="null">
> <br class="null">
> +SdMmioAnd32 (<br class="null">
> <br class="null">
> +  IN      UINTN                     Address,<br class="null">
> <br class="null">
> +  IN      UINT32                    AndData<br class="null">
> <br class="null">
> +  )<br class="null">
> <br class="null">
> +{<br class="null">
> <br class="null">
> +  return SdMmioWrite32 (Address, MmioRead32 (Address) & AndData);<br class="null">
> <br class="null">
> +}<br class="null">
> <br class="null">
> +<br class="null">
> <br class="null">
> +STATIC<br class="null">
> <br class="null">
> +UINT32<br class="null">
> <br class="null">
> +EFIAPI<br class="null">
> <br class="null">
> +SdMmioAndThenOr32 (<br class="null">
> <br class="null">
> +  IN      UINTN                     Address,<br class="null">
> <br class="null">
> +  IN      UINT32                    AndData,<br class="null">
> <br class="null">
> +  IN      UINT32                    OrData<br class="null">
> <br class="null">
> +  )<br class="null">
> <br class="null">
> +{<br class="null">
> <br class="null">
> +  return SdMmioWrite32 (Address, (MmioRead32 (Address) & AndData) | OrData);<br class="null">
> <br class="null">
> +}<br class="null">
> <br class="null">
> +<br class="null">
> <br class="null">
> +<br class="null">
> <br class="null">
>   /**<br class="null">
> <br class="null">
>      These SD commands are optional, according to the SD Spec<br class="null">
> <br class="null">
>   **/<br class="null">
> <br class="null">
> @@ -175,7 +225,9 @@ SoftReset (<br class="null">
>     IN UINT32 Mask<br class="null">
> <br class="null">
>     )<br class="null">
> <br class="null">
>   {<br class="null">
> <br class="null">
> -  MmioOr32 (MMCHS_SYSCTL, Mask);<br class="null">
> <br class="null">
> +  DEBUG ((DEBUG_MMCHOST_SD, "SoftReset with mask 0x%x\n", Mask));<br class="null">
> <br class="null">
> +<br class="null">
> <br class="null">
> +  SdMmioOr32 (MMCHS_SYSCTL, Mask);<br class="null">
> <br class="null">
>     if (PollRegisterWithMask (MMCHS_SYSCTL, Mask, 0) == EFI_TIMEOUT) {<br class="null">
> <br class="null">
>       DEBUG ((DEBUG_ERROR, "Failed to SoftReset with mask 0x%x\n", Mask));<br class="null">
> <br class="null">
>       return EFI_TIMEOUT;<br class="null">
> <br class="null">
> @@ -326,29 +378,29 @@ MMCSendCommand (<br class="null">
>     }<br class="null">
> <br class="null">
> <br class="null">
> <br class="null">
>     if (IsAppCmd && MmcCmd == ACMD22) {<br class="null">
> <br class="null">
> -    MmioWrite32 (MMCHS_BLK, 4);<br class="null">
> <br class="null">
> +    SdMmioWrite32 (MMCHS_BLK, 4);<br class="null">
> <br class="null">
>     } else if (IsAppCmd && MmcCmd == ACMD51) {<br class="null">
> <br class="null">
> -    MmioWrite32 (MMCHS_BLK, 8);<br class="null">
> <br class="null">
> +    SdMmioWrite32 (MMCHS_BLK, 8);<br class="null">
> <br class="null">
>     } else if (!IsAppCmd && MmcCmd == CMD6) {<br class="null">
> <br class="null">
> -    MmioWrite32 (MMCHS_BLK, 64);<br class="null">
> <br class="null">
> +    SdMmioWrite32 (MMCHS_BLK, 64);<br class="null">
> <br class="null">
>     } else if (IsADTCCmd) {<br class="null">
> <br class="null">
> -    MmioWrite32 (MMCHS_BLK, BLEN_512BYTES);<br class="null">
> <br class="null">
> +    SdMmioWrite32 (MMCHS_BLK, BLEN_512BYTES);<br class="null">
> <br class="null">
>     }<br class="null">
> <br class="null">
> <br class="null">
> <br class="null">
>     // Set Data timeout counter value to max value.<br class="null">
> <br class="null">
> -  MmioAndThenOr32 (MMCHS_SYSCTL, (UINT32) ~DTO_MASK, DTO_VAL);<br class="null">
> <br class="null">
> +  SdMmioAndThenOr32 (MMCHS_SYSCTL, (UINT32) ~DTO_MASK, DTO_VAL);<br class="null">
> <br class="null">
> <br class="null">
> <br class="null">
>     //<br class="null">
> <br class="null">
>     // Clear Interrupt Status Register, but not the Card Inserted bit<br class="null">
> <br class="null">
>     // to avoid messing with card detection logic.<br class="null">
> <br class="null">
>     //<br class="null">
> <br class="null">
> -  MmioWrite32 (MMCHS_INT_STAT, ALL_EN & ~(CARD_INS));<br class="null">
> <br class="null">
> +  SdMmioWrite32 (MMCHS_INT_STAT, ALL_EN & ~(CARD_INS));<br class="null">
> <br class="null">
> <br class="null">
> <br class="null">
>     // Set command argument register<br class="null">
> <br class="null">
> -  MmioWrite32 (MMCHS_ARG, Argument);<br class="null">
> <br class="null">
> +  SdMmioWrite32 (MMCHS_ARG, Argument);<br class="null">
> <br class="null">
> <br class="null">
> <br class="null">
>     // Send the command<br class="null">
> <br class="null">
> -  MmioWrite32 (MMCHS_CMD, MmcCmd);<br class="null">
> <br class="null">
> +  SdMmioWrite32 (MMCHS_CMD, MmcCmd);<br class="null">
> <br class="null">
> <br class="null">
> <br class="null">
>     // Check for the command status.<br class="null">
> <br class="null">
>     while (RetryCount < MAX_RETRY_COUNT) {<br class="null">
> <br class="null">
> @@ -373,7 +425,7 @@ MMCSendCommand (<br class="null">
> <br class="null">
> <br class="null">
>       // Check if command is completed.<br class="null">
> <br class="null">
>       if ((MmcStatus & CC) == CC) {<br class="null">
> <br class="null">
> -      MmioWrite32 (MMCHS_INT_STAT, CC);<br class="null">
> <br class="null">
> +      SdMmioWrite32 (MMCHS_INT_STAT, CC);<br class="null">
> <br class="null">
>         break;<br class="null">
> <br class="null">
>       }<br class="null">
> <br class="null">
> <br class="null">
> <br class="null">
> @@ -428,6 +480,21 @@ MMCNotifyState (<br class="null">
>           return Status;<br class="null">
> <br class="null">
>         }<br class="null">
> <br class="null">
> <br class="null">
> <br class="null">
> +      DEBUG ((DEBUG_MMCHOST_SD, "ArasanMMCHost: CAP %X CAPH %X\n", MmioRead32(MMCHS_CAPA),MmioRead32(MMCHS_CUR_CAPA)));<br class="null">
> <br class="null">
> +<br class="null">
> <br class="null">
> +      // Lets switch to card detect test mode.<br class="null">
> <br class="null">
> +      SdMmioOr32 (MMCHS_HCTL, BIT7|BIT6);<br class="null">
> <br class="null">
> +<br class="null">
> <br class="null">
> +      // set card voltage<br class="null">
> <br class="null">
> +      SdMmioAnd32 (MMCHS_HCTL, ~SDBP_ON);<br class="null">
> <br class="null">
> +      SdMmioAndThenOr32 (MMCHS_HCTL, (UINT32) ~SDBP_MASK, SDVS_3_3_V);<br class="null">
> <br class="null">
> +      SdMmioOr32 (MMCHS_HCTL, SDBP_ON);<br class="null">
> <br class="null">
> +<br class="null">
> <br class="null">
> +      DEBUG ((DEBUG_MMCHOST_SD, "ArasanMMCHost: AC12 %X HCTL %X\n", MmioRead32(MMCHS_AC12),MmioRead32(MMCHS_HCTL)));<br class="null">
> <br class="null">
> +<br class="null">
> <br class="null">
> +      // First turn off the clock<br class="null">
> <br class="null">
> +      SdMmioAnd32 (MMCHS_SYSCTL, ~CEN);<br class="null">
> <br class="null">
> +<br class="null">
> <br class="null">
>         // Attempt to set the clock to 400Khz which is the expected initialization speed<br class="null">
> <br class="null">
>         Status = CalculateClockFrequencyDivisor (400000, &Divisor, NULL);<br class="null">
> <br class="null">
>         if (EFI_ERROR (Status)) {<br class="null">
> <br class="null">
> @@ -436,10 +503,15 @@ MMCNotifyState (<br class="null">
>         }<br class="null">
> <br class="null">
> <br class="null">
> <br class="null">
>         // Set Data Timeout Counter value, set clock frequency, enable internal clock<br class="null">
> <br class="null">
> -      MmioOr32 (MMCHS_SYSCTL, DTO_VAL | Divisor | CEN | ICS | ICE);<br class="null">
> <br class="null">
> +      SdMmioOr32 (MMCHS_SYSCTL, DTO_VAL | Divisor | CEN | ICS | ICE);<br class="null">
> <br class="null">
> +      SdMmioOr32 (MMCHS_HCTL, SDBP_ON);<br class="null">
> <br class="null">
> +      // wait for ICS<br class="null">
> <br class="null">
> +      while ((MmioRead32 (MMCHS_SYSCTL) & ICS_MASK) != ICS);<br class="null">
> <br class="null">
> +<br class="null">
> <br class="null">
> +      DEBUG ((DEBUG_MMCHOST_SD, "ArasanMMCHost: AC12 %X HCTL %X\n", MmioRead32(MMCHS_AC12),MmioRead32(MMCHS_HCTL)));<br class="null">
> <br class="null">
> <br class="null">
> <br class="null">
>         // Enable interrupts<br class="null">
> <br class="null">
> -      MmioWrite32 (MMCHS_IE, ALL_EN);<br class="null">
> <br class="null">
> +      SdMmioWrite32 (MMCHS_IE, ALL_EN);<br class="null">
> <br class="null">
>       }<br class="null">
> <br class="null">
>       break;<br class="null">
> <br class="null">
>     case MmcIdleState:<br class="null">
> <br class="null">
> @@ -452,7 +524,7 @@ MMCNotifyState (<br class="null">
>       ClockFrequency = 25000000;<br class="null">
> <br class="null">
> <br class="null">
> <br class="null">
>       // First turn off the clock<br class="null">
> <br class="null">
> -    MmioAnd32 (MMCHS_SYSCTL, ~CEN);<br class="null">
> <br class="null">
> +    SdMmioAnd32 (MMCHS_SYSCTL, ~CEN);<br class="null">
> <br class="null">
> <br class="null">
> <br class="null">
>       Status = CalculateClockFrequencyDivisor (ClockFrequency, &Divisor, NULL);<br class="null">
> <br class="null">
>       if (EFI_ERROR (Status)) {<br class="null">
> <br class="null">
> @@ -462,13 +534,13 @@ MMCNotifyState (<br class="null">
>       }<br class="null">
> <br class="null">
> <br class="null">
> <br class="null">
>       // Setup new divisor<br class="null">
> <br class="null">
> -    MmioAndThenOr32 (MMCHS_SYSCTL, (UINT32) ~CLKD_MASK, Divisor);<br class="null">
> <br class="null">
> +    SdMmioAndThenOr32 (MMCHS_SYSCTL, (UINT32) ~CLKD_MASK, Divisor);<br class="null">
> <br class="null">
> <br class="null">
> <br class="null">
>       // Wait for the clock to stabilise<br class="null">
> <br class="null">
>       while ((MmioRead32 (MMCHS_SYSCTL) & ICS_MASK) != ICS);<br class="null">
> <br class="null">
> <br class="null">
> <br class="null">
>       // Set Data Timeout Counter value, set clock frequency, enable internal clock<br class="null">
> <br class="null">
> -    MmioOr32 (MMCHS_SYSCTL, CEN);<br class="null">
> <br class="null">
> +    SdMmioOr32 (MMCHS_SYSCTL, CEN);<br class="null">
> <br class="null">
>       break;<br class="null">
> <br class="null">
>     case MmcTransferState:<br class="null">
> <br class="null">
>       break;<br class="null">
> <br class="null">
> @@ -635,7 +707,7 @@ MMCReadBlockData (<br class="null">
>       while (RetryCount < MAX_RETRY_COUNT) {<br class="null">
> <br class="null">
>         MmcStatus = MmioRead32 (MMCHS_INT_STAT);<br class="null">
> <br class="null">
>         if ((MmcStatus & BRR) != 0) {<br class="null">
> <br class="null">
> -        MmioWrite32 (MMCHS_INT_STAT, BRR);<br class="null">
> <br class="null">
> +        SdMmioWrite32 (MMCHS_INT_STAT, BRR);<br class="null">
> <br class="null">
>           /*<br class="null">
> <br class="null">
>            * Data is ready.<br class="null">
> <br class="null">
>            */<br class="null">
> <br class="null">
> @@ -662,7 +734,7 @@ MMCReadBlockData (<br class="null">
>       gBS->Stall (STALL_AFTER_READ_US);<br class="null">
> <br class="null">
>     }<br class="null">
> <br class="null">
> <br class="null">
> <br class="null">
> -  MmioWrite32 (MMCHS_INT_STAT, BRR);<br class="null">
> <br class="null">
> +  SdMmioWrite32 (MMCHS_INT_STAT, BRR);<br class="null">
> <br class="null">
>     return EFI_SUCCESS;<br class="null">
> <br class="null">
>   }<br class="null">
> <br class="null">
> <br class="null">
> <br class="null">
> @@ -699,13 +771,13 @@ MMCWriteBlockData (<br class="null">
>       while (RetryCount < MAX_RETRY_COUNT) {<br class="null">
> <br class="null">
>         MmcStatus = MmioRead32 (MMCHS_INT_STAT);<br class="null">
> <br class="null">
>         if ((MmcStatus & BWR) != 0) {<br class="null">
> <br class="null">
> -        MmioWrite32 (MMCHS_INT_STAT, BWR);<br class="null">
> <br class="null">
> +        SdMmioWrite32 (MMCHS_INT_STAT, BWR);<br class="null">
> <br class="null">
>           /*<br class="null">
> <br class="null">
>            * Can write data.<br class="null">
> <br class="null">
>            */<br class="null">
> <br class="null">
>           mFwProtocol->SetLed (TRUE);<br class="null">
> <br class="null">
>           for (Count = 0; Count < BlockLen; Count += 4, Buffer++) {<br class="null">
> <br class="null">
> -          MmioWrite32 (MMCHS_DATA, *Buffer);<br class="null">
> <br class="null">
> +          SdMmioWrite32 (MMCHS_DATA, *Buffer);<br class="null">
> <br class="null">
>           }<br class="null">
> <br class="null">
> <br class="null">
> <br class="null">
>           mFwProtocol->SetLed (FALSE);<br class="null">
> <br class="null">
> @@ -726,7 +798,7 @@ MMCWriteBlockData (<br class="null">
>       gBS->Stall (STALL_AFTER_WRITE_US);<br class="null">
> <br class="null">
>     }<br class="null">
> <br class="null">
> <br class="null">
> <br class="null">
> -  MmioWrite32 (MMCHS_INT_STAT, BWR);<br class="null">
> <br class="null">
> +  SdMmioWrite32 (MMCHS_INT_STAT, BWR);<br class="null">
> <br class="null">
>     return EFI_SUCCESS;<br class="null">
> <br class="null">
>   }<br class="null">
> <br class="null">
> <br class="null">
> <br class="null">
> diff --git a/Platform/RaspberryPi/Drivers/ArasanMmcHostDxe/ArasanMmcHostDxe.h b/Platform/RaspberryPi/Drivers/ArasanMmcHostDxe/ArasanMmcHostDxe.h<br class="null">
> index 6cd600f738..e94606cc5b 100644<br class="null">
> --- a/Platform/RaspberryPi/Drivers/ArasanMmcHostDxe/ArasanMmcHostDxe.h<br class="null">
> +++ b/Platform/RaspberryPi/Drivers/ArasanMmcHostDxe/ArasanMmcHostDxe.h<br class="null">
> @@ -37,6 +37,7 @@<br class="null">
>   #define STALL_AFTER_REC_RESP_US (50)<br class="null">
> <br class="null">
>   #define STALL_AFTER_WRITE_US (200)<br class="null">
> <br class="null">
>   #define STALL_AFTER_READ_US (20)<br class="null">
> <br class="null">
> +#define STALL_AFTER_REG_WRITE_US (10)<br class="null">
> <br class="null">
>   #define STALL_AFTER_RETRY_US (20)<br class="null">
> <br class="null">
> <br class="null">
> <br class="null">
>   #define MAX_DIVISOR_VALUE 1023<br class="null">
> <br class="null">
> --<br class="null">
> 2.13.7<br class="null">
> <br class="null">
> <br class="null">
> <br class="null">
> -=-=-=-=-=-=<br class="null">
> Groups.io Links: You receive all messages sent to this group.<br class="null">
> View/Reply Online (#68816): <a href="https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fedk2.groups.io%2Fg%2Fdevel%2Fmessage%2F68816&amp;data=04%7C01%7Cawarkentin%40vmware.com%7Cc2bc5f44461c484196e008d8a129b6e2%7Cb39138ca3cee4b4aa4d6cd83d9dd62f0%7C0%7C0%7C637436547836525703%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=tUEGHmsaEG%2B0dy6qn0GgCAK97aZTtnKXntkcSft%2BH14%3D&amp;reserved=0" target="_BLANK" class="null">
https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fedk2.groups.io%2Fg%2Fdevel%2Fmessage%2F68816&amp;data=04%7C01%7Cawarkentin%40vmware.com%7Cc2bc5f44461c484196e008d8a129b6e2%7Cb39138ca3cee4b4aa4d6cd83d9dd62f0%7C0%7C0%7C637436547836525703%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=tUEGHmsaEG%2B0dy6qn0GgCAK97aZTtnKXntkcSft%2BH14%3D&amp;reserved=0</a><br class="null">
> Mute This Topic: <a href="https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgroups.io%2Fmt%2F78964893%2F4387333&amp;data=04%7C01%7Cawarkentin%40vmware.com%7Cc2bc5f44461c484196e008d8a129b6e2%7Cb39138ca3cee4b4aa4d6cd83d9dd62f0%7C0%7C0%7C637436547836525703%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=8vOe%2BmdxokTuXKlAqSNuZWXFWDgGLA%2FFD24Ao1J6Qws%3D&amp;reserved=0" target="_BLANK" class="null">
https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgroups.io%2Fmt%2F78964893%2F4387333&amp;data=04%7C01%7Cawarkentin%40vmware.com%7Cc2bc5f44461c484196e008d8a129b6e2%7Cb39138ca3cee4b4aa4d6cd83d9dd62f0%7C0%7C0%7C637436547836525703%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=8vOe%2BmdxokTuXKlAqSNuZWXFWDgGLA%2FFD24Ao1J6Qws%3D&amp;reserved=0</a><br class="null">
> Group Owner: devel+owner@edk2.groups.io<br class="null">
> Unsubscribe: <a href="https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fedk2.groups.io%2Fg%2Fdevel%2Funsub&amp;data=04%7C01%7Cawarkentin%40vmware.com%7Cc2bc5f44461c484196e008d8a129b6e2%7Cb39138ca3cee4b4aa4d6cd83d9dd62f0%7C0%7C0%7C637436547836525703%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=zBnexfVSW9erLRPOWZCJIT%2FqLnF%2Bw95A4snliXN8HHg%3D&amp;reserved=0" target="_BLANK" class="null">
https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fedk2.groups.io%2Fg%2Fdevel%2Funsub&amp;data=04%7C01%7Cawarkentin%40vmware.com%7Cc2bc5f44461c484196e008d8a129b6e2%7Cb39138ca3cee4b4aa4d6cd83d9dd62f0%7C0%7C0%7C637436547836525703%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=zBnexfVSW9erLRPOWZCJIT%2FqLnF%2Bw95A4snliXN8HHg%3D&amp;reserved=0</a>
 [awarkentin@vmware.com]<br class="null">
> -=-=-=-=-=-=<br class="null">
> <br class="null">
> <br class="null">
> <br class="null">
<br class="null">
</div>
</span></font></div>
</div>
</div>
</blockquote>
</div>
</body>
</html>


 <div width="1" style="color:white;clear:both">_._,_._,_</div> <hr> Groups.io Links:<p>   You receive all messages sent to this group.    <p> <a target="_blank" href="https://edk2.groups.io/g/devel/message/68881">View/Reply Online (#68881)</a> |    |  <a target="_blank" href="https://groups.io/mt/78964893/1813853">Mute This Topic</a>  | <a href="https://edk2.groups.io/g/devel/post">New Topic</a><br>    <a href="https://edk2.groups.io/g/devel/editsub/1813853">Your Subscription</a> | <a href="mailto:devel+owner@edk2.groups.io">Contact Group Owner</a> |  <a href="https://edk2.groups.io/g/devel/unsub">Unsubscribe</a>  [edk2-devel-archive@redhat.com]<br> <div width="1" style="color:white;clear:both">_._,_._,_</div>