From nobody Tue Feb 10 01:30:19 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+52345+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+52345+1787277+3901457@groups.io ARC-Seal: i=1; a=rsa-sha256; t=1576669336; cv=none; d=zohomail.com; s=zohoarc; b=MdK1qvnQxLt7WrHH1uemn1TuOc0Ib6T0rD2I07Q4XhoN/+jJwWEeR50C/3d84xM1lYq7XwnNeN0sSDJJlf9ReRxbG9VmTzKx454VQFjJnFsv//wcn1zu9MiSI2YfDh4Wc6Pv2Tm1Hscm1ZO9rXJmQVEctyJ0WJd8Xa9sfln1bCY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1576669336; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:References:Sender:Subject:To; bh=CICtD5J8zy2JYcfkeyqGnsa2oWsY+B+/QyUQjW5Igso=; b=eIds1hVmJ4bjZZpM5QTcCofZ44S9ILudh6nSXoEMCxVvDzQUBMc428Lwa3skrhThu8GwUwSFBcXxMqAAd1WJr7aZiro2NCKE1/P4etl9QQs+79fEDp9AXhPQycmk0R6XPGwVuFk/g264kjYrho+xlc5Pz1FszkZRV381IITScBY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+52345+1787277+3901457@groups.io Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1576669336922929.8955642344234; Wed, 18 Dec 2019 03:42:16 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id 5TuaYY1788612xlrCQC6xA1w; Wed, 18 Dec 2019 03:42:15 -0800 X-Received: from mail-wm1-f68.google.com (mail-wm1-f68.google.com [209.85.128.68]) by mx.groups.io with SMTP id smtpd.web10.9254.1576669334899260061 for ; Wed, 18 Dec 2019 03:42:15 -0800 X-Received: by mail-wm1-f68.google.com with SMTP id f129so1538326wmf.2 for ; Wed, 18 Dec 2019 03:42:14 -0800 (PST) X-Gm-Message-State: McW58V81tiPRkSLC9sKyt0Aex1787277AA= X-Google-Smtp-Source: APXvYqwUp8DSkWJMkp6OJo4LfbNes6WuZqJX1g7I3yetW3EF1jJvY1CK8JqVfSv4QaRB0Anuj780BQ== X-Received: by 2002:a1c:7f94:: with SMTP id a142mr2710529wmd.33.1576669333034; Wed, 18 Dec 2019 03:42:13 -0800 (PST) X-Received: from localhost.localdomain ([84.203.77.210]) by smtp.gmail.com with ESMTPSA id i8sm2298168wro.47.2019.12.18.03.42.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 18 Dec 2019 03:42:12 -0800 (PST) From: "Pete Batard" To: devel@edk2.groups.io Cc: ard.biesheuvel@linaro.org, leif.lindholm@linaro.org, philmd@redhat.com Subject: [edk2-devel] [edk2-platforms][PATCH 3/6] Platform/RPi4: Improve SPCR and DBG2 ACPI table generation Date: Wed, 18 Dec 2019 11:41:53 +0000 Message-Id: <20191218114156.9036-4-pete@akeo.ie> In-Reply-To: <20191218114156.9036-1-pete@akeo.ie> References: <20191218114156.9036-1-pete@akeo.ie> MIME-Version: 1.0 Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,pete@akeo.ie Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1576669335; bh=W/EQssYqIH3TjriUV1a/2CNXIX6ySIemxwM0gxMv/NI=; h=Cc:Date:From:Reply-To:Subject:To; b=HDdOS2bi6LJ01peNhfQMnLRvWwSXwX8G6BY+XXfSRmtt31E4AWBdR6/NUSulwObgj6f kT1WidsH370mKsnalpKJz6LXRomIZxu8gDlwXXrzT1tqA7q7+N8Y7D0b3OAwZlwMfxqKi nK38KQN4udjzc1Bc+y0596PoYnONTiFyL+M= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Type: text/plain; charset="utf-8" Use code derived from JunoPkg to generate our serial tables and also use PCDs where possible. Signed-off-by: Pete Batard --- Platform/RaspberryPi/RPi4/AcpiTables/AcpiTables.inf | 4 +- Platform/RaspberryPi/RPi4/AcpiTables/Dbg2.aslc | 100 ++++++++++++++++= +--- Platform/RaspberryPi/RPi4/AcpiTables/Spcr.asl | 48 ---------- Platform/RaspberryPi/RPi4/AcpiTables/Spcr.aslc | 94 ++++++++++++++++= ++ 4 files changed, 183 insertions(+), 63 deletions(-) diff --git a/Platform/RaspberryPi/RPi4/AcpiTables/AcpiTables.inf b/Platform= /RaspberryPi/RPi4/AcpiTables/AcpiTables.inf index 50c9f7694d84..6b1155d66444 100644 --- a/Platform/RaspberryPi/RPi4/AcpiTables/AcpiTables.inf +++ b/Platform/RaspberryPi/RPi4/AcpiTables/AcpiTables.inf @@ -31,7 +31,7 @@ [Sources] Gtdt.aslc Dsdt.asl Csrt.aslc - Spcr.asl + Spcr.aslc =20 [Packages] ArmPkg/ArmPkg.dec @@ -47,4 +47,6 @@ [FixedPcd] gArmTokenSpaceGuid.PcdArmArchTimerVirtIntrNum gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase gArmTokenSpaceGuid.PcdGicDistributorBase + gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase + gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate gEmbeddedTokenSpaceGuid.PcdInterruptBaseAddress diff --git a/Platform/RaspberryPi/RPi4/AcpiTables/Dbg2.aslc b/Platform/Rasp= berryPi/RPi4/AcpiTables/Dbg2.aslc index 849cf5134793..589a5c2cbd71 100644 --- a/Platform/RaspberryPi/RPi4/AcpiTables/Dbg2.aslc +++ b/Platform/RaspberryPi/RPi4/AcpiTables/Dbg2.aslc @@ -2,27 +2,99 @@ * * Debug Port Table (DBG2) * - * Copyright (c) Microsoft Corporation. All rights reserved. + * Copyright (c) 2019, Pete Batard + * Copyright (c) 2012-2016, ARM Limited. All rights reserved. * * SPDX-License-Identifier: BSD-2-Clause-Patent * **/ =20 -UINT8 Dbg2[92] =3D { - 0x44, 0x42, 0x47, 0x32, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x4D, 0x53, 0x46, 0x54, 0x20, 0x20, 0x45, 0x44, 0x4B, 0x32, - 0x20, 0x20, 0x20, 0x20, 0x01, 0x00, 0x00, 0x00, 0x4D, 0x53, - 0x46, 0x54, 0x01, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x01, 0x0A, 0x00, - 0x26, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x80, 0x10, 0x00, - 0x00, 0x00, 0x16, 0x00, 0x22, 0x00, 0x00, 0x20, 0x00, 0x10, - 0x00, 0x50, 0x21, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x00, - 0x00, 0x00, '\\', '_', 'S', 'B', '.', 'U', 'R', 'T', - 'M', 0x00, +#include +#include +#include +#include + +#include "AcpiTables.h" + +#pragma pack(1) + +#define RPI_DBG2_NUM_DEBUG_PORTS 1 +#define RPI_DBG2_NUMBER_OF_GENERIC_ADDRESS_REGISTERS 1 +#define RPI_DBG2_NAMESPACESTRING_FIELD_SIZE 10 + +// +// When using the miniUART, PcdSerialRegisterBase points to the 8250 base = address, +// which is offset by 0x40 from the actual Bcm2835 base address +// +#define RPI_UART_BASE_ADDRESS (FixedPcdGet64 (Pc= dSerialRegisterBase) - 0x40) +#define RPI_UART_LENGTH 0x70 +// +// RPI_UART_STR should match the value used Uart.asl +// +#define RPI_UART_STR { '\\', '_', 'S', = 'B', '.', 'U', 'R', 'T', 'M', 0x00 } + +typedef struct { + EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT Dbg2Device; + EFI_ACPI_5_1_GENERIC_ADDRESS_STRUCTURE BaseAddressRegiste= r; + UINT32 AddressSize; + UINT8 NameSpaceString[RP= I_DBG2_NAMESPACESTRING_FIELD_SIZE]; +} DBG2_DEBUG_DEVICE_INFORMATION; + +typedef struct { + EFI_ACPI_DEBUG_PORT_2_DESCRIPTION_TABLE Description; + DBG2_DEBUG_DEVICE_INFORMATION Dbg2DeviceInfo[RPI= _DBG2_NUM_DEBUG_PORTS]; +} DBG2_TABLE; + + +#define DBG2_DEBUG_PORT_DDI(NumReg, SubType, UartBase, UartAddrLen, UartNa= meStr) { \ + { = \ + EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT_REVISION, /* U= INT8 Revision */ \ + sizeof (DBG2_DEBUG_DEVICE_INFORMATION), /* U= INT16 Length */ \ + NumReg, /* U= INT8 NumberofGenericAddressRegisters */ \ + RPI_DBG2_NAMESPACESTRING_FIELD_SIZE, /* U= INT16 NameSpaceStringLength */ \ + OFFSET_OF (DBG2_DEBUG_DEVICE_INFORMATION, NameSpaceString), /* U= INT16 NameSpaceStringOffset */ \ + 0, /* U= INT16 OemDataLength */ \ + 0, /* U= INT16 OemDataOffset */ \ + EFI_ACPI_DBG2_PORT_TYPE_SERIAL, /* U= INT16 Port Type */ \ + SubType, /* U= INT16 Port Subtype */ \ + {EFI_ACPI_RESERVED_BYTE, EFI_ACPI_RESERVED_BYTE}, /* U= INT8 Reserved[2] */ \ + OFFSET_OF (DBG2_DEBUG_DEVICE_INFORMATION, BaseAddressRegister), /* U= INT16 BaseAddressRegister Offset */ \ + OFFSET_OF (DBG2_DEBUG_DEVICE_INFORMATION, AddressSize) /* U= INT16 AddressSize Offset */ \ + }, = \ + ARM_GAS32 (UartBase), /* EFI_ACPI_5_1_GENER= IC_ADDRESS_STRUCTURE BaseAddressRegister */ \ + UartAddrLen, /* UINT32 AddressSiz= e */ \ + UartNameStr /* UINT8 NameSpaceS= tring[MAX_DBG2_NAME_LEN] */ \ + } + + +STATIC DBG2_TABLE Dbg2 =3D { + { + ACPI_HEADER ( + EFI_ACPI_5_1_DEBUG_PORT_2_TABLE_SIGNATURE, + DBG2_TABLE, + EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT_REVISION + ), + OFFSET_OF (DBG2_TABLE, Dbg2DeviceInfo), + RPI_DBG2_NUM_DEBUG_PORTS /* U= INT32 NumberDbgDeviceInfo */ + }, + { + /* + * Kernel Debug Port + */ + DBG2_DEBUG_PORT_DDI ( + RPI_DBG2_NUMBER_OF_GENERIC_ADDRESS_REGISTERS, + EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_BCM2835_UART, + RPI_UART_BASE_ADDRESS, + RPI_UART_LENGTH, + RPI_UART_STR + ), + } }; =20 +#pragma pack() + // -// Reference the table being generated to prevent the optimizer from remov= ing the -// data structure from the executable +// Reference the table being generated to prevent the optimizer from remov= ing +// the data structure from the executable // VOID* CONST ReferenceAcpiTable =3D &Dbg2; diff --git a/Platform/RaspberryPi/RPi4/AcpiTables/Spcr.asl b/Platform/Raspb= erryPi/RPi4/AcpiTables/Spcr.asl deleted file mode 100644 index 4632a4f193e7..000000000000 --- a/Platform/RaspberryPi/RPi4/AcpiTables/Spcr.asl +++ /dev/null @@ -1,48 +0,0 @@ -/** @file - * - * Serial Port Console Redirection Table (SPCR) - * - * Copyright (c) 2019, ARM Ltd. All rights reserved. - * Copyright (c) 2017-2018, Andrey Warkentin - * - * SPDX-License-Identifier: BSD-2-Clause-Patent - * - **/ - -[000h 0000 4] Signature : "SPCR" [Serial Port Cons= ole Redirection table] -[004h 0004 4] Table Length : 00000050 -[008h 0008 1] Revision : 02 -[009h 0009 1] Checksum : 00 -[00Ah 0010 6] Oem ID : "RPiEFI" -[010h 0016 8] Oem Table ID : "RPi4UEFI" -[018h 0024 4] Oem Revision : 00000001 -[01Ch 0028 4] Asl Compiler ID : "----" -[020h 0032 4] Asl Compiler Revision : 00000000 - -[024h 0036 1] Interface Type : 10 // 0x03 =3D PL011, 0= x10 =3D BCM2835 -[025h 0037 3] Reserved : 000000 - -[028h 0040 12] Serial Port Register : [Generic Address Structure] -[028h 0040 1] Space ID : 00 [SystemMemory] -[029h 0041 1] Bit Width : 20 -[02Ah 0042 1] Bit Offset : 00 -[02Bh 0043 1] Encoded Access Width : 03 [DWord Access:32] -[02Ch 0044 8] Address : FE215000 - -[034h 0052 1] Interrupt Type : 08 // ARMH GIC interrupt -[035h 0053 1] PCAT-compatible IRQ : 00 -[036h 0054 4] Interrupt : 7D -[03Ah 0058 1] Baud Rate : 07 // 115200 -[03Bh 0059 1] Parity : 00 -[03Ch 0060 1] Stop Bits : 01 -[03Dh 0061 1] Flow Control : 00 -[03Eh 0062 1] Terminal Type : 02 // VT-UTF8 -[04Ch 0076 1] Reserved : 00 -[040h 0064 2] PCI Device ID : FFFF -[042h 0066 2] PCI Vendor ID : FFFF -[044h 0068 1] PCI Bus : 00 -[045h 0069 1] PCI Device : 00 -[046h 0070 1] PCI Function : 00 -[047h 0071 4] PCI Flags : 00000000 -[04Bh 0075 1] PCI Segment : 00 -[04Ch 0076 4] Reserved : 00000000 diff --git a/Platform/RaspberryPi/RPi4/AcpiTables/Spcr.aslc b/Platform/Rasp= berryPi/RPi4/AcpiTables/Spcr.aslc new file mode 100644 index 000000000000..65f48ceae688 --- /dev/null +++ b/Platform/RaspberryPi/RPi4/AcpiTables/Spcr.aslc @@ -0,0 +1,94 @@ +/** @file +* SPCR Table +* +* Copyright (c) 2019 Pete Batard +* Copyright (c) 2014-2016, ARM Limited. All rights reserved. +* +* SPDX-License-Identifier: BSD-2-Clause-Patent +* +**/ + +#include +#include +#include +#include + +#include "AcpiTables.h" + + +#define RPI_UART_FLOW_CONTROL_NONE 0 + +// +// When using the miniUART, PcdSerialRegisterBase points to the 8250 base = address, +// which is offset by 0x40 from the actual Bcm2835 base address +// +#define RPI_UART_BASE_ADDRESS (FixedPcdGet64 (PcdSerialRegi= sterBase) - 0x40) +#define RPI_UART_INTERRUPT 0x7D + +STATIC EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE Spcr =3D { + ACPI_HEADER ( + EFI_ACPI_5_1_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE, + EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE, + EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_REVISION + ), + // UINT8 InterfaceType; + EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_INTERFACE_TYPE_BCM2835_UA= RT, + // UINT8 Reserved1[3]; + { + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE, + EFI_ACPI_RESERVED_BYTE + }, + // EFI_ACPI_5_1_GENERIC_ADDRESS_STRUCTURE BaseAddress; + ARM_GAS32 (RPI_UART_BASE_ADDRESS), + // UINT8 InterruptType; + EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_INTERRUPT_TYPE_GIC, + // UINT8 Irq; + 0, // Not used on ARM + // UINT32 GlobalSystemInterrupt; + RPI_UART_INTERRUPT, + // UINT8 BaudRate; +#if (FixedPcdGet64 (PcdUartDefaultBaudRate) =3D=3D 9600) + EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_BAUD_RATE_9600, +#elif (FixedPcdGet64 (PcdUartDefaultBaudRate) =3D=3D 19200) + EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_BAUD_RATE_19200, +#elif (FixedPcdGet64 (PcdUartDefaultBaudRate) =3D=3D 57600) + EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_BAUD_RATE_57600, +#elif (FixedPcdGet64 (PcdUartDefaultBaudRate) =3D=3D 115200) + EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_BAUD_RATE_115200, +#else +#error Unsupported SPCR Baud Rate +#endif + // UINT8 Parity; + EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_PARITY_NO_PARITY, + // UINT8 StopBits; + EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_STOP_BITS_1, + // UINT8 FlowControl; + RPI_UART_FLOW_CONTROL_NONE, + // UINT8 TerminalType; + EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_TERMINAL_TYPE_VT_UTF8, + // UINT8 Reserved2; + EFI_ACPI_RESERVED_BYTE, + // UINT16 PciDeviceId; + 0xFFFF, + // UINT16 PciVendorId; + 0xFFFF, + // UINT8 PciBusNumber; + 0x00, + // UINT8 PciDeviceNumber; + 0x00, + // UINT8 PciFunctionNumber; + 0x00, + // UINT32 PciFlags; + 0x00000000, + // UINT8 PciSegment; + 0x00, + // UINT32 Reserved3; + EFI_ACPI_RESERVED_DWORD +}; + +// +// Reference the table being generated to prevent the optimizer from remov= ing the +// data structure from the executable +// +VOID* CONST ReferenceAcpiTable =3D &Spcr; --=20 2.21.0.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#52345): https://edk2.groups.io/g/devel/message/52345 Mute This Topic: https://groups.io/mt/68791813/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-