On Thu, 11 Jan 2024 at 00:52, Jeremy Linton <[email protected]> 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 <[email protected]>
> ---
> .../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: [email protected]
Unsubscribe: https://edk2.groups.io/g/devel/unsub [[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-