<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Consolas, Courier, monospace; font-size: 12pt; color: rgb(0, 0, 0);">
<span style="background-color:rgb(255, 255, 255);display:inline !important">Reviewed-by: Andrei Warkentin <awarkentin@vmware.com></span><br>
</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Pete Batard <pete@akeo.ie><br>
<b>Sent:</b> Monday, February 8, 2021 11:08 AM<br>
<b>To:</b> Jeremy Linton <jeremy.linton@arm.com>; devel@edk2.groups.io <devel@edk2.groups.io><br>
<b>Cc:</b> Andrei Warkentin <awarkentin@vmware.com>; samer.el-haj-mahmoud@arm.com <samer.el-haj-mahmoud@arm.com>; leif@nuviainc.com <leif@nuviainc.com>; ardb+tianocore@kernel.org <ardb+tianocore@kernel.org><br>
<b>Subject:</b> Re: [PATCH v2 3/4] Platform/RaspberryPi: User control of eMMC2 DMA</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">On 2021.02.01 22:53, Jeremy Linton wrote:<br>
> DMA translation on the eMMC2 vary based on SOC, and<br>
> this is made worse by the poor _DMA support in linux.<br>
> <br>
> For now the "safe" option is to simply run the eMMC2<br>
> controller in PIO mode. More advanced users or !linux<br>
> operating systems may choose to enable this to gain<br>
> a perf boost.<br>
> <br>
> Signed-off-by: Jeremy Linton <jeremy.linton@arm.com><br>
> ---<br>
>   Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.c      | 16 +++++++++++++++-<br>
>   Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.inf    |  1 +<br>
>   Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxeHii.uni |  5 +++++<br>
>   Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxeHii.vfr | 17 +++++++++++++++++<br>
>   Platform/RaspberryPi/Include/ConfigVars.h               |  8 ++++++++<br>
>   Platform/RaspberryPi/RPi3/RPi3.dsc                      |  1 +<br>
>   Platform/RaspberryPi/RPi4/RPi4.dsc                      |  1 +<br>
>   Platform/RaspberryPi/RaspberryPi.dec                    |  1 +<br>
>   8 files changed, 49 insertions(+), 1 deletion(-)<br>
> <br>
> diff --git a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.c b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.c<br>
> index 7f26f7b4be..1b8b360ddc 100644<br>
> --- a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.c<br>
> +++ b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.c<br>
> @@ -346,6 +346,15 @@ SetupVariables (<br>
>     }<br>
> <br>
>   <br>
> <br>
>     Size = sizeof (UINT32);<br>
> <br>
> +  Status = gRT->GetVariable (L"MmcEnableDma",<br>
> <br>
> +                  &gConfigDxeFormSetGuid,<br>
> <br>
> +                  NULL, &Size, &Var32);<br>
> <br>
> +  if (EFI_ERROR (Status)) {<br>
> <br>
> +    Status = PcdSet32S (PcdMmcEnableDma, PcdGet32 (PcdMmcEnableDma));<br>
> <br>
> +    ASSERT_EFI_ERROR (Status);<br>
> <br>
> +  }<br>
> <br>
> +<br>
> <br>
> +  Size = sizeof (UINT32);<br>
> <br>
>     Status = gRT->GetVariable (L"DebugEnableJTAG",<br>
> <br>
>                     &gConfigDxeFormSetGuid,<br>
> <br>
>                     NULL, &Size, &Var32);<br>
> <br>
> @@ -730,6 +739,11 @@ STATIC CONST AML_NAME_OP_REPLACE SsdtNameOpReplace[] = {<br>
>     { }<br>
> <br>
>   };<br>
> <br>
>   <br>
> <br>
> +STATIC CONST AML_NAME_OP_REPLACE SsdtEmmcNameOpReplace[] = {<br>
> <br>
> +  { "SDMA", PcdToken (PcdMmcEnableDma) },<br>
> <br>
> +  { }<br>
> <br>
> +};<br>
> <br>
> +<br>
> <br>
>   STATIC CONST NAMESPACE_TABLES SdtTables[] = {<br>
> <br>
>     {<br>
> <br>
>       SIGNATURE_64 ('R', 'P', 'I', 'T', 'H', 'F', 'A', 'N'),<br>
> <br>
> @@ -741,7 +755,7 @@ STATIC CONST NAMESPACE_TABLES SdtTables[] = {<br>
>       SIGNATURE_64 ('R', 'P', 'I', '4', 'E', 'M', 'M', 'C'),<br>
> <br>
>       0,<br>
> <br>
>       PcdToken(PcdSdIsArasan),<br>
> <br>
> -    NULL<br>
> <br>
> +    SsdtEmmcNameOpReplace<br>
> <br>
>     },<br>
> <br>
>     {<br>
> <br>
>       SIGNATURE_64 ('R', 'P', 'I', 0, 0, 0, 0, 0),<br>
> <br>
> diff --git a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.inf b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.inf<br>
> index 544e3b3e10..d51e54e010 100644<br>
> --- a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.inf<br>
> +++ b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.inf<br>
> @@ -84,6 +84,7 @@<br>
>     gRaspberryPiTokenSpaceGuid.PcdMmcSdDefaultSpeedMHz<br>
> <br>
>     gRaspberryPiTokenSpaceGuid.PcdMmcSdHighSpeedMHz<br>
> <br>
>     gRaspberryPiTokenSpaceGuid.PcdMmcDisableMulti<br>
> <br>
> +  gRaspberryPiTokenSpaceGuid.PcdMmcEnableDma<br>
> <br>
>     gRaspberryPiTokenSpaceGuid.PcdDebugEnableJTAG<br>
> <br>
>     gRaspberryPiTokenSpaceGuid.PcdDisplayEnableScaledVModes<br>
> <br>
>     gRaspberryPiTokenSpaceGuid.PcdDisplayEnableSShot<br>
> <br>
> diff --git a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxeHii.uni b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxeHii.uni<br>
> index 2afe8f32ae..6abccc1fdb 100644<br>
> --- a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxeHii.uni<br>
> +++ b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxeHii.uni<br>
> @@ -94,6 +94,11 @@<br>
>   #string STR_MMC_SD_HS_PROMPT     #language en-US "SD High Speed (MHz)"<br>
> <br>
>   #string STR_MMC_SD_HS_HELP       #language en-US "Override default 50Mhz"<br>
> <br>
>   <br>
> <br>
> +#string STR_MMC_EMMC_PROMPT      #language en-US "Enable eMMC DMA modes"<br>
> <br>
> +#string STR_MMC_EMMC_PIO         #language en-US "PIO"<br>
> <br>
> +#string STR_MMC_EMMC_DMA         #language en-US "SDMA/ADMA2"<br>
> <br>
> +#string STR_MMC_EMMC_HELP        #language en-US "Enable eMMC DMA modes for OS's that support ACPI _DMA() translations"<br>
<br>
For consistency, since that's what we already use for other UI strings, <br>
the plural of OS should be "OSes" rather than "OS's"<br>
<br>
> <br>
> +<br>
<br>
(very minor) Extra line added here.<br>
<br>
> <br>
>   <br>
> <br>
>   /*<br>
> <br>
>    * Display settings.<br>
> <br>
> diff --git a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxeHii.vfr b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxeHii.vfr<br>
> index de5e43471a..cc7a09cfb7 100644<br>
> --- a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxeHii.vfr<br>
> +++ b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxeHii.vfr<br>
> @@ -96,6 +96,11 @@ formset<br>
>         name  = MmcSdHighSpeedMHz,<br>
> <br>
>         guid  = CONFIGDXE_FORM_SET_GUID;<br>
> <br>
>   <br>
> <br>
> +    efivarstore MMC_EMMC_DMA_VARSTORE_DATA,<br>
> <br>
> +      attribute = EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,<br>
> <br>
> +      name  = MmcEnableDma,<br>
> <br>
> +      guid  = CONFIGDXE_FORM_SET_GUID;<br>
> <br>
> +<br>
> <br>
>       efivarstore DEBUG_ENABLE_JTAG_VARSTORE_DATA,<br>
> <br>
>         attribute = EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,<br>
> <br>
>         name  = DebugEnableJTAG,<br>
> <br>
> @@ -275,6 +280,18 @@ formset<br>
>                maximum = 100,<br>
> <br>
>                default = 50,<br>
> <br>
>           endnumeric;<br>
> <br>
> +#if (RPI_MODEL == 4)<br>
> <br>
> +        grayoutif ideqval SdIsArasan.Routing == 1;<br>
> <br>
> +        oneof varid = MmcEnableDma.EnableDma,<br>
> <br>
> +            prompt      = STRING_TOKEN(STR_MMC_EMMC_PROMPT),<br>
> <br>
> +            help        = STRING_TOKEN(STR_MMC_EMMC_HELP),<br>
> <br>
> +            flags       = NUMERIC_SIZE_4 | INTERACTIVE | RESET_REQUIRED,<br>
> <br>
> +            option text = STRING_TOKEN(STR_MMC_EMMC_PIO), value = 0, flags = DEFAULT;<br>
> <br>
> +            option text = STRING_TOKEN(STR_MMC_EMMC_DMA), value = 1, flags = 0;<br>
> <br>
> +        endoneof;<br>
> <br>
> +        endif;<br>
> <br>
> +#endif<br>
> <br>
> +<br>
> <br>
>       endform;<br>
> <br>
>   <br>
> <br>
>       form formid = 0x1004,<br>
> <br>
> diff --git a/Platform/RaspberryPi/Include/ConfigVars.h b/Platform/RaspberryPi/Include/ConfigVars.h<br>
> index c185bfe28b..142317985a 100644<br>
> --- a/Platform/RaspberryPi/Include/ConfigVars.h<br>
> +++ b/Platform/RaspberryPi/Include/ConfigVars.h<br>
> @@ -135,4 +135,12 @@ typedef struct {<br>
>     UINT32 MHz;<br>
> <br>
>   } MMC_SD_HS_MHZ_VARSTORE_DATA;<br>
> <br>
>   <br>
> <br>
> +typedef struct {<br>
> <br>
> +  /*<br>
> <br>
> +   * 0 - eMMC PIO mode<br>
> <br>
> +   * 1 - eMMC DMA mode<br>
> <br>
> +   */<br>
> <br>
> +  UINT32 EnableDma;<br>
> <br>
> +} MMC_EMMC_DMA_VARSTORE_DATA;<br>
> <br>
> +<br>
> <br>
>   #endif /* CONFIG_VARS_H */<br>
> <br>
> diff --git a/Platform/RaspberryPi/RPi3/RPi3.dsc b/Platform/RaspberryPi/RPi3/RPi3.dsc<br>
> index 530b42796a..107cbda297 100644<br>
> --- a/Platform/RaspberryPi/RPi3/RPi3.dsc<br>
> +++ b/Platform/RaspberryPi/RPi3/RPi3.dsc<br>
> @@ -470,6 +470,7 @@<br>
>     gRaspberryPiTokenSpaceGuid.PcdMmcSdDefaultSpeedMHz|L"MmcSdDefaultSpeedMHz"|gConfigDxeFormSetGuid|0x0|25<br>
> <br>
>     gRaspberryPiTokenSpaceGuid.PcdMmcSdHighSpeedMHz|L"MmcSdHighSpeedMHz"|gConfigDxeFormSetGuid|0x0|50<br>
> <br>
>     gRaspberryPiTokenSpaceGuid.PcdMmcDisableMulti|L"MmcDisableMulti"|gConfigDxeFormSetGuid|0x0|0<br>
> <br>
> +  gRaspberryPiTokenSpaceGuid.PcdMmcEnableDma|L"MmcEnableDma"|gConfigDxeFormSetGuid|0x0|0<br>
> <br>
>   <br>
> <br>
>     #<br>
> <br>
>     # Debug-related.<br>
> <br>
> diff --git a/Platform/RaspberryPi/RPi4/RPi4.dsc b/Platform/RaspberryPi/RPi4/RPi4.dsc<br>
> index 5f8452aa0b..9962df0076 100644<br>
> --- a/Platform/RaspberryPi/RPi4/RPi4.dsc<br>
> +++ b/Platform/RaspberryPi/RPi4/RPi4.dsc<br>
> @@ -481,6 +481,7 @@<br>
>     gRaspberryPiTokenSpaceGuid.PcdMmcSdDefaultSpeedMHz|L"MmcSdDefaultSpeedMHz"|gConfigDxeFormSetGuid|0x0|25<br>
> <br>
>     gRaspberryPiTokenSpaceGuid.PcdMmcSdHighSpeedMHz|L"MmcSdHighSpeedMHz"|gConfigDxeFormSetGuid|0x0|50<br>
> <br>
>     gRaspberryPiTokenSpaceGuid.PcdMmcDisableMulti|L"MmcDisableMulti"|gConfigDxeFormSetGuid|0x0|0<br>
> <br>
> +  gRaspberryPiTokenSpaceGuid.PcdMmcEnableDma|L"MmcEnableDma"|gConfigDxeFormSetGuid|0x0|0<br>
> <br>
>   <br>
> <br>
>     #<br>
> <br>
>     # Debug-related.<br>
> <br>
> diff --git a/Platform/RaspberryPi/RaspberryPi.dec b/Platform/RaspberryPi/RaspberryPi.dec<br>
> index 10723036aa..08135717ed 100644<br>
> --- a/Platform/RaspberryPi/RaspberryPi.dec<br>
> +++ b/Platform/RaspberryPi/RaspberryPi.dec<br>
> @@ -69,3 +69,4 @@<br>
>     gRaspberryPiTokenSpaceGuid.PcdFanOnGpio|0|UINT32|0x0000001C<br>
> <br>
>     gRaspberryPiTokenSpaceGuid.PcdFanTemp|0|UINT32|0x0000001D<br>
> <br>
>     gRaspberryPiTokenSpaceGuid.PcdPlatformResetDelay|0|UINT32|0x0000001E<br>
> <br>
> +  gRaspberryPiTokenSpaceGuid.PcdMmcEnableDma|0|UINT32|0x0000001F<br>
> <br>
<br>
Reviewed-by: Pete Batard <pete@akeo.ie><br>
</div>
</span></font></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/71478">View/Reply Online (#71478)</a> |    |  <a target="_blank" href="https://groups.io/mt/80300534/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>