On Thu, 11 Jan 2024 at 00:52, Jeremy Linton <jeremy.lin...@arm.com> wrote:
>
> Its a complete tossup whether removing the mailbox call after we have
> set up the XHCI works for a given kernel+distro in DT mode. So lets
> give users which want to try DT the option of flipping this on/off.
>
> Users that don't want to have to deal with DT, can use ACPI.
>
> Signed-off-by: Jeremy Linton <jeremy.lin...@arm.com>
> ---
>  .../RaspberryPi/Drivers/ConfigDxe/ConfigDxe.c     | 10 ++++++++++
>  .../RaspberryPi/Drivers/ConfigDxe/ConfigDxe.inf   |  1 +
>  .../Drivers/ConfigDxe/ConfigDxeHii.uni            |  5 +++++
>  .../Drivers/ConfigDxe/ConfigDxeHii.vfr            | 15 +++++++++++++++
>  Platform/RaspberryPi/Drivers/FdtDxe/FdtDxe.c      |  4 ++++
>  Platform/RaspberryPi/Drivers/FdtDxe/FdtDxe.inf    |  1 +
>  Platform/RaspberryPi/RPi3/RPi3.dsc                |  6 ++++++
>  Platform/RaspberryPi/RPi4/RPi4.dsc                |  7 +++++++
>  Platform/RaspberryPi/RaspberryPi.dec              |  1 +
>  9 files changed, 50 insertions(+)
>

This looks ok to me but it doesn't appear to apply on today's edk2-platforms.

> diff --git a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.c 
> b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.c
> index 3dcf2bac0d..2484787982 100644
> --- a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.c
> +++ b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.c
> @@ -298,6 +298,16 @@ SetupVariables (
>          Status = PcdSet32S (PcdXhciPci, 1);
>          ASSERT_EFI_ERROR (Status);
>        }
> +
> +      Size = sizeof (UINT32);
> +      Status = gRT->GetVariable (L"XhciReload",
> +                                 &gConfigDxeFormSetGuid,
> +                                 NULL, &Size, &Var32);
> +      if (EFI_ERROR (Status)) {
> +        Status = PcdSet32S (PcdXhciReload, PcdGet32 (PcdXhciReload));
> +        ASSERT_EFI_ERROR (Status);
> +      }
> +
>      }
>    } else {
>      /*
> diff --git a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.inf 
> b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.inf
> index 6f6e8f42ac..475e645537 100644
> --- a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.inf
> +++ b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxe.inf
> @@ -96,6 +96,7 @@
>    gRaspberryPiTokenSpaceGuid.PcdUartInUse
>    gRaspberryPiTokenSpaceGuid.PcdXhciPci
>    gRaspberryPiTokenSpaceGuid.PcdMiniUartClockRate
> +  gRaspberryPiTokenSpaceGuid.PcdXhciReload
>
>  [Depex]
>    gPcdProtocolGuid AND gRaspberryPiFirmwareProtocolGuid
> diff --git a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxeHii.uni 
> b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxeHii.uni
> index 5ec17072c3..8130638876 100644
> --- a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxeHii.uni
> +++ b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxeHii.uni
> @@ -62,6 +62,11 @@
>  #string STR_ADVANCED_XHCIPCI_XHCI     #language en-US "XHCI"
>  #string STR_ADVANCED_XHCIPCI_PCIE     #language en-US "PCIe"
>
> +#string STR_ADVANCED_XHCIRELOAD_PROMPT  #language en-US "DT Reload XHCI 
> firmware"
> +#string STR_ADVANCED_XHCIRELOAD_HELP    #language en-US "OS should reload 
> XHCI firmware on reset"
> +#string STR_ADVANCED_XHCIRELOAD_DISABLE #language en-US "Disabled"
> +#string STR_ADVANCED_XHCIRELOAD_RELOAD  #language en-US "Reload"
> +
>  #string STR_ADVANCED_ASSET_TAG_PROMPT #language en-US "Asset Tag"
>  #string STR_ADVANCED_ASSET_TAG_HELP   #language en-US "Set the system Asset 
> Tag"
>
> diff --git a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxeHii.vfr 
> b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxeHii.vfr
> index f668b7a553..f13b70711d 100644
> --- a/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxeHii.vfr
> +++ b/Platform/RaspberryPi/Drivers/ConfigDxe/ConfigDxeHii.vfr
> @@ -61,6 +61,11 @@ formset
>        name  = XhciPci,
>        guid  = CONFIGDXE_FORM_SET_GUID;
>
> +    efivarstore ADVANCED_XHCIPCI_VARSTORE_DATA,
> +      attribute = EFI_VARIABLE_BOOTSERVICE_ACCESS | 
> EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
> +      name  = XhciReload,
> +      guid  = CONFIGDXE_FORM_SET_GUID;
> +
>      efivarstore SYSTEM_TABLE_MODE_VARSTORE_DATA,
>        attribute = EFI_VARIABLE_BOOTSERVICE_ACCESS | 
> EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE,
>        name  = SystemTableMode,
> @@ -228,6 +233,16 @@ formset
>                option text = STRING_TOKEN(STR_ADVANCED_XHCIPCI_PCIE), value = 
> 1, flags = 0;
>              endoneof;
>            endif;
> +
> +          grayoutif ideqval SystemTableMode.Mode == SYSTEM_TABLE_MODE_ACPI;
> +            oneof varid = XhciReload.Value,
> +              prompt      = STRING_TOKEN(STR_ADVANCED_XHCIRELOAD_PROMPT),
> +              help        = STRING_TOKEN(STR_ADVANCED_XHCIRELOAD_HELP),
> +              flags       = NUMERIC_SIZE_4 | INTERACTIVE | RESET_REQUIRED,
> +              option text = STRING_TOKEN(STR_ADVANCED_XHCIRELOAD_DISABLE), 
> value = 0, flags = DEFAULT;
> +              option text = STRING_TOKEN(STR_ADVANCED_XHCIRELOAD_RELOAD), 
> value = 1, flags = 0;
> +            endoneof;
> +          endif;
>          endif;
>  #endif
>          string varid = AssetTag.AssetTag,
> diff --git a/Platform/RaspberryPi/Drivers/FdtDxe/FdtDxe.c 
> b/Platform/RaspberryPi/Drivers/FdtDxe/FdtDxe.c
> index cbbc2ad30d..dd4fc0a05e 100644
> --- a/Platform/RaspberryPi/Drivers/FdtDxe/FdtDxe.c
> +++ b/Platform/RaspberryPi/Drivers/FdtDxe/FdtDxe.c
> @@ -375,6 +375,10 @@ SyncPcie (
>      return EFI_NOT_FOUND;
>    }
>
> +  if (PcdGet32 (PcdXhciReload) != 1) {
> +    return EFI_SUCCESS;
> +  }
> +
>    /*
>     * Now that we are always running without DMA translation, and with a 3G
>     * limit, there shouldn't be a need to reset/reload the XHCI. The
> diff --git a/Platform/RaspberryPi/Drivers/FdtDxe/FdtDxe.inf 
> b/Platform/RaspberryPi/Drivers/FdtDxe/FdtDxe.inf
> index 26f84e5940..d9fb6ee480 100644
> --- a/Platform/RaspberryPi/Drivers/FdtDxe/FdtDxe.inf
> +++ b/Platform/RaspberryPi/Drivers/FdtDxe/FdtDxe.inf
> @@ -47,3 +47,4 @@
>
>  [Pcd]
>    gRaspberryPiTokenSpaceGuid.PcdSystemTableMode
> +  gRaspberryPiTokenSpaceGuid.PcdXhciReload
> diff --git a/Platform/RaspberryPi/RPi3/RPi3.dsc 
> b/Platform/RaspberryPi/RPi3/RPi3.dsc
> index a967cd5a20..f5361ab95e 100644
> --- a/Platform/RaspberryPi/RPi3/RPi3.dsc
> +++ b/Platform/RaspberryPi/RPi3/RPi3.dsc
> @@ -529,6 +529,12 @@
>    #
>    
> gRaspberryPiTokenSpaceGuid.PcdXhciPci|L"XhciPci"|gConfigDxeFormSetGuid|0x0|0
>
> +  # DT contains XHCI quirk node (not valid on rpi3)
> +  #
> +  # 0  - DISABLED
> +  #
> +  
> gRaspberryPiTokenSpaceGuid.PcdXhciReload|L"XhciReload"|gConfigDxeFormSetGuid|0x0|0
> +
>    #
>    # Common UEFI ones.
>    #
> diff --git a/Platform/RaspberryPi/RPi4/RPi4.dsc 
> b/Platform/RaspberryPi/RPi4/RPi4.dsc
> index 8c49c67ab2..4e91eb9aea 100644
> --- a/Platform/RaspberryPi/RPi4/RPi4.dsc
> +++ b/Platform/RaspberryPi/RPi4/RPi4.dsc
> @@ -547,6 +547,13 @@
>    #
>    
> gRaspberryPiTokenSpaceGuid.PcdXhciPci|L"XhciPci"|gConfigDxeFormSetGuid|0x0|0
>
> +  # DT contains XHCI quirk node
> +  #
> +  # 0  - No reload
> +  # 1  - Yes, DT has Reload
> +  #
> +  
> gRaspberryPiTokenSpaceGuid.PcdXhciReload|L"XhciReload"|gConfigDxeFormSetGuid|0x0|0
> +
>    #
>    # Common UEFI ones.
>    #
> diff --git a/Platform/RaspberryPi/RaspberryPi.dec 
> b/Platform/RaspberryPi/RaspberryPi.dec
> index 17b6061a05..6bd16a5ae9 100644
> --- a/Platform/RaspberryPi/RaspberryPi.dec
> +++ b/Platform/RaspberryPi/RaspberryPi.dec
> @@ -73,3 +73,4 @@
>    gRaspberryPiTokenSpaceGuid.PcdUartInUse|1|UINT32|0x00000021
>    gRaspberryPiTokenSpaceGuid.PcdXhciPci|0|UINT32|0x00000022
>    gRaspberryPiTokenSpaceGuid.PcdMiniUartClockRate|0|UINT32|0x00000023
> +  gRaspberryPiTokenSpaceGuid.PcdXhciReload|0|UINT32|0x00000024
> --
> 2.43.0
>


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#113590): https://edk2.groups.io/g/devel/message/113590
Mute This Topic: https://groups.io/mt/103652856/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to