public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [edk2-devel] [PATCH edk2-platforms v2 0/4] Provide XHCI USB controller only for newer hardware
@ 2023-10-16 10:06 Marcin Juszkiewicz
  2023-10-16 10:06 ` [edk2-devel] [PATCH edk2-platforms v2 1/4] SbsaQemu: introduce macro to compare platform version Marcin Juszkiewicz
                   ` (4 more replies)
  0 siblings, 5 replies; 7+ messages in thread
From: Marcin Juszkiewicz @ 2023-10-16 10:06 UTC (permalink / raw)
  To: devel
  Cc: Leif Lindholm, Ard Biesheuvel, Jeremy Linton, Nhi Pham,
	Chuong Tran, Rebecca Cran, Marcin Juszkiewicz

Platform version 0.3 introduced XHCI USB controller instead of EHCI one.
But we did it in a way that there is no in-EDK2 check for platform
version (XHCI is always given).

This behaviour works with Linux as it complains about being unable to
initialize EHCI and goes on. Free/Net/Open BSD systems hang in such
situation.

Now we check are we on Platform Version 0.3 at least and then initialize
XHCI controller. Otherwise we disable it's node in DSDT table.

I checked several ways to handle the situation. 

SSDT overlay enabling with LocateAndInstallAcpiFromFvConfitional() was
first one but this function had only DBG2 and FACP tables.

Then looked at trying to detect XHCI from _STA method. But this is
sysbus device which is there or not without way to discover it.

Next attempt was to have variable in DSDT and to use it in _STA. Too
much trouble.

Then looked again at code from
Ampere/JadePkg/Drivers/AcpiPlatformDxe/AcpiDsdt.c and noticed
UpdateStatusMethodObject() function. Copied some code and it worked.

Booting OpenBSD reminded me to update table checksum.

---
Changes in v2:
- XHCI initialized only on PlatVer 0.3+
- XHCI disabled in DSDT for older platforms
- no SSDT overlays for EHCI/XHCI
- no EHCI at all (it does not work anyway)
- no Pcd renaming

---
Marcin Juszkiewicz (4):
      SbsaQemu: introduce macro to compare platform version
      SbsaQemu: add AcpiLib
      SbsaQemu: initialize XHCI only if it exists
      SbsaQemu: disable XHCI in DSDT if not present

 Platform/Qemu/SbsaQemu/SbsaQemu.dsc                  |  2 +
 .../Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.inf      |  4 +
 .../IndustryStandard/SbsaQemuPlatformVersion.h       | 25 ++++++
 .../Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c        | 93 ++++++++++++++++++++
 .../SbsaQemuPlatformDxe/SbsaQemuPlatformDxe.c        | 47 +++++-----
 5 files changed, 149 insertions(+), 22 deletions(-)
---
base-commit: 06f6274d56422084281886fad447ab117fd0e487
change-id: 20231013-ehci-xhci-fix-c529356a7a8f

Best regards,
-- 
Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#109625): https://edk2.groups.io/g/devel/message/109625
Mute This Topic: https://groups.io/mt/101992601/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 7+ messages in thread

* [edk2-devel] [PATCH edk2-platforms v2 1/4] SbsaQemu: introduce macro to compare platform version
  2023-10-16 10:06 [edk2-devel] [PATCH edk2-platforms v2 0/4] Provide XHCI USB controller only for newer hardware Marcin Juszkiewicz
@ 2023-10-16 10:06 ` Marcin Juszkiewicz
  2023-10-16 10:06 ` [edk2-devel] [PATCH edk2-platforms v2 2/4] SbsaQemu: add AcpiLib Marcin Juszkiewicz
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 7+ messages in thread
From: Marcin Juszkiewicz @ 2023-10-16 10:06 UTC (permalink / raw)
  To: devel
  Cc: Leif Lindholm, Ard Biesheuvel, Jeremy Linton, Nhi Pham,
	Chuong Tran, Rebecca Cran

We want to check "if platver < 0.3" in an easy way.
---
 .../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 (#109626): https://edk2.groups.io/g/devel/message/109626
Mute This Topic: https://groups.io/mt/101992602/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] 7+ messages in thread

* [edk2-devel] [PATCH edk2-platforms v2 2/4] SbsaQemu: add AcpiLib
  2023-10-16 10:06 [edk2-devel] [PATCH edk2-platforms v2 0/4] Provide XHCI USB controller only for newer hardware Marcin Juszkiewicz
  2023-10-16 10:06 ` [edk2-devel] [PATCH edk2-platforms v2 1/4] SbsaQemu: introduce macro to compare platform version Marcin Juszkiewicz
@ 2023-10-16 10:06 ` Marcin Juszkiewicz
  2023-10-16 10:06 ` [edk2-devel] [PATCH edk2-platforms v2 3/4] SbsaQemu: initialize XHCI only if it exists Marcin Juszkiewicz
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 7+ messages in thread
From: Marcin Juszkiewicz @ 2023-10-16 10:06 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 36723e21d7b5..1e650350cb63 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 (#109627): https://edk2.groups.io/g/devel/message/109627
Mute This Topic: https://groups.io/mt/101992603/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] 7+ messages in thread

* [edk2-devel] [PATCH edk2-platforms v2 3/4] SbsaQemu: initialize XHCI only if it exists
  2023-10-16 10:06 [edk2-devel] [PATCH edk2-platforms v2 0/4] Provide XHCI USB controller only for newer hardware Marcin Juszkiewicz
  2023-10-16 10:06 ` [edk2-devel] [PATCH edk2-platforms v2 1/4] SbsaQemu: introduce macro to compare platform version Marcin Juszkiewicz
  2023-10-16 10:06 ` [edk2-devel] [PATCH edk2-platforms v2 2/4] SbsaQemu: add AcpiLib Marcin Juszkiewicz
@ 2023-10-16 10:06 ` Marcin Juszkiewicz
  2023-10-16 10:06 ` [edk2-devel] [PATCH edk2-platforms v2 4/4] SbsaQemu: disable XHCI in DSDT if not present Marcin Juszkiewicz
  2023-10-17 11:46 ` [edk2-devel] [PATCH edk2-platforms v2 0/4] Provide XHCI USB controller only for newer hardware Nhi Pham via groups.io
  4 siblings, 0 replies; 7+ messages in thread
From: Marcin Juszkiewicz @ 2023-10-16 10:06 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        | 47 +++++++++++---------
 1 file changed, 25 insertions(+), 22 deletions(-)

diff --git a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuPlatformDxe/SbsaQemuPlatformDxe.c b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuPlatformDxe/SbsaQemuPlatformDxe.c
index 36ada4270bbf..76a9cd62d4a4 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,29 @@ 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 (Staus == %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 (#109628): https://edk2.groups.io/g/devel/message/109628
Mute This Topic: https://groups.io/mt/101992604/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] 7+ messages in thread

* [edk2-devel] [PATCH edk2-platforms v2 4/4] SbsaQemu: disable XHCI in DSDT if not present
  2023-10-16 10:06 [edk2-devel] [PATCH edk2-platforms v2 0/4] Provide XHCI USB controller only for newer hardware Marcin Juszkiewicz
                   ` (2 preceding siblings ...)
  2023-10-16 10:06 ` [edk2-devel] [PATCH edk2-platforms v2 3/4] SbsaQemu: initialize XHCI only if it exists Marcin Juszkiewicz
@ 2023-10-16 10:06 ` Marcin Juszkiewicz
  2023-10-17 11:46 ` [edk2-devel] [PATCH edk2-platforms v2 0/4] Provide XHCI USB controller only for newer hardware Nhi Pham via groups.io
  4 siblings, 0 replies; 7+ messages in thread
From: Marcin Juszkiewicz @ 2023-10-16 10:06 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        | 93 ++++++++++++++++++++
 2 files changed, 97 insertions(+)

diff --git a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.inf b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.inf
index 7c7e08e0fd3a..d5ded892d6ea 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
@@ -50,6 +51,8 @@ [Pcd]
   gArmTokenSpaceGuid.PcdGicRedistributorsBase
   gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdGicItsBase
   gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdSmmuBase
+  gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdPlatformVersionMajor
+  gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdPlatformVersionMinor
 
 [Depex]
   gEfiAcpiTableProtocolGuid                       ## CONSUMES
@@ -59,6 +62,7 @@ [Guids]
 
 [Protocols]
   gEfiAcpiTableProtocolGuid                       ## CONSUMES
+  gEfiAcpiSdtProtocolGuid
 
 [FixedPcd]
   gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiDefaultCreatorId
diff --git a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c
index fd849ca1594b..f925888b0d6b 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,96 @@ AddGtdtTable (
   return Status;
 }
 
+EFI_STATUS
+UpdateStatusMethodObject (
+  EFI_ACPI_SDT_PROTOCOL   *AcpiSdtProtocol,
+  EFI_ACPI_HANDLE         TableHandle,
+  CHAR8                   *AsciiObjectPath,
+  CHAR8                   ReturnValue
+  )
+{
+  EFI_STATUS            Status;
+  EFI_ACPI_HANDLE       ObjectHandle;
+  EFI_ACPI_DATA_TYPE    DataType;
+  CHAR8                 *Buffer;
+  UINTN                 DataSize;
+
+  Status = AcpiSdtProtocol->FindPath (TableHandle, AsciiObjectPath, &ObjectHandle);
+  if (EFI_ERROR (Status) || ObjectHandle == NULL) {
+    return EFI_SUCCESS;
+  }
+  ASSERT (ObjectHandle != NULL);
+
+  Status = AcpiSdtProtocol->GetOption (ObjectHandle, 2, &DataType, (VOID *)&Buffer, &DataSize);
+  if (!EFI_ERROR (Status) && Buffer[2] == AML_BYTE_PREFIX) {
+    //
+    // Only patch when the initial value is byte object.
+    //
+    Buffer[3] = ReturnValue;
+  }
+
+  AcpiSdtProtocol->Close (ObjectHandle);
+  return Status;
+}
+
+
+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;
+    }
+
+    TableIndex = 0;
+    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;
+    }
+
+    UpdateStatusMethodObject (AcpiSdtProtocol, TableHandle, "\\_SB.USB0._STA", 0x0);
+
+    AcpiSdtProtocol->Close (TableHandle);
+    AcpiUpdateChecksum ((UINT8 *)Table, Table->Length);
+  }
+
+  return Status;
+}
+
+
 EFI_STATUS
 EFIAPI
 InitializeSbsaQemuAcpiDxe (
@@ -738,5 +829,7 @@ InitializeSbsaQemuAcpiDxe (
     DEBUG ((DEBUG_ERROR, "Failed to add GTDT table\n"));
   }
 
+  Status = DisableXhciOnOlderPlatVer();
+
   return EFI_SUCCESS;
 }

-- 
2.41.0



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#109629): https://edk2.groups.io/g/devel/message/109629
Mute This Topic: https://groups.io/mt/101992605/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] 7+ messages in thread

* Re: [edk2-devel] [PATCH edk2-platforms v2 0/4] Provide XHCI USB controller only for newer hardware
  2023-10-16 10:06 [edk2-devel] [PATCH edk2-platforms v2 0/4] Provide XHCI USB controller only for newer hardware Marcin Juszkiewicz
                   ` (3 preceding siblings ...)
  2023-10-16 10:06 ` [edk2-devel] [PATCH edk2-platforms v2 4/4] SbsaQemu: disable XHCI in DSDT if not present Marcin Juszkiewicz
@ 2023-10-17 11:46 ` Nhi Pham via groups.io
  2023-10-17 13:18   ` Marcin Juszkiewicz
  4 siblings, 1 reply; 7+ messages in thread
From: Nhi Pham via groups.io @ 2023-10-17 11:46 UTC (permalink / raw)
  To: Marcin Juszkiewicz, devel
  Cc: Leif Lindholm, Ard Biesheuvel, Jeremy Linton, Chuong Tran,
	Rebecca Cran

Hi Marcin,

On 10/16/2023 5:06 PM, Marcin Juszkiewicz wrote:
> Platform version 0.3 introduced XHCI USB controller instead of EHCI one.
> But we did it in a way that there is no in-EDK2 check for platform
> version (XHCI is always given).
> 
> This behaviour works with Linux as it complains about being unable to
> initialize EHCI and goes on. Free/Net/Open BSD systems hang in such
> situation.
> 
> Now we check are we on Platform Version 0.3 at least and then initialize
> XHCI controller. Otherwise we disable it's node in DSDT table.
> 
> I checked several ways to handle the situation.
> 
> SSDT overlay enabling with LocateAndInstallAcpiFromFvConfitional() was
> first one but this function had only DBG2 and FACP tables.
> 
> Then looked at trying to detect XHCI from _STA method. But this is
> sysbus device which is there or not without way to discover it.
> 
> Next attempt was to have variable in DSDT and to use it in _STA. Too
> much trouble.
> 
> Then looked again at code from
> Ampere/JadePkg/Drivers/AcpiPlatformDxe/AcpiDsdt.c and noticed
> UpdateStatusMethodObject() function. Copied some code and it worked.

Could you please check whether we can replace the 
UpdateStatusMethodObject() function with the 
AcpiAmlObjectUpdateInteger() function provided by AcpiLib?

Regards,
Nhi
> 
> Booting OpenBSD reminded me to update table checksum.
> 
> ---
> Changes in v2:
> - XHCI initialized only on PlatVer 0.3+
> - XHCI disabled in DSDT for older platforms
> - no SSDT overlays for EHCI/XHCI
> - no EHCI at all (it does not work anyway)
> - no Pcd renaming
> 
> ---
> Marcin Juszkiewicz (4):
>        SbsaQemu: introduce macro to compare platform version
>        SbsaQemu: add AcpiLib
>        SbsaQemu: initialize XHCI only if it exists
>        SbsaQemu: disable XHCI in DSDT if not present
> 
>   Platform/Qemu/SbsaQemu/SbsaQemu.dsc                  |  2 +
>   .../Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.inf      |  4 +
>   .../IndustryStandard/SbsaQemuPlatformVersion.h       | 25 ++++++
>   .../Drivers/SbsaQemuAcpiDxe/SbsaQemuAcpiDxe.c        | 93 ++++++++++++++++++++
>   .../SbsaQemuPlatformDxe/SbsaQemuPlatformDxe.c        | 47 +++++-----
>   5 files changed, 149 insertions(+), 22 deletions(-)
> ---
> base-commit: 06f6274d56422084281886fad447ab117fd0e487
> change-id: 20231013-ehci-xhci-fix-c529356a7a8f
> 
> Best regards,


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#109675): https://edk2.groups.io/g/devel/message/109675
Mute This Topic: https://groups.io/mt/101992601/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [edk2-devel] [PATCH edk2-platforms v2 0/4] Provide XHCI USB controller only for newer hardware
  2023-10-17 11:46 ` [edk2-devel] [PATCH edk2-platforms v2 0/4] Provide XHCI USB controller only for newer hardware Nhi Pham via groups.io
@ 2023-10-17 13:18   ` Marcin Juszkiewicz
  0 siblings, 0 replies; 7+ messages in thread
From: Marcin Juszkiewicz @ 2023-10-17 13:18 UTC (permalink / raw)
  To: Nhi Pham, devel
  Cc: Leif Lindholm, Ard Biesheuvel, Jeremy Linton, Chuong Tran,
	Rebecca Cran

W dniu 17.10.2023 o 13:46, Nhi Pham pisze:
>>
>> Then looked again at code from
>> Ampere/JadePkg/Drivers/AcpiPlatformDxe/AcpiDsdt.c and noticed
>> UpdateStatusMethodObject() function. Copied some code and it worked.
> 
> Could you please check whether we can replace the 
> UpdateStatusMethodObject() function with the 
> AcpiAmlObjectUpdateInteger() function provided by AcpiLib?

AcpiAmlObjectUpdateInteger() finds \\_SB.USB0._STA, checks Buffer[0] and
quits because it is AML_METHOD_OP while it only works for AML_NAME_OP.

So I went a way I had in meantime. Added AML variable into DSDT and then
have _STA method return it's value (as I set it to either 0xF or 0x0).

DSDT.asl snippet:
----------------------------------------------------------------------
     // USB XHCI Host Controller
     Device (USB0) {
         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 (XHCI)
         }
----------------------------------------------------------------------

And then:

     // UpdateStatusMethodObject (AcpiSdtProtocol, TableHandle, "\\_SB.USB0._STA", 0x0);
     AcpiAmlObjectUpdateInteger (AcpiSdtProtocol, TableHandle, "\\_SB.USB0.XHCI", 0x0);


With this change code works as expected. Thanks!

Will send v3.


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#109680): https://edk2.groups.io/g/devel/message/109680
Mute This Topic: https://groups.io/mt/101992601/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2023-10-17 13:18 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-10-16 10:06 [edk2-devel] [PATCH edk2-platforms v2 0/4] Provide XHCI USB controller only for newer hardware Marcin Juszkiewicz
2023-10-16 10:06 ` [edk2-devel] [PATCH edk2-platforms v2 1/4] SbsaQemu: introduce macro to compare platform version Marcin Juszkiewicz
2023-10-16 10:06 ` [edk2-devel] [PATCH edk2-platforms v2 2/4] SbsaQemu: add AcpiLib Marcin Juszkiewicz
2023-10-16 10:06 ` [edk2-devel] [PATCH edk2-platforms v2 3/4] SbsaQemu: initialize XHCI only if it exists Marcin Juszkiewicz
2023-10-16 10:06 ` [edk2-devel] [PATCH edk2-platforms v2 4/4] SbsaQemu: disable XHCI in DSDT if not present Marcin Juszkiewicz
2023-10-17 11:46 ` [edk2-devel] [PATCH edk2-platforms v2 0/4] Provide XHCI USB controller only for newer hardware Nhi Pham via groups.io
2023-10-17 13:18   ` Marcin Juszkiewicz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox