* [edk2-devel] [PATCH edk2-platforms v6 1/4] SbsaQemu: introduce macro to compare platform version
2023-10-26 17:33 [edk2-devel] [PATCH edk2-platforms v6 0/4] Provide XHCI USB controller only for newer hardware Marcin Juszkiewicz
@ 2023-10-26 17:33 ` Marcin Juszkiewicz
2023-10-26 17:33 ` [edk2-devel] [PATCH edk2-platforms v6 2/4] SbsaQemu: add AcpiLib Marcin Juszkiewicz
` (2 subsequent siblings)
3 siblings, 0 replies; 6+ messages in thread
From: Marcin Juszkiewicz @ 2023-10-26 17:33 UTC (permalink / raw)
To: devel
Cc: Leif Lindholm, Ard Biesheuvel, Jeremy Linton, Nhi Pham,
Chuong Tran, Rebecca Cran, Marcin Juszkiewicz
We want to check "if platver < 0.3" in an easy way.
Signed-off-by: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
---
.../IndustryStandard/SbsaQemuPlatformVersion.h | 25 ++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/Silicon/Qemu/SbsaQemu/Include/IndustryStandard/SbsaQemuPlatformVersion.h b/Silicon/Qemu/SbsaQemu/Include/IndustryStandard/SbsaQemuPlatformVersion.h
new file mode 100644
index 000000000000..dd2483787002
--- /dev/null
+++ b/Silicon/Qemu/SbsaQemu/Include/IndustryStandard/SbsaQemuPlatformVersion.h
@@ -0,0 +1,25 @@
+/** @file
+*
+* Copyright (c) Linaro Limited. All rights reserved.
+*
+* SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef SBSAQEMUPLATFORM_VERSION_H
+#define SBSAQEMUPLATFORM_VERSION_H
+
+/*
+ * Compare PlatformVersion
+ *
+ */
+
+#define PLATFORM_VERSION_LESS_THAN(Major, Minor) ( \
+ ( \
+ ( PcdGet32 (PcdPlatformVersionMajor) < Major) || \
+ ( \
+ ( PcdGet32 (PcdPlatformVersionMajor) == Major) && \
+ ( PcdGet32 (PcdPlatformVersionMinor) < Minor) \
+ ) \
+ ) \
+)
+#endif
--
2.41.0
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#110134): https://edk2.groups.io/g/devel/message/110134
Mute This Topic: https://groups.io/mt/102205080/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [edk2-devel] [PATCH edk2-platforms v6 2/4] SbsaQemu: add AcpiLib
2023-10-26 17:33 [edk2-devel] [PATCH edk2-platforms v6 0/4] Provide XHCI USB controller only for newer hardware Marcin Juszkiewicz
2023-10-26 17:33 ` [edk2-devel] [PATCH edk2-platforms v6 1/4] SbsaQemu: introduce macro to compare platform version Marcin Juszkiewicz
@ 2023-10-26 17:33 ` Marcin Juszkiewicz
2023-10-26 17:33 ` [edk2-devel] [PATCH edk2-platforms v6 3/4] SbsaQemu: initialize XHCI only if it exists Marcin Juszkiewicz
2023-10-26 17:33 ` [edk2-devel] [PATCH edk2-platforms v6 4/4] SbsaQemu: disable XHCI in DSDT if not present Marcin Juszkiewicz
3 siblings, 0 replies; 6+ messages in thread
From: Marcin Juszkiewicz @ 2023-10-26 17:33 UTC (permalink / raw)
To: devel
Cc: Leif Lindholm, Ard Biesheuvel, Jeremy Linton, Nhi Pham,
Chuong Tran, Rebecca Cran, Marcin Juszkiewicz
It will be needed for playing with disabling XHCI later.
Signed-off-by: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
---
Platform/Qemu/SbsaQemu/SbsaQemu.dsc | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Platform/Qemu/SbsaQemu/SbsaQemu.dsc b/Platform/Qemu/SbsaQemu/SbsaQemu.dsc
index 806651fc55a0..fa85bd8dab89 100644
--- a/Platform/Qemu/SbsaQemu/SbsaQemu.dsc
+++ b/Platform/Qemu/SbsaQemu/SbsaQemu.dsc
@@ -172,6 +172,8 @@ [LibraryClasses.common]
ReportStatusCodeLib|MdePkg/Library/BaseReportStatusCodeLibNull/BaseReportStatusCodeLibNull.inf
+ AcpiLib|EmbeddedPkg/Library/AcpiLib/AcpiLib.inf
+
ArmLib|ArmPkg/Library/ArmLib/ArmBaseLib.inf
ArmMmuLib|ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf
--
2.41.0
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#110135): https://edk2.groups.io/g/devel/message/110135
Mute This Topic: https://groups.io/mt/102205081/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [edk2-devel] [PATCH edk2-platforms v6 3/4] SbsaQemu: initialize XHCI only if it exists
2023-10-26 17:33 [edk2-devel] [PATCH edk2-platforms v6 0/4] Provide XHCI USB controller only for newer hardware Marcin Juszkiewicz
2023-10-26 17:33 ` [edk2-devel] [PATCH edk2-platforms v6 1/4] SbsaQemu: introduce macro to compare platform version Marcin Juszkiewicz
2023-10-26 17:33 ` [edk2-devel] [PATCH edk2-platforms v6 2/4] SbsaQemu: add AcpiLib Marcin Juszkiewicz
@ 2023-10-26 17:33 ` Marcin Juszkiewicz
2023-10-26 17:33 ` [edk2-devel] [PATCH edk2-platforms v6 4/4] SbsaQemu: disable XHCI in DSDT if not present Marcin Juszkiewicz
3 siblings, 0 replies; 6+ messages in thread
From: Marcin Juszkiewicz @ 2023-10-26 17:33 UTC (permalink / raw)
To: devel
Cc: Leif Lindholm, Ard Biesheuvel, Jeremy Linton, Nhi Pham,
Chuong Tran, Rebecca Cran, Marcin Juszkiewicz
We need platform version to be at least 0.3 to have XHCI
in virtual hardware. On older platforms there is non-working
EHCI which we ignore.
Signed-off-by: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
---
.../SbsaQemuPlatformDxe/SbsaQemuPlatformDxe.c | 49 +++++++++++---------
1 file changed, 27 insertions(+), 22 deletions(-)
diff --git a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuPlatformDxe/SbsaQemuPlatformDxe.c b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuPlatformDxe/SbsaQemuPlatformDxe.c
index 36ada4270bbf..4ebbe7c93a19 100644
--- a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuPlatformDxe/SbsaQemuPlatformDxe.c
+++ b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuPlatformDxe/SbsaQemuPlatformDxe.c
@@ -15,6 +15,7 @@
#include <Library/UefiBootServicesTableLib.h>
#include <Library/UefiDriverEntryPoint.h>
#include <IndustryStandard/SbsaQemuSmc.h>
+#include <IndustryStandard/SbsaQemuPlatformVersion.h>
#include <Protocol/FdtClient.h>
@@ -57,28 +58,6 @@ InitializeSbsaQemuPlatformDxe (
return Status;
}
- Base = (VOID*)(UINTN)PcdGet64 (PcdPlatformXhciBase);
- ASSERT (Base != NULL);
- Size = (UINTN)PcdGet32 (PcdPlatformXhciSize);
- ASSERT (Size != 0);
-
- DEBUG ((DEBUG_INFO, "%a: Got platform XHCI %llx %u\n",
- __FUNCTION__, Base, Size));
-
- Status = RegisterNonDiscoverableMmioDevice (
- NonDiscoverableDeviceTypeXhci,
- NonDiscoverableDeviceDmaTypeCoherent,
- NULL,
- NULL,
- 1,
- Base, Size);
-
- if (EFI_ERROR(Status)) {
- DEBUG ((DEBUG_ERROR, "%a: NonDiscoverable: Cannot install XHCI device @%p (Staus == %r)\n",
- __FUNCTION__, Base, Status));
- return Status;
- }
-
SmcResult = ArmCallSmc0 (SIP_SVC_VERSION, &Arg0, &Arg1, NULL);
if (SmcResult == SMC_ARCH_CALL_SUCCESS) {
Result = PcdSet32S (PcdPlatformVersionMajor, Arg0);
@@ -118,5 +97,31 @@ InitializeSbsaQemuPlatformDxe (
DEBUG ((DEBUG_INFO, "GICI base: 0x%x\n", Arg0));
+ if (!PLATFORM_VERSION_LESS_THAN (0, 3)) {
+ Base = (VOID *)(UINTN)PcdGet64 (PcdPlatformXhciBase);
+ ASSERT (Base != NULL);
+ Size = (UINTN)PcdGet32 (PcdPlatformXhciSize);
+ ASSERT (Size != 0);
+
+ DEBUG ((DEBUG_INFO, "%a: Got platform XHCI %llx %u\n",
+ __FUNCTION__, Base, Size));
+
+ Status = RegisterNonDiscoverableMmioDevice (
+ NonDiscoverableDeviceTypeXhci,
+ NonDiscoverableDeviceDmaTypeCoherent,
+ NULL,
+ NULL,
+ 1,
+ Base,
+ Size
+ );
+
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "%a: NonDiscoverable: Cannot install XHCI device @%p (Status == %r)\n",
+ __FUNCTION__, Base, Status));
+ return Status;
+ }
+ }
+
return EFI_SUCCESS;
}
--
2.41.0
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#110136): https://edk2.groups.io/g/devel/message/110136
Mute This Topic: https://groups.io/mt/102205082/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [edk2-devel] [PATCH edk2-platforms v6 4/4] SbsaQemu: disable XHCI in DSDT if not present
2023-10-26 17:33 [edk2-devel] [PATCH edk2-platforms v6 0/4] Provide XHCI USB controller only for newer hardware Marcin Juszkiewicz
` (2 preceding siblings ...)
2023-10-26 17:33 ` [edk2-devel] [PATCH edk2-platforms v6 3/4] SbsaQemu: initialize XHCI only if it exists Marcin Juszkiewicz
@ 2023-10-26 17:33 ` Marcin Juszkiewicz
2023-10-26 17:48 ` Leif Lindholm
3 siblings, 1 reply; 6+ messages in thread
From: Marcin Juszkiewicz @ 2023-10-26 17:33 UTC (permalink / raw)
To: devel
Cc: Leif Lindholm, Ard Biesheuvel, Jeremy Linton, Nhi Pham,
Chuong Tran, Rebecca Cran, Marcin Juszkiewicz
We need platform version to be at least 0.3 to have XHCI
in virtual hardware. On older platforms there is non-working
EHCI which we ignore.
Set DSDT node to be disabled so operating system will not try
to initialize not-existing hardware.
Signed-off-by: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
---
.../Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.inf | 4 ++
.../Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c | 74 +++++++++++++++++++-
Silicon/Qemu/SbsaQemu/AcpiTables/Dsdt.asl | 3 +-
3 files changed, 79 insertions(+), 2 deletions(-)
diff --git a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.inf b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.inf
index 7c7e08e0fd3a..291743b19115 100644
--- a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.inf
+++ b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.inf
@@ -29,6 +29,7 @@ [Packages]
Silicon/Qemu/SbsaQemu/SbsaQemu.dec
[LibraryClasses]
+ AcpiLib
ArmLib
BaseMemoryLib
BaseLib
@@ -49,6 +50,8 @@ [Pcd]
gArmTokenSpaceGuid.PcdGicDistributorBase
gArmTokenSpaceGuid.PcdGicRedistributorsBase
gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdGicItsBase
+ gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdPlatformVersionMajor
+ gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdPlatformVersionMinor
gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdSmmuBase
[Depex]
@@ -58,6 +61,7 @@ [Guids]
gEdkiiPlatformHasAcpiGuid
[Protocols]
+ gEfiAcpiSdtProtocolGuid
gEfiAcpiTableProtocolGuid ## CONSUMES
[FixedPcd]
diff --git a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c
index fd849ca1594b..523d9035e0c1 100644
--- a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c
+++ b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c
@@ -10,6 +10,7 @@
#include <IndustryStandard/AcpiAml.h>
#include <IndustryStandard/IoRemappingTable.h>
#include <IndustryStandard/SbsaQemuAcpi.h>
+#include <IndustryStandard/SbsaQemuPlatformVersion.h>
#include <Library/AcpiLib.h>
#include <Library/ArmLib.h>
#include <Library/BaseMemoryLib.h>
@@ -682,6 +683,72 @@ AddGtdtTable (
return Status;
}
+/*
+ * A function to disable XHCI node on Platform Version lower than 0.3
+ */
+STATIC
+EFI_STATUS
+DisableXhciOnOlderPlatVer (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+ EFI_ACPI_SDT_PROTOCOL *AcpiSdtProtocol;
+ EFI_ACPI_DESCRIPTION_HEADER *Table;
+ UINTN TableKey;
+ UINTN TableIndex;
+ EFI_ACPI_HANDLE TableHandle;
+
+ Status = EFI_SUCCESS;
+
+ if ( PLATFORM_VERSION_LESS_THAN (0, 3)) {
+ DEBUG ((DEBUG_ERROR, "Platform Version < 0.3 - disabling XHCI\n"));
+ Status = gBS->LocateProtocol (
+ &gEfiAcpiSdtProtocolGuid,
+ NULL,
+ (VOID **)&AcpiSdtProtocol
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "Unable to locate ACPI table protocol\n"));
+ return Status;
+ }
+
+ Status = AcpiLocateTableBySignature (
+ AcpiSdtProtocol,
+ EFI_ACPI_6_3_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
+ &TableIndex,
+ &Table,
+ &TableKey
+ );
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "ACPI DSDT table not found!\n"));
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ Status = AcpiSdtProtocol->OpenSdt (TableKey, &TableHandle);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ AcpiSdtProtocol->Close (TableHandle);
+ return Status;
+ }
+
+ Status = AcpiAmlObjectUpdateInteger (AcpiSdtProtocol, TableHandle, "\\_SB.USB0.XHCI", 0x0);
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "Failed to disable XHCI!\n"));
+ ASSERT_EFI_ERROR (Status);
+ AcpiSdtProtocol->Close (TableHandle);
+ return Status;
+ }
+
+ AcpiSdtProtocol->Close (TableHandle);
+ AcpiUpdateChecksum ((UINT8 *)Table, Table->Length);
+ }
+
+ return Status;
+}
+
+
EFI_STATUS
EFIAPI
InitializeSbsaQemuAcpiDxe (
@@ -738,5 +805,10 @@ InitializeSbsaQemuAcpiDxe (
DEBUG ((DEBUG_ERROR, "Failed to add GTDT table\n"));
}
- return EFI_SUCCESS;
+ Status = DisableXhciOnOlderPlatVer ();
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "Failed to handle XHCI enablement\n"));
+ }
+
+ return Status;
}
diff --git a/Silicon/Qemu/SbsaQemu/AcpiTables/Dsdt.asl b/Silicon/Qemu/SbsaQemu/AcpiTables/Dsdt.asl
index 6661bc8195ee..b55ad6c5cc07 100644
--- a/Silicon/Qemu/SbsaQemu/AcpiTables/Dsdt.asl
+++ b/Silicon/Qemu/SbsaQemu/AcpiTables/Dsdt.asl
@@ -73,8 +73,9 @@ DefinitionBlock ("DsdtTable.aml", "DSDT",
Name (_HID, "PNP0D10") // _HID: Hardware ID
Name (_UID, 0x00) // _UID: Unique ID
Name (_CCA, 0x01) // _CCA: Cache Coherency Attribute
+ Name (XHCI, 0xF) // will be set using AcpiLib
Method (_STA) {
- Return (0xF)
+ Return (XHCI)
}
Method (_CRS, 0x0, Serialized) {
Name (RBUF, ResourceTemplate() {
--
2.41.0
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#110137): https://edk2.groups.io/g/devel/message/110137
Mute This Topic: https://groups.io/mt/102205083/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [edk2-devel] [PATCH edk2-platforms v6 4/4] SbsaQemu: disable XHCI in DSDT if not present
2023-10-26 17:33 ` [edk2-devel] [PATCH edk2-platforms v6 4/4] SbsaQemu: disable XHCI in DSDT if not present Marcin Juszkiewicz
@ 2023-10-26 17:48 ` Leif Lindholm
0 siblings, 0 replies; 6+ messages in thread
From: Leif Lindholm @ 2023-10-26 17:48 UTC (permalink / raw)
To: Marcin Juszkiewicz
Cc: devel, Ard Biesheuvel, Jeremy Linton, Nhi Pham, Chuong Tran,
Rebecca Cran
On Thu, Oct 26, 2023 at 19:33:52 +0200, Marcin Juszkiewicz wrote:
> We need platform version to be at least 0.3 to have XHCI
> in virtual hardware. On older platforms there is non-working
> EHCI which we ignore.
>
> Set DSDT node to be disabled so operating system will not try
> to initialize not-existing hardware.
>
> Signed-off-by: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
> ---
> .../Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.inf | 4 ++
> .../Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c | 74 +++++++++++++++++++-
> Silicon/Qemu/SbsaQemu/AcpiTables/Dsdt.asl | 3 +-
> 3 files changed, 79 insertions(+), 2 deletions(-)
>
> diff --git a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.inf b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.inf
> index 7c7e08e0fd3a..291743b19115 100644
> --- a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.inf
> +++ b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.inf
> @@ -29,6 +29,7 @@ [Packages]
> Silicon/Qemu/SbsaQemu/SbsaQemu.dec
>
> [LibraryClasses]
> + AcpiLib
> ArmLib
> BaseMemoryLib
> BaseLib
> @@ -49,6 +50,8 @@ [Pcd]
> gArmTokenSpaceGuid.PcdGicDistributorBase
> gArmTokenSpaceGuid.PcdGicRedistributorsBase
> gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdGicItsBase
> + gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdPlatformVersionMajor
> + gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdPlatformVersionMinor
> gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdSmmuBase
>
> [Depex]
> @@ -58,6 +61,7 @@ [Guids]
> gEdkiiPlatformHasAcpiGuid
>
> [Protocols]
> + gEfiAcpiSdtProtocolGuid
> gEfiAcpiTableProtocolGuid ## CONSUMES
>
> [FixedPcd]
> diff --git a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c
> index fd849ca1594b..523d9035e0c1 100644
> --- a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c
> +++ b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c
> @@ -10,6 +10,7 @@
> #include <IndustryStandard/AcpiAml.h>
> #include <IndustryStandard/IoRemappingTable.h>
> #include <IndustryStandard/SbsaQemuAcpi.h>
> +#include <IndustryStandard/SbsaQemuPlatformVersion.h>
> #include <Library/AcpiLib.h>
> #include <Library/ArmLib.h>
> #include <Library/BaseMemoryLib.h>
> @@ -682,6 +683,72 @@ AddGtdtTable (
> return Status;
> }
>
> +/*
> + * A function to disable XHCI node on Platform Version lower than 0.3
> + */
> +STATIC
> +EFI_STATUS
> +DisableXhciOnOlderPlatVer (
> + VOID
> + )
> +{
> + EFI_STATUS Status;
> + EFI_ACPI_SDT_PROTOCOL *AcpiSdtProtocol;
> + EFI_ACPI_DESCRIPTION_HEADER *Table;
> + UINTN TableKey;
> + UINTN TableIndex;
> + EFI_ACPI_HANDLE TableHandle;
> +
> + Status = EFI_SUCCESS;
> +
> + if ( PLATFORM_VERSION_LESS_THAN (0, 3)) {
> + DEBUG ((DEBUG_ERROR, "Platform Version < 0.3 - disabling XHCI\n"));
> + Status = gBS->LocateProtocol (
> + &gEfiAcpiSdtProtocolGuid,
> + NULL,
> + (VOID **)&AcpiSdtProtocol
> + );
> + if (EFI_ERROR (Status)) {
> + DEBUG ((DEBUG_ERROR, "Unable to locate ACPI table protocol\n"));
> + return Status;
> + }
> +
> + Status = AcpiLocateTableBySignature (
> + AcpiSdtProtocol,
> + EFI_ACPI_6_3_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
> + &TableIndex,
> + &Table,
> + &TableKey
> + );
> + if (EFI_ERROR (Status)) {
> + DEBUG ((DEBUG_ERROR, "ACPI DSDT table not found!\n"));
> + ASSERT_EFI_ERROR (Status);
> + return Status;
> + }
> +
> + Status = AcpiSdtProtocol->OpenSdt (TableKey, &TableHandle);
> + if (EFI_ERROR (Status)) {
> + ASSERT_EFI_ERROR (Status);
> + AcpiSdtProtocol->Close (TableHandle);
> + return Status;
> + }
> +
> + Status = AcpiAmlObjectUpdateInteger (AcpiSdtProtocol, TableHandle, "\\_SB.USB0.XHCI", 0x0);
> + if (EFI_ERROR (Status)) {
> + DEBUG ((DEBUG_ERROR, "Failed to disable XHCI!\n"));
> + ASSERT_EFI_ERROR (Status);
> + AcpiSdtProtocol->Close (TableHandle);
> + return Status;
> + }
> +
> + AcpiSdtProtocol->Close (TableHandle);
> + AcpiUpdateChecksum ((UINT8 *)Table, Table->Length);
> + }
> +
> + return Status;
> +}
> +
> +
> EFI_STATUS
> EFIAPI
> InitializeSbsaQemuAcpiDxe (
> @@ -738,5 +805,10 @@ InitializeSbsaQemuAcpiDxe (
> DEBUG ((DEBUG_ERROR, "Failed to add GTDT table\n"));
> }
>
> - return EFI_SUCCESS;
> + Status = DisableXhciOnOlderPlatVer ();
> + if (EFI_ERROR (Status)) {
> + DEBUG ((DEBUG_ERROR, "Failed to handle XHCI enablement\n"));
> + }
> +
> + return Status;
Right, this isn't what I asked for though.
There is nothing valid about returning a bad status here - it is the
entry point of the module. If we wanted some sort of error handling,
we would need to plumb that in manually.
Anyway, no point in you spinning another version, I'll change this
back to the original return statement.
For the series:
Reviewed-by: Leif Lindholm <quic_llindhol@quicinc.com>
Pushed as 74b9eacfd453..d61836283a4c.
Thanks!
> }
> diff --git a/Silicon/Qemu/SbsaQemu/AcpiTables/Dsdt.asl b/Silicon/Qemu/SbsaQemu/AcpiTables/Dsdt.asl
> index 6661bc8195ee..b55ad6c5cc07 100644
> --- a/Silicon/Qemu/SbsaQemu/AcpiTables/Dsdt.asl
> +++ b/Silicon/Qemu/SbsaQemu/AcpiTables/Dsdt.asl
> @@ -73,8 +73,9 @@ DefinitionBlock ("DsdtTable.aml", "DSDT",
> Name (_HID, "PNP0D10") // _HID: Hardware ID
> Name (_UID, 0x00) // _UID: Unique ID
> Name (_CCA, 0x01) // _CCA: Cache Coherency Attribute
> + Name (XHCI, 0xF) // will be set using AcpiLib
> Method (_STA) {
> - Return (0xF)
> + Return (XHCI)
> }
> Method (_CRS, 0x0, Serialized) {
> Name (RBUF, ResourceTemplate() {
>
> --
> 2.41.0
>
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#110138): https://edk2.groups.io/g/devel/message/110138
Mute This Topic: https://groups.io/mt/102205083/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/leave/12367111/7686176/1913456212/xyzzy [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply [flat|nested] 6+ messages in thread