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=MW4Rui6j; spf=pass (domain: linaro.org, ip: 209.85.221.47, mailfrom: ard.biesheuvel@linaro.org) Received: from mail-wr1-f47.google.com (mail-wr1-f47.google.com [209.85.221.47]) by groups.io with SMTP; Thu, 25 Apr 2019 05:33:03 -0700 Received: by mail-wr1-f47.google.com with SMTP id a12so6834412wrq.10 for ; Thu, 25 Apr 2019 05:33:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=GEC0nwnehD+g4nGV5OQonOwaeMovDjhLRA5QBfy5EAQ=; b=MW4Rui6jLM5p41ZXgRMwrGlRn28jpvZBN6+g7oZRQB6/Lsn8wbcmr1SIuxihhWVSwP mvTA71Mawcm9hD1OOx0ZaAyc6o+t+Y5dwk25XTOE7vVinOBVbnmwNM3TWiwfm2U17Fuo g+FNUPPGI8U8IRj0X0R3p2mP+8m0tP7I+1RjjwgkGCN3/sBCsWErEHEsjcVOFatYcdkW jreQTLqrb3okXDTuwKbQibhbFOUlcYokg9ccBgDJlAcNkVMIrqsCZaRTEJDkbiBcu9Ch 7lKk95XfAjXgzkB7A5OvAkDiGo/9oRGtS94oPT/pIHhLVPJCSyikBGl7Iz3ZJSqR+pi3 CMEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=GEC0nwnehD+g4nGV5OQonOwaeMovDjhLRA5QBfy5EAQ=; b=oYRITt0CsUdAQHhJGKJ7c8AJiSQXMeTK98OkmusOO5dcyIM3F26EVKlc3Ipd0y99WB 4U3gVCV5f7aKKd+Tm3d3nnXJFF/cTVXQeMUWKL9G7+fUPoqlFQBK5ly/ZFVu6mKQdQ0L eeerV3om2w9YDaRM1b5PGW/QYcBZAYUIwpGLSVezqQ0BDfpFWQfUbF+xfLoA0R7J0O9L CH6//5y4VPWbICaVIhw3EaenuwJPeyXoxIvAOVqi+dpJHUS+fIbO0lrfGgzaC1pNjv0U BmN9/NRC2ipPXsdql04PDHEqFv+HDNTCdxupDtLOmSLmegg07AR31lT18iY/JMhpeC/O 4BQA== X-Gm-Message-State: APjAAAX1oSmE+RsoRVBevBiKyot1wsb2ereYjeR0T0VuriHl2KE2u68c N8Y82SK0SR4tni4eykGmdXPVdwZver1K3A== X-Google-Smtp-Source: APXvYqw+fAF0VFMh1U9o5LUKangvmuNMMMNhqXBsWwp6IlWytV3dIxJ1QAbhaQBLN3lZQcy85JDAIQ== X-Received: by 2002:a05:6000:104:: with SMTP id o4mr5361405wrx.106.1556195581096; Thu, 25 Apr 2019 05:33:01 -0700 (PDT) Return-Path: Received: from sudo.home ([2a01:cb1d:112:6f00:95f:9014:5be9:5288]) by smtp.gmail.com with ESMTPSA id o6sm43753488wre.60.2019.04.25.05.32.59 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 25 Apr 2019 05:33:00 -0700 (PDT) From: "Ard Biesheuvel" To: devel@edk2.groups.io Cc: leif.lindholm@linaro.org, graeme.gregory@linaro.org, masahisa.kojima@linaro.org, Ard Biesheuvel Subject: [PATCH edk2-platforms 3/3] Platform/Secure96Dxe: add ACPI description of the GPIO LEDs Date: Thu, 25 Apr 2019 14:32:54 +0200 Message-Id: <20190425123254.16396-4-ard.biesheuvel@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190425123254.16396-1-ard.biesheuvel@linaro.org> References: <20190425123254.16396-1-ard.biesheuvel@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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"), + 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