From: "Ard Biesheuvel" <ard.biesheuvel@linaro.org>
To: devel@edk2.groups.io
Cc: leif.lindholm@linaro.org, graeme.gregory@linaro.org,
masahisa.kojima@linaro.org,
Ard Biesheuvel <ard.biesheuvel@linaro.org>
Subject: [PATCH edk2-platforms 3/3] Platform/Secure96Dxe: add ACPI description of the GPIO LEDs
Date: Thu, 25 Apr 2019 14:32:54 +0200 [thread overview]
Message-ID: <20190425123254.16396-4-ard.biesheuvel@linaro.org> (raw)
In-Reply-To: <20190425123254.16396-1-ard.biesheuvel@linaro.org>
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.biesheuvel@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"),
+ 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
next prev parent reply other threads:[~2019-04-25 12:33 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-25 12:32 [PATCH edk2-platforms 0/3] enable Secure96 GPIO LEDs on ACPI systems Ard Biesheuvel
2019-04-25 12:32 ` [PATCH edk2-platforms 1/3] Silicon/SynQuacer: describe 96boards LS connector GPIOs via ACPI Ard Biesheuvel
2019-04-25 12:32 ` [PATCH edk2-platforms 2/3] Platform/96Boards: add ACPI support to mezzanine/LS connector driver Ard Biesheuvel
2019-04-25 12:32 ` Ard Biesheuvel [this message]
2019-04-26 11:16 ` [PATCH edk2-platforms 3/3] Platform/Secure96Dxe: add ACPI description of the GPIO LEDs Leif Lindholm
2019-04-26 11:56 ` Ard Biesheuvel
2019-04-26 14:17 ` Leif Lindholm
2019-04-26 14:18 ` Ard Biesheuvel
2019-04-26 11:10 ` [PATCH edk2-platforms 0/3] enable Secure96 GPIO LEDs on ACPI systems Leif Lindholm
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190425123254.16396-4-ard.biesheuvel@linaro.org \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox