From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=pass header.i=@linaro.org header.s=google header.b=EevEaR3O; spf=pass (domain: linaro.org, ip: 209.85.128.68, mailfrom: leif.lindholm@linaro.org) Received: from mail-wm1-f68.google.com (mail-wm1-f68.google.com [209.85.128.68]) by groups.io with SMTP; Fri, 26 Apr 2019 04:16:14 -0700 Received: by mail-wm1-f68.google.com with SMTP id h11so3834517wmb.5 for ; Fri, 26 Apr 2019 04:16:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=jbZj6yvSEzlMVj63cEjWysPxPJhU1YbzNamwrNeO3mU=; b=EevEaR3OKtlvE5Hx+FKbjlKi8o8qrOLn36JXXb/qL+t+jBdtScKaOIYSdc9mHFmdYR M2XTFT0A4q5x6+0P5ALoOu+/0Dh7i50RJvq3rIu7MM+kn01A27C6bof9LX8bnuyPo4kU ICFzcOgNt+WbGGIIOkKb0rZRSqDU6wn2PWIUTL0okHaHp6SvmInROnkLonx121Tsdm4v JlbA+e1BDYgvaJBYJwOcNdXBhf2fEz2MuYuxKAGwRm7taZKiomTdmRNfuiKnrU+Xc02a sqJ27thDhgx0+qeBimvIC7Lgbsvxe2w77jwyoEgNirkTJooMMQOuROXUZ2hzS/OO23v5 6Klw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=jbZj6yvSEzlMVj63cEjWysPxPJhU1YbzNamwrNeO3mU=; b=cCAdDM75MJm4SP9e7J+14Xhb1BzJP79bbHWPxfAFSEEYiEwsuA688pUibrsDi5GEiQ 4M5hgHImapRuFrNb050VkcyQ2ZvrhUYGqYCz6DGOWUCphXLbTLbmkzC0P4pjA+3TTDOX b3YYPd9E4OICtmQj4eOpd55kSRHtEFWyEXq0e3LRhufr2ulEFlLHNrfVgcNCqg6ixD61 bpwphM4kg1kBejNXE+FvBdJQIKzBnSqhxZ6sCwy2zdqzndJNKKurPLhglHuzTYB4SSya kHAEFiWxvpa9aFaETioSqzs1MCDac25ig0fR5+yIhWL8lriHsA5oBEO+j8iIBUX733nH /PMQ== X-Gm-Message-State: APjAAAUXMxHVNA51CCFW39x6VlzHHYuIRCfLXQ9XPIcyayNLAJgllOdb vktVLWUPqPxjT4A/DxHExZO4Qg== X-Google-Smtp-Source: APXvYqxyRXwZ0Q52a6FapBG7tE0QVXY2BJPsgCrguk11HzZKtaLwXtOJeNm3A2usy+2IcPBdGUmx2A== X-Received: by 2002:a1c:9c97:: with SMTP id f145mr7594855wme.139.1556277372772; Fri, 26 Apr 2019 04:16:12 -0700 (PDT) Return-Path: Received: from bivouac.eciton.net (bivouac.eciton.net. [2a00:1098:0:86:1000:23:0:2]) by smtp.gmail.com with ESMTPSA id l23sm18703126wmj.10.2019.04.26.04.16.11 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 26 Apr 2019 04:16:12 -0700 (PDT) Date: Fri, 26 Apr 2019 12:16:10 +0100 From: "Leif Lindholm" To: Ard Biesheuvel Cc: devel@edk2.groups.io, graeme.gregory@linaro.org, masahisa.kojima@linaro.org Subject: Re: [PATCH edk2-platforms 3/3] Platform/Secure96Dxe: add ACPI description of the GPIO LEDs Message-ID: <20190426111610.w5cnegxjn66paavb@bivouac.eciton.net> References: <20190425123254.16396-1-ard.biesheuvel@linaro.org> <20190425123254.16396-4-ard.biesheuvel@linaro.org> MIME-Version: 1.0 In-Reply-To: <20190425123254.16396-4-ard.biesheuvel@linaro.org> User-Agent: NeoMutt/20170113 (1.7.2) Content-Type: text/plain; charset=us-ascii Content-Disposition: inline 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 > --- > 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 >