On Thu, Apr 25, 2019 at 02:32:54PM +0200, Ard Biesheuvel wrote: > Wire up the new 96boards mezzanine SSDT loading support, and use it > to describe the four GPIO LEDs on the Secure96 mezzanine board. > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Ard Biesheuvel <ard.biesheu...@linaro.org> > --- > Platform/96Boards/Secure96Dxe/Secure96.asl | 103 ++++++++++++++++++++ > Platform/96Boards/Secure96Dxe/Secure96Dxe.c | 59 ++++++++++- > Platform/96Boards/Secure96Dxe/Secure96Dxe.inf | 1 + > 3 files changed, 158 insertions(+), 5 deletions(-) > > diff --git a/Platform/96Boards/Secure96Dxe/Secure96.asl > b/Platform/96Boards/Secure96Dxe/Secure96.asl > new file mode 100644 > index 000000000000..bb9dac462a33 > --- /dev/null > +++ b/Platform/96Boards/Secure96Dxe/Secure96.asl > @@ -0,0 +1,103 @@ > +/** @file > + * Copyright (c) 2019, Linaro Limited. All rights reserved. > + * > + * This program and the accompanying materials are licensed and made > + * available under the terms and conditions of the BSD License which > + * accompanies this distribution. The full text of the license may be > + * found at http://opensource.org/licenses/bsd-license.php > + * > + * THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > + * WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR > + * IMPLIED. > + */ > + > +#include "Secure96.h" > + > +DefinitionBlock ("Secure96.aml", "SSDT", 2, "LINARO", "SECURE96", 1) > +{ > + External (\_SB.LS96.GPIO) > + > + Scope (_SB) > + { > + Device (LD96) > + { > + Name (_HID, "PRP0001") // _HID: Hardware ID > + Name (_UID, 0x00) // _UID: Unique ID > + Name (_DSD, Package () { > + ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Surely the above stanza is the most repeated bit of boiler plate in the entire tree? I count 207 instances before this goes in. Can we stick a #define in some common header for this and reuse? ACPI_DSD_UUID? As I said, not required for this patch, but would be worth addressing. / Leif > + Package () { > + Package () { "compatible", "gpio-leds" }, > + } > + }) > + > + Method (_CRS) > + { > + Return (\_SB.LS96.GPIO) > + } > + > + Device (LDU1) > + { > + Name (_ADR, 0x1) > + Name (_DSD, Package () { > + ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), > + Package () { > + Package () { "label", "secure96-u1" }, > + Package () { "gpios", > + Package () { > + ^^LD96, 0, 6, FixedPcdGet32 (PcdGpioPolarity) > + }, > + }, > + } > + }) > + } > + > + Device (LDU2) > + { > + Name (_ADR, 0x2) > + Name (_DSD, Package () { > + ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), > + Package () { > + Package () { "label", "secure96-u2" }, > + Package () { "gpios", > + Package () { > + ^^LD96, 0, 5, FixedPcdGet32 (PcdGpioPolarity) > + }, > + }, > + } > + }) > + } > + > + Device (LDU3) > + { > + Name (_ADR, 0x3) > + Name (_DSD, Package () { > + ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), > + Package () { > + Package () { "label", "secure96-u3" }, > + Package () { "gpios", > + Package () { > + ^^LD96, 0, 8, FixedPcdGet32 (PcdGpioPolarity) > + }, > + }, > + } > + }) > + } > + > + Device (LDU4) > + { > + Name (_ADR, 0x4) > + Name (_DSD, Package () { > + ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), > + Package () { > + Package () { "label", "secure96-u4" }, > + Package () { "gpios", > + Package () { > + ^^LD96, 0, 7, FixedPcdGet32 (PcdGpioPolarity) > + }, > + }, > + } > + }) > + } > + } > + } > +} > diff --git a/Platform/96Boards/Secure96Dxe/Secure96Dxe.c > b/Platform/96Boards/Secure96Dxe/Secure96Dxe.c > index 6c48d7c0b024..68f8ec812b52 100644 > --- a/Platform/96Boards/Secure96Dxe/Secure96Dxe.c > +++ b/Platform/96Boards/Secure96Dxe/Secure96Dxe.c > @@ -24,6 +24,8 @@ > > #include "Secure96.h" > > +#define SECURE96_SSDT_OEM_TABLE_ID > SIGNATURE_64('S','E','C','U','R','E','9','6') > + > STATIC CONST UINT32 mI2cAtmelSha204aSlaveAddress[] = { > ATSHA204A_SLAVE_ADDRESS, > > @@ -148,15 +150,20 @@ ApplyDeviceTreeOverlay ( > UINTN OverlaySize; > EFI_STATUS Status; > INT32 Err; > + UINTN Index; > > // > // Load the raw overlay DTB image from the raw section of this FFS file. > // > - Status = GetSectionFromFv (&gEfiCallerIdGuid, > - EFI_SECTION_RAW, 0, &Overlay, &OverlaySize); > - ASSERT_EFI_ERROR (Status); > - if (EFI_ERROR (Status)) { > - return EFI_NOT_FOUND; > + for (Index = 0;; Index++) { > + Status = GetSectionFromFv (&gEfiCallerIdGuid, > + EFI_SECTION_RAW, Index, &Overlay, &OverlaySize); > + if (EFI_ERROR (Status)) { > + return EFI_NOT_FOUND; > + } > + if (!fdt_check_header (Overlay)) { > + break; > + } > } > > // > @@ -177,8 +184,50 @@ ApplyDeviceTreeOverlay ( > return EFI_SUCCESS; > } > > +/** > + Install the mezzanine's SSDT table > + > + @param[in] This Pointer to the MEZZANINE_PROTOCOL instance. > + @param[in] Dtb Pointer to the device tree blob > + > + @return EFI_SUCCESS Operation succeeded. > + @return other An error has occurred. > +**/ > +STATIC > +EFI_STATUS > +EFIAPI > +InstallSsdtTable ( > + IN MEZZANINE_PROTOCOL *This, > + IN EFI_ACPI_TABLE_PROTOCOL *AcpiProtocol > + ) > +{ > + EFI_ACPI_DESCRIPTION_HEADER *Ssdt; > + UINTN SsdtSize; > + EFI_STATUS Status; > + UINTN Index; > + UINTN TableKey; > + > + // > + // Load SSDT table from the raw section of this FFS file. > + // > + for (Index = 0;; Index++) { > + Status = GetSectionFromFv (&gEfiCallerIdGuid, EFI_SECTION_RAW, Index, > + (VOID **)&Ssdt, &SsdtSize); > + if (EFI_ERROR (Status)) { > + return EFI_NOT_FOUND; > + } > + if (SsdtSize >= sizeof (EFI_ACPI_DESCRIPTION_HEADER) && > + Ssdt->OemTableId == SECURE96_SSDT_OEM_TABLE_ID) { > + break; > + } > + } > + return AcpiProtocol->InstallAcpiTable (AcpiProtocol, Ssdt, SsdtSize, > + &TableKey); > +} > + > STATIC MEZZANINE_PROTOCOL mMezzanine = { > ApplyDeviceTreeOverlay, > + InstallSsdtTable, > ARRAY_SIZE (mI2c0Devices), > 0, > mI2c0Devices, > diff --git a/Platform/96Boards/Secure96Dxe/Secure96Dxe.inf > b/Platform/96Boards/Secure96Dxe/Secure96Dxe.inf > index 72dbf1314c15..ce4c8b5f8fa5 100644 > --- a/Platform/96Boards/Secure96Dxe/Secure96Dxe.inf > +++ b/Platform/96Boards/Secure96Dxe/Secure96Dxe.inf > @@ -21,6 +21,7 @@ [Defines] > ENTRY_POINT = Secure96DxeEntryPoint > > [Sources] > + Secure96.asl > Secure96.dts > Secure96.h > Secure96Dxe.c > -- > 2.20.1 > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#39638): https://edk2.groups.io/g/devel/message/39638 Mute This Topic: https://groups.io/mt/31341744/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-